Brug SELECTEDVALUE i stedet for VALUES

I din egenskab af dataudformer kan du nogle gange få brug for 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 på en sikker måde ved hjælp af et mønster, der omfatter tre DAX-funktioner. IF, HASONEVALUEog VALUES. Der vises et eksempel i følgende målingsdefinition. Momsbeløbet beregnes, 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 returneres funktionen HASONEVALUE kun TRUE, når en enkelt værdi for kolonnen Country-Region er synlig i den aktuelle filterkontekst. Når det er sandt, sammenlignes funktionen værdier med konstant teksten "Australien". Når funktionen VALUES returnerer TRUE, multipliceres målingen Sales med 0,10 (som 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. Den er påkrævet, fordi flere værdier filtrerer kolonnen Country-Region. I dette tilfælde returnerer funktionen VALUES en tabel med flere rækker. Når du sammenligner en tabel med flere rækker med en skalaværdi, resulterer det i en fejl.

Anbefaling

Det anbefales, at du bruger funktionen SELECTEDVALUE. Det giver det samme resultat som det mønster, der er beskrevet i denne artikel, men endnu 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 i funktionen SELECTEDVALUE. Den alternative resultatværdi returneres, når der enten ikke anvendes nogen filtre – eller når der anvendes flere filtre – på kolonnen.

Se også