Brug SELECTEDVALUE i stedet for VÆRDIER

Som dataudformer kan det nogle gange være nødvendigt at skrive et DAX-udtryk, der tester, om en kolonne er filtreret efter en bestemt værdi.

I tidligere versioner af DAX blev dette krav opfyldt sikkert ved hjælp af et mønster, der involverer tre DAX-funktioner. IF, HASONEVALUE og VALUES. Følgende målingsdefinition viser et eksempel. Det beregner momsbeløbet, men kun for salg til australske kunder.

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

I eksemplet returnerer funktionen HASONEVALUE kun TRUE, når en enkelt værdi i kolonnen Country-Region er synlig i den aktuelle filterkontekst. Når det er TRUE, sammenlignes funktionen VALUES med konstantteksten "Australia". Når funktionen VALUES returnerer TRUE, multipliceres målingen Sales med 0,10 (repræsenterer 10 %). Hvis funktionen HASONEVALUE returnerer FALSE – fordi mere end én værdi filtrerer kolonnen – returnerer den første IF-funktion BLANK.

Brugen af HASONEVALUE er en defensiv teknik. Det er påkrævet, fordi det er muligt, at flere værdier filtrerer kolonnen Country-Region . I dette tilfælde returnerer funktionen VALUES en tabel med flere rækker. Hvis du sammenligner en tabel med flere rækker med en skalarværdi, resulterer det i en fejl.

Anbefaling

Det anbefales, at du bruger funktionen SELECTEDVALUE . Det opnår det samme resultat som det mønster, der er beskrevet i denne artikel, men mere effektivt og elegant.

Ved hjælp af funktionen SELECTEDVALUE omskrives eksempelmålingsdefinitionen nu.

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

Tip

Det er muligt at overføre en alternativ resultatværdi til funktionen SELECTEDVALUE. Den alternative resultatværdi returneres, når der enten ikke anvendes nogen filtre – eller flere filtre – på kolonnen.