Använd SELECTEDVALUE i stället för VALUES
Som datamodellerare kan du ibland behöva skriva ett DAX uttryck som testar om en kolumn filtreras efter en specifik value.
I earlier versioner av DAXuppnåddes det här kravet på ett säkert sätt med hjälp av ett mönster med tre DAX funktioner. IF, HASONEVALUEandVALUES. Följande measure definition 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 en enda value av kolumnen Country-Region visas i den aktuella filter kontexten. När det är TRUEjämförs funktionen VALUES med den bokstavliga texten "Australien". När funktionen VALUES returnerar TRUEmultipliceras Salesmeasure med 0,10 (representerar 10%). If HASONEVALUE-funktionen returnerar FALSE— eftersom det finns mer än en valueifilters-kolumnen — firstIF-funktionen returnerar BLANK.
Användningen av HASONEVALUE är en defensiv teknik. Det krävs eftersom det är möjligt att flera valuesfilter kolumnen Land-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 en skalär value resulterar det i en error.
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 and elegant.
Med hjälp av funktionen SELECTEDVALUE skrivs exempeldefinitionen measurenow om.
Australian Sales Tax =
IF(
SELECTEDVALUE(Customer[Country-Region]) = "Australia",
[Sales] * 0.10
)
Tips
Det går att skicka ett alternativt resultatvalue till funktionen SELECTEDVALUE. Det alternativa resultatet value returneras när antingen inga filters–or flera filters– tillämpas på kolumnen.
Related innehåll
- Lärande path: Använd DAX i Power BI Desktop
- Frågor? Prova att fråga Power BI-communityt
- Förslag? Bidra med idéer till att förbättra Power BI