Del via


Bruk SELECTEDVALUE i stedet for VALUES

Som datamodellerer må du noen ganger skrive et DAX uttrykk som tester om en kolonne filtreres etter en bestemt verdi.

I tidligere versjoner av DAXble dette kravet trygt oppnådd ved hjelp av et mønster som involverer tre DAX funksjoner. IF, HASONEVALUE og VALUES. Følgende måldefinisjon presenterer et eksempel. Den beregner mva-beløpet, men bare 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 HASONEVALUE-funksjonen TRUE bare når én enkelt verdi i kolonnen landområde er synlig i gjeldende filterkontekst. Når den er TRUE, sammenlignes VALUES-funksjonen med den litterale teksten Australia. Når VALUES-funksjonen returnerer TRUE, multipliseres målet Salg med 0,10 (representerer 10%). Hvis HASONEVALUE-funksjonen returnerer FALSE– fordi mer enn én verdi filtrerer kolonnen – returnerer den første IF-funksjonen BLANK.

Bruken av HASONEVALUE er en defensiv teknikk. Det kreves fordi det er mulig at flere verdier filtrerer kolonnen landområde. I dette tilfellet returnerer VALUES-funksjonen en tabell med flere rader. Sammenligning av en tabell med flere rader med en skalarverdi resulterer i en feil.

Anbefaling

Det anbefales at du bruker SELECTEDVALUE-funksjonen. Det oppnår samme resultat som mønsteret som er beskrevet i denne artikkelen, men mer effektivt og elegant.

Ved hjelp av SELECTEDVALUE-funksjonen skrives måldefinisjonen for eksempel nå på nytt.

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

Tips

Det er mulig å sende et alternativt resultat verdi til SELECTEDVALUE-funksjonen. Den alternative resultatverdien returneres når enten ingen filtre eller flere filtre brukes på kolonnen.