Použití funkce SELECTEDVALUE místo funkce VALUES

Jako modelátor dat můžete někdy potřebovat napsat výraz DAX, který testuje, jestli je sloupec filtrovaný podle konkrétní hodnoty.

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 DAX; IF, HASONEVALUE a VALUES. Následující definice míry představuje příklad. Vypočítá částku daně z prodeje, ale pouze pro prodeje pro australské zákazníky.

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

V příkladu vrátí funkce HASONEVALUE hodnotu TRUE pouze v případě, že je v aktuálním kontextu filtru viditelná jedna hodnota sloupce Země-oblast . Pokud je hodnota TRUE, funkce VALUES se porovná s literálovým textem "Austrálie". Když funkce VALUES vrátí hodnotu PRAVDA, míra Sales se vynásobí hodnotou 0,10 (představující 10 %). Pokud funkce HASONEVALUE vrátí hodnotu FALSE, protože více než jedna hodnota filtruje sloupec, vrátí první funkce KDYŽ prázdnou hodnotu.

Použití HASONEVALUE je obranná technika. Je to povinné, protože je možné, že sloupec Country-Region filtruje více hodnot. V tomto případě vrátí funkce VALUES tabulku s více řádky. Porovnání tabulky s více řádky se skalární hodnotou způsobí chybu.

Doporučení

Doporučujeme použít funkci SELECTEDVALUE . Dosahuje stejného výsledku jako vzor popsaný v tomto článku, ale efektivněji a elegantněji.

Pomocí funkce SELECTEDVALUE se teď přepíše ukázková definice míry.

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

Tip

Do funkce SELECTEDVALUE je možné předat alternativní výslednou hodnotu. Alternativní výsledná hodnota se vrátí, když ve sloupci nejsou použity žádné filtry nebo více filtrů.