Dela via


Använd SELECTEDVALUE istället för VALUES

Som datamodellerare kan du ibland behöva skriva ett DAX-uttryck som testar om en kolumn filtreras 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 med tre DAX-funktioner. IF, HASONEVALUE och VALUES. Följande måttdefinition visar ett exempel. Den beräknar momsbeloppet, men endast för försäljning till australiensiska kunder.

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

I exemplet returnerar funktionen HASONEVALUE ENDAST TRUE när ett enda värde i kolumnen Country-Region visas i den aktuella filterkontexten. När det är SANT jämförs funktionen VALUES med literaltexten "Australia". När funktionen VALUES returnerar TRUE multipliceras måttet Försäljning med 0,10 (representerar 10 %). Om funktionen HASONEVALUE returnerar FALSE – eftersom mer än ett värde filtrerar kolumnen – returnerar den första IF-funktionen BLANK.

Användningen av HASONEVALUE är en defensiv teknik. Det krävs eftersom det är möjligt att flera värden filtrerar kolumnen Country-Region . I det här fallet returnerar funktionen VALUES en tabell med flera rader. Om du jämför en tabell med flera rader med ett skalärt värde resulterar det i ett fel.

Rekommendation

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

Med funktionen SELECTEDVALUE skrivs exempelmåttdefinitionen nu om.

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

Dricks

Det går att skicka ett alternativt resultatvärde till funktionen SELECTEDVALUE. Det alternativa resultatvärdet returneras när antingen inga filter eller flera filter tillämpas på kolumnen.