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.
Relaterat innehåll
- Utbildningsväg: Använda DAX i Power BI Desktop
- Frågor? Prova att fråga Power BI Community
- Förslag? Bidra med idéer för att förbättra Power BI