Ändra filterkontext
Du kan använda CALCULATE
DAX-funktionen för att ändra filterkontexten i dina formler. Syntaxen för funktionen CALCULATE ser ut så här:
CALCULATE(<expression>, [[<filter1>], <filter2>]…)
Funktionen kräver att du skickar ett uttryck som returnerar ett skalärt värde och så många filter som du behöver. Uttrycket kan vara ett mått (som är ett namngivet uttryck) eller ett uttryck som kan utvärderas i filterkontext.
Filter kan vara booleska uttryck eller tabelluttryck. Det går också att skicka in filterändringsfunktioner som ger ytterligare kontroll när du ändrar filterkontexten.
När du har flera filter utvärderas de med hjälp av den AND
logiska operatorn, vilket innebär att alla villkor måste vara TRUE
samtidigt.
Anteckning
CALCULATETABLE
DAX-funktionen utför exakt samma funktioner som CALCULATE
funktionen, förutom att den ändrar filterkontexten som tillämpas på ett uttryck som returnerar ett tabellobjekt. I den här modulen använder förklaringarna och exemplen CALCULATE
funktionen, men tänk på att dessa scenarier också kan gälla för CALCULATETABLE
funktionen.
Tillämpa booleska uttrycksfilter
Ett booleskt uttrycksfilter är ett uttryck som utvärderas till TRUE
eller FALSE
. Booleska filter måste följa följande regler:
- De kan bara referera till en enda kolumn.
- De kan inte referera till ett mått.
- De kan inte använda funktioner som genomsöker eller returnerar en tabell som innehåller aggregeringsfunktioner som
SUM
.
I det här exemplet ska du skapa ett mått. Först ska du ladda ned och öppna filen Adventure Works DW 2020 M06.pbix. Lägg sedan till följande mått i tabellen Försäljning som filtrerar måttet Intäkter med hjälp av ett booleskt uttrycksfilter för röda produkter.
Revenue Red = CALCULATE([Revenue], 'Product'[Color] = "Red")
Lägg till måttet Intäkt Röd till tabellvisualiseringen som finns på Sidan 1 i rapporten.
I det här exemplet filtrerar följande måttfilter måttet Intäkter med flera färger. Observera användningen av operatorn IN
följt av en lista med färgvärden.
Revenue Red or Blue = CALCULATE([Revenue], 'Product'[Color] IN {"Red", "Blue"})
Följande mått filtrerar måttet Intäkter efter dyra produkter. Dyra produkter är de med ett listpris som är större än 1 000 USD.
Revenue Expensive Products = CALCULATE([Revenue], 'Product'[List Price] > 1000)
Använd tabelluttrycksfilter
Ett tabelluttrycksfilter använder ett tabellobjekt som ett filter. Det kan vara en referens till en modelltabell, men det är förmodligen en DAX-funktion som returnerar ett tabellobjekt.
Vanligtvis använder FILTER
du DAX-funktionen för att tillämpa komplexa filtervillkor, inklusive de som inte kan definieras av ett booleskt filteruttryck. Funktionen FILTER
klassificeras som en iteratorfunktion, så du skickar i en tabell eller tabelluttryck och ett uttryck som ska utvärderas för varje rad i tabellen.
Funktionen FILTER
returnerar ett tabellobjekt med exakt samma struktur som det som tabellen skickade in. Dess rader är en delmängd av de rader som skickades in, vilket innebär de rader där uttrycket utvärderades som TRUE
.
I följande exempel visas ett tabellfilteruttryck som använder FILTER
funktionen:
Revenue High Margin Products =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[List Price] > 'Product'[Standard Cost] * 2
)
)
I det här exemplet FILTER
filtrerar funktionen alla rader i tabellen Produkt som finns i filterkontexten. Varje rad för en produkt där dess listpris överskrider standardkostnaden visas som en rad i den filtrerade tabellen. Därför utvärderas måttet Intäkter för alla produkter som returneras av FILTER
funktionen.
Alla filteruttryck som skickas till CALCULATE
funktionen är tabellfilteruttryck. Ett booleskt filteruttryck är en snabbnotering för att förbättra skriv- och läsupplevelsen. Internt översätter Microsoft Power BI booleska filteruttryck till tabellfilteruttryck, det är så den översätter din måttdefinition av Intäkt Röd.
Revenue Red =
CALCULATE(
[Revenue],
FILTER(
'Product',
'Product'[Color] = "Red"
)
)
Filterbeteende
Två möjliga standardresultat inträffar när du lägger till filteruttryck i CALCULATE
funktionen:
- Om kolumnerna (eller tabellerna) inte finns i filterkontexten läggs nya filter till i filterkontexten
CALCULATE
för att utvärdera uttrycket. - Om kolumnerna (eller tabellerna) redan finns i filterkontexten skrivs de befintliga filtren över av de nya filtren för att utvärdera
CALCULATE
uttrycket.
I följande exempel visas hur du lägger till filteruttryck i CALCULATE
funktionen.
Anteckning
I vart och ett av exemplen tillämpas inga filter på tabellens visuella objekt.
Precis som i föregående övning lades måttet Intäkt Röd till i en tabellvisualisering som grupperar efter region och visar intäkter.
Eftersom inget filter tillämpas på kolumnen Färg i tabellen Produkt lägger utvärderingen av måttet till ett nytt filter för att filtrera kontexten. På den första raden är värdet 2 681 324,79 dollar för röda produkter som såldes i regionen Australien.
Om du växlar den första kolumnen i det visuella tabellobjektet från Region till Färg får du ett annat resultat eftersom kolumnen Färg i tabellen Produkt nu är i filterkontext.
Måttformeln Intäkt röd utvärderar måttet Intäkter genom att lägga till ett filter på kolumnen Färg (till röd) i tabellen Produkt . I det här visuella objektet som grupperas efter färg skriver måttformeln över filterkontexten med ett nytt filter.
Det kanske inte är det resultat du vill ha. Nästa enhet introducerar KEEPFILTERS
DAX-funktionen, som är en filterändringsfunktion som du kan använda för att bevara filter i stället för att skriva över dem.