Använda filtermodifieringsfunktioner

Slutförd

När du använder funktionen CALCULATE kan du skicka in filtermodifieringsfunktioner, vilket gör att du kan åstadkomma mer än att bara lägga till filter.

Ta bort filter

Använd DAX-funktionen REMOVEFILTERS som ett CALCULATE-filteruttryck för att ta bort filter från filterkontexten. Det kan ta bort filter från en eller flera kolumner eller från alla kolumner i en enskild tabell.

Anteckning

Funktionen REMOVEFILTERS är relativt ny. I tidigare versioner av DAX tog du bort filter med hjälp av DAX-funktionen ALL eller varianter såsom DAX-funktionerna ALLEXCEPT och ALLNOBLANKROW. Dessa funktioner fungerar som både filtermodifierare och som funktioner som returnerar tabellobjekt för distinkta värden. Dessa funktioner nämns nu eftersom du sannolikt kommer att hitta dokumentation och formelexempel som tar bort filter genom att använda dem.

I följande exempel kommer du att skapa ett nytt mått som utvärderar måttet Intäkter, men gör det genom att ta bort filter från tabellen Försäljningsområde. Formatera måttet som valuta med två decimaler.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

Lägg nu till måttet Intäkt för hel region till matrisvisualiseringen som finns på Sida 2 i rapporten. Matrisvisualiseringen grupperas i tre kolumner från tabellen Försäljningsområde på raderna: Grupp, Land och Region.

En bild visar en matris med rubriken Återförsäljares intäkter har Grupp, Land och Region grupperade på raderna, och sammanfattningarna Intäkt och Intäkt för hel region. Värdet för Intäkt för hel region är detsamma för varje radgrupp.

Observera att varje värde för Intäkt för hel region är detsamma. Det är värdet för den totala intäkten.

Även om det här resultatet inte är användbart i sig, beräknar det procentandelen av totalsumman när det används som nämnare i en division. Därför kommer du nu att skriva över måttdefinitionen Intäkt för hel regionintäkt med följande definition. (Den här nya definitionen ändrar måttets namn. Se till att formatera måttet som en procentandel med två decimaler.)

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

Kontrollera att matrisen nu visar värdena för Intäkter % för hel region.

En bild visar en matrisvisualisering med rubriken Återförsäljares intäkter har Grupp, Land och Region grupperade på raderna, och sammanfattningarna Intäkt och Intäkt % för hel region.

Nu ska du skapa ett annat mått, men den här gången ska du beräkna förhållandet mellan intäkterna för en region, dividerat med landets intäkter.

Innan du slutför den här uppgiften ska du observera att värdet för Intäkt % för hel region för regionen Southwest är 22,95 procent. Sök efter denna cell i filterkontexten. Växla till datavyn och välj sedan tabellen Säljområde i rutan Fält.

Använd följande kolumnfilter:

  • Grupp – Nordamerika
  • Land – USA
  • Region – Southwest

En bild visar Power BI Desktop-tabellfiltren för tabellen Försäljningsområde. Filter tillämpas på (1) Grupp = Nordamerika, (2) Land = USA och (3) Region = Southwest.

Observera att filtren minskar tabellen till endast en rad. Nu när du funderar på ditt nya mål för att skapa en kvot av regionens intäkter jämfört med företagets intäkter, rensar du filtret från kolumnen Region.

En bild visar kolumnens snabbmeny och kommandot Rensa filter är markerat.

Observera att det nu finns fem rader, där varje rad tillhör landet USA. När du rensar kolumnfiltren Region och behåller filtren i kolumnerna Land och Grupp kommer du att ha en ny filterkontext som är för regionens land.

I följande måttdefinition ser du hur du kan rensa eller ta bort ett filter från en kolumn. I DAX-logik är det en liten och diskret ändring som görs i formeln för måttet Intäkt % för hel region: Funktionen REMOVEFILTERS tar nu bort filter från kolumnen Region i stället för alla kolumner i tabellen Försäljningsområde.

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

Lägg till måttet Intäkt % för helt land och formatera det som en procentandel med två decimaler. Lägg till det nya måttet i matrisvisualiseringen.

En bild visar en matrisvisualisering med rubriken Återförsäljares intäkter har Grupp, Land och Region grupperade på raderna, och sammanfattningarna Intäkt, Intäkt % för hel region och Intäkt % för helt land. Endast värdena för Intäkt% för helt land för USA är inte 100 %.

Observera att alla värden, förutom de värdena för USA-regioner, är 100 procent. Orsaken är att på företaget Adventure Works har USA olika regioner, medan alla andra länder inte har det.

Anteckning

Tabellmodeller stöder inte ojämna hierarkier, som är hierarkier med varierande djup. Därför är det en vanlig designmetod att upprepa direkt överordnade (eller andra överordnade) värden på lägre nivåer i hierarkin. Australien har till exempel ingen region, så landets värde upprepas som regionens namn. Det är alltid bättre att lagra ett meningsfullt värde i stället för BLANK.

Nästa exempel är sista måttet som du ska skapa. Lägg till måttet Intäkt % för hel grupp och formatera det som en procentandel med två decimaler. Lägg sedan till det nya måttet i matrisvisualiseringen.

Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS(
            'Sales Territory'[Region],
            'Sales Territory'[Country]
        )
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalGroupRevenue
    )

En bild visar en matrisvisualisering med rubriken Återförsäljares intäkter har Grupp, Land och Region grupperade på raderna, och sammanfattningarna Intäkt, Intäkt % för hel region, Intäkt % för helt land och Intäkt % för hel grupp.

När du tar bort filter från kolumnerna Region och Land i tabellen Försäljningsområde beräknar måttet regionens intäkter i förhållande till dess grupps intäkter.

Bevara filter

Du kan använda DAX-funktionen KEEPFILTERS som ett filteruttryck i funktionen CALCULATE för att bevara filter.

Om du vill se hur du utför den här uppgiften växlar du till Sida 1 i rapporten. Ändra sedan måttdefinitionen Intäkt Röd för att använda funktionen KEEPFILTERS.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

En bild visar ett visuellt tabellobjekt med tre kolumner: Färg, Intäkt och Intäkt Röd. Nio rader och en summa visas. För Intäkt Röd är det bara den röda raden och totalsumman som inte returnerar BLANK.

Observera att det bara finns ett värde för Intäkt Röd i det visuella tabellobjektet. Orsaken är att det booleska filteruttrycket bevarar befintliga filter i kolumnen Färg i tabellen Produkt. Anledningen till varför andra färger än röd returnerar BLANK är att filterkontexterna och filteruttrycken kombineras för dessa två filter. Svart färg och röd färg är överlappande och eftersom båda inte kan vara TRUE samtidigt filtreras uttrycket av inga produktrader. Det är bara möjligt att båda de röda filtren kan vara TRUE samtidigt, vilket förklarar varför värdet för Intäkt Röd visas.

Använda inaktiva relationer

En inaktiv modellrelation kan bara sprida filter när DAX-funktionen USERELATIONSHIP skickas som ett filteruttryck till funktionen CALCULATE. När du använder den här funktionen för att engagera en inaktiv relation blir den aktiva relationen automatiskt inaktiv.

Titta på ett exempel på en måttdefinition som använder en inaktiv relation för att beräkna måttet Intäkt efter transportdatum:

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

Ändra relationsbeteende

Du kan ändra modellens relationsbeteendet när ett uttryck utvärderas genom att skicka DAX-funktionen CROSSFILTER som ett filteruttryck till funktionen CALCULATE. Det är en avancerad funktion.

Funktionen CROSSFILTER kan ändra filterriktningarna (från båda till den ena eller från den ena till båda) och även inaktivera en relation.