Bruk SELECTEDVALUE i stedet for VERDIER

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

I tidligere versjoner av DAX ble dette kravet trygt oppnådd ved hjelp av et mønster som involverer tre DAX-funksjoner. HVIS, 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 SANN bare når en enkeltverdi i kolonnen Land-område er synlig i gjeldende filterkontekst. Når det er SANN, sammenlignes VALUES-funksjonen med den litterale teksten Australia. Når VALUES-funksjonen returnerer SANN, multipliseres salgsmålet med 0,10 (som representerer 10 %). Hvis HASONEVALUE-funksjonen returnerer USANN, fordi mer enn én verdi filtrerer kolonnen, returnerer den første HVIS-funksjonen BLANK.

Bruken av HASONEVALUE er en defensiv teknikk. Det kreves fordi det er mulig at flere verdier filtrerer kolonnen Land-områ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.

Anbefalinger

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 en alternativ resultatverdi til SELECTEDVALUE-funksjonen. Den alternative resultatverdien returneres når enten ingen filtre eller flere filtre brukes på kolonnen.