Ändra filterkontext

Slutförd

Du kan använda DAX-funktionen CALCULATE 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 är också möjligt att ändra funktioner för filterändringar som ger ytterligare kontroll när du ändrar filterkontext.

När du har flera filter utvärderas de med hjälp av den logiska operatorn AND, vilket innebär att alla villkor måste vara TRUE på samma gång.

Anteckning

DAX-funktionen CALCULATETABLE utför exakt samma funktion som funktionen CALCULATE, 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 funktionen CALCULATE, men kom ihåg att de här scenarierna också kan gälla för funktionen CALCULATETABLE.

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 mått

  • De kan inte använda funktioner som skannar 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 definition som filtrerar måttet Intäkter genom att använda ett booleskt uttryck 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.

En bild visar en tabell med tre kolumner: Region, Intäkt och Intäkt Röd. I tabellen visas 10 rader och en summa.

I det här exemplet filtrerar följande måttfilter måttet Intäkter med flera färger. Observera användningen av IN-operatorn 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 du DAX-funktionen FILTER för att tillämpa komplexa filtervillkor, inklusive sådana som inte kan definieras av ett booleskt filteruttryck. Funktionen FILTER klassificeras som en iteratorfunktion, så du kan skicka en tabell eller ett tabelluttryck och ett uttryck som ska utvärderas för varje rad i tabellen.

Funktionen FILTER returnerar ett tabellobjekt med exakt samma struktur som en tabell som har skickats in. Dess rader är en delmängd av de rader som skickades, vilket innebär de rader där uttrycket utvärderas som TRUE.

I följande exempel visas ett tabellfilteruttryck som använder funktionen FILTER:

Revenue High Margin Products =
CALCULATE(
    [Revenue],
    FILTER(
        'Product',
        'Product'[List Price] > 'Product'[Standard Cost] * 2
    )
)

I det här exemplet filtrerar funktionen FILTER alla rader i produkttabellen 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 funktionen FILTER.

Alla filteruttryck som skickas till funktionen CALCULATE ä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 funktionen CALCULATE:

  • Om kolumnerna (eller tabellerna) inte finns i filterkontexten kommer nya filter att läggas till i filterkontexten för att utvärdera uttrycket CALCULATE.

  • Om kolumnerna (eller tabellerna) redan finns i filterkontexten skrivs befintliga filter över av de nya filtren för att utvärdera uttrycket CALCULATE.

I följande exempel visas hur du lägger till filteruttryck i funktionen CALCULATE.

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.

En bild visar en tabell med tre kolumner: Region, Intäkt och Intäkt Röd. I tabellen visas 10 rader och en summa.

Eftersom inget filter används i kolumnen Färg i produkttabellen lägger utvärderingen av måttet till ett nytt filter i filterkontexten. 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 den visuella tabellen från Region till Färg skapas ett annat resultat eftersom kolumnen Färg i tabellen Produkt nu finns i filterkontext.

En bild visar en tabell med tre kolumner: Färg, Intäkt och Intäkt Röd. I tabellen visas 10 rader och en summa. Värdet för Intäkt Röd är detsamma för varje rad.

Måttformeln Intäkt Röd utvärderar måttet Intäkter mått genom att lägga till ett filter i kolumnen Färg (till Röd) i produkttabellen. 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 del presenterar DAX-funktionen KEEPFILTERS, som är en funktion för filterändring som du kan använda för att bevara filter i stället för att skriva över dem.