DAX: Použití funkce SELECTEDVALUE místo funkce VALUESDAX: Use SELECTEDVALUE instead of VALUES

V případě modelování dat možná budete muset občas napsat výraz DAX, který testuje, jestli se sloupec filtruje podle konkrétní hodnoty.As a data modeler, sometimes you might need to write a DAX expression that tests whether a column is filtered by a specific value.

V dřívějších verzích jazyka DAX byl tento požadavek bezpečně dosažen pomocí vzoru zahrnujícího tři funkce jazyka DAX.In earlier versions of DAX, this requirement was safely achieved by using a pattern involving three DAX functions. Jedná se o funkce IF, HASONEVALUE a VALUES.The functions are IF, HASONEVALUE and VALUES. Následující definice míry představuje příklad.The following measure definition presents an example. Vypočítá částku prodejní daně, ale pouze za prodeje provedené australským zákazníkům.It calculates the sales tax amount, but only for sales made to Australian customers.

Australian Sales Tax =
IF(
    HASONEVALUE(Customer[Country-Region]),
    IF(
        VALUES(Customer[Country-Region]) = "Australia",
        [Sales] * 0.10
    )
)

V tomto příkladu vrací funkce HASONEVALUE hodnotu TRUE pouze tehdy, když se sloupec Country-Region filtruje jednou hodnotou.In the example, the HASONEVALUE function returns TRUE only when a single value filters the Country-Region column. Pokud je hodnota TRUE, je funkce VALUES porovnávána s doslovným textem „Australia“.When it's TRUE, the VALUES function is compared to the literal text "Australia". Pokud funkce VALUES vrátí hodnotu TRUE, je míra Sales vynásobena hodnotou 0,10 (což představuje 10 %).When the VALUES function returns TRUE, the Sales measure is multiplied by 0.10 (representing 10%). Pokud funkce HASONEVALUE vrátí FALSE, protože se sloupec filtruje více hodnotami, vrátí první funkce IF prázdnou hodnotu.If the HASONEVALUE function returns FALSE—because more than one value filters the column—the first IF function returns BLANK.

Použití funkce HASONEVALUE je defenzivní technikou.The use of the HASONEVALUE is a defensive technique. Vyžaduje se, protože je možné, že sloupec Country-Region se filtruje více hodnotami.It's required because it's possible that multiple values filter the Country-Region column. V takovém případě vrací funkce VALUES tabulku s více řádky.In this case, the VALUES function returns a table of multiple rows. Při porovnání tabulky s více řádky se skalární hodnotou dojde k chybě.Comparing a table of multiple rows to a scalar value results in an error.

DoporučeníRecommendation

Doporučujeme použít funkci SELECTEDVALUE.We recommend that you use the SELECTEDVALUE function. Dosahuje stejného výsledku jako vzor popsaný v tomto článku, ale je ještě efektivnější a pohodlnější.It achieves the same outcome as the pattern described in this article, yet more efficiently and elegantly.

Ukázková definice míry je teď přepsaná pomocí funkce SELECTEDVALUE.Using the SELECTEDVALUE function, the example measure definition is now rewritten.

Australian Sales Tax =
IF(
    SELECTEDVALUE(Customer[Country-Region]) = "Australia",
    [Sales] * 0.10
)

Tip

Do funkce SELECTEDVALUE je možné předat hodnotu alternativního výsledku.It's possible to pass an alternate result value into the SELECTEDVALUE function. Hodnota alternativního výsledku se vrátí, když se na sloupec nepoužívají žádné filtry nebo více filtrů.The alternate result value is returned when either no filters—or multiple filters—are applied to the column.

Další krokyNext steps

Další informace k tomuto článku najdete v následujících tématech:For more information about this article, check out the following resources: