Ändra filterkontext

Slutförd

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.

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 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.

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 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.

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 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.