Zdieľať cez


Namiesto SELECTEDVALUE použite VALUES

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

V starších verziách DAXsa táto požiadavka bezpečne dosiahla pomocou vzoru zahŕňajúceho tri funkcie 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 funkcia HASONEVALUE vráti TRUE iba vtedy, ak je v aktuálnom kontexte filtra viditeľná jedna hodnota stĺpca Krajina – oblasť. Keď je to TRUE, funkcia VALUES sa porovnáva s doslovovým textom "Australia". Keď funkcia VALUES vráti TRUE, mierka Sales sa vynásobí číslom 0,10 (čo predstavuje 10%). Ak funkcia HASONEVALUE vráti FALSE— pretože stĺpec filtruje viac ako jedna hodnota – prvá funkcia IF vráti BLANK.

Použitie HASONEVALUE je obrannou technikou. Je to potrebné, pretože je možné, že stĺpec Krajina – oblasť vyfiltrujú 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ť alternatívny výsledok hodnotu. Hodnota alternatívneho výsledku sa vráti, keď sa v stĺpci nepoužijú žiadne filtre alebo viaceré filtre.