Použitie funkcie SELECTEDVALUE namiesto funkcie VALUES

Ako modelár údajov možno niekedy budete musieť napísať výraz jazyka DAX, ktorý testuje, či sa stĺpec filtruje podľa konkrétnej hodnoty.

V starších verziách jazyka DAX sa táto požiadavka bezpečne dosiahla pomocou vzoru zahŕňajúceho tri funkcie jazyka DAX. IF, HASONEVALUE a VALUES. Nasledujúca definícia mierky predstavuje príklad. Vypočíta čiastku dane z predaja, ale iba na predaj uskutočnený pre austrálskych zákazníkov.

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

V príklade vráti funkcia HASONEVALUE hodnotu TRUE iba v prípade, že v aktuálnom kontexte filtra je viditeľná jedna hodnota stĺpca Krajina – oblasť . Keď je hodnota TRUE, funkcia VALUES sa porovnáva s doslovovým textom "Australia". Keď funkcia VALUES vráti hodnotu TRUE, mierka Sales sa vynásobí hodnotou 0,10 (predstavujúcou 10 %). Ak funkcia HASONEVALUE vráti hodnotu FALSE, pretože stĺpec filtruje viac ako jedna hodnota – prvá funkcia IF vráti hodnotu BLANK.

Použitie HASONEVALUE je obrannou technikou. Je to potrebné, pretože je možné, že stĺpec Krajina – oblasť filtrujú viaceré hodnoty. V tomto prípade funkcia VALUES vráti tabuľku s viacerými riadkami. Pri porovnávaní tabuľky s viacerými riadkami na skalárnu hodnotu sa vyskytla chyba.

Odporúčanie

Odporúča sa použiť funkciu SELECTEDVALUE . Dosahuje rovnaký výsledok ako vzor popísaný v tomto článku, ale oveľa efektívnejšie a elegantnejšie.

Pomocou funkcie SELECTEDVALUE sa teraz prepíše definícia mierky príkladu.

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

Tip

Do funkcie SELECTEDVALUE je možné odovzdať hodnotu alternatívneho výsledku . Hodnota alternatívneho výsledku sa vráti, keď sa v stĺpci nepoužijú žiadne filtre alebo viaceré filtre.