Använd SELECTEDVALUE istället för VALUES

Som datamodellerare kan du ibland behöva skriva ett DAX-uttryck som testar om en kolumn är filtrerad efter ett visst värde.

I tidigare versioner av DAX uppnåddes detta krav på ett säkert sätt med hjälp av ett mönster som omfattar tre DAX-funktioner; IF, HASONEVALUE och VALUES. Här är ett exempel på en sådan måttdefinition. Den beräknar momsbeloppet, men bara vid försäljning till kunder i Australien.

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

I det här exemplet returnerar funktionen HASONEVALUE endast TRUE när ett enda värde i kolumnen Country-Region är synligt i den aktuella filterkontexten. När värdet är TRUE jämförs funktionen VALUES med den litterala texten ”Australia”. När funktionen VALUES returnerar TRUE multipliceras måttet Sales med 0,10 (som motsvarar 10 %). Om funktionen HASONEVALUE returnerar FALSE, om fler än ett värde filtrerar kolumnen, returnerar den första IF-funktionen BLANK.

Användningen av HASONEVALUE är en defensiv teknik. Den måste användas eftersom det kan vara så att flera värden filtrerar kolumnen Country-Region. I det här fallet returnerar funktionen VALUES en tabell med flera rader. Om en tabell med flera rader jämförs med en skalär genereras ett fel.

Rekommendation

Vi rekommenderar att du använder funktionen SELECTEDVALUE. Den ger samma resultat som mönstret som beskrivs i den här artikeln, men mer effektivt och elegant.

Måttdefinitionen skrivs nu om med funktionen SELECTEDVALUE.

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

Tips

Du kan skicka ett alternativ resultat till funktionen SELECTEDVALUE. Det alternativa resultatvärdet returneras när inga eller flera filter används för kolumnen.

Se även