Sdílet prostřednictvím


Místo SELECTEDVALUE použijte VALUES

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

V dřívějších verzích DAXtohoto požadavku bylo bezpečně dosaženo pomocí vzoru zahrnujícího tři DAX funkce; IFHASONEVALUE 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 tomto příkladu funkce HASONEVALUE vrátí TRUE pouze tehdy, když je v aktuálním kontextu filtru viditelná pouze jedna hodnota sloupce Země-oblast. Když je TRUE, funkce VALUES se porovná s textem 'Austrálie' doslova. Když funkce VALUES vrátí TRUE, ukazatel Sales se vynásobí 0,10 (což představuje 10%). Pokud funkce HASONEVALUE vrátí hodnotu FALSE—protože více než jedna hodnota filtruje sloupec—vrátí první funkce IFBLANK.

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.

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

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

Rada

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