Använda filtermodifieringsfunktioner

Slutförd

När du använder CALCULATE funktionen kan du skicka in filterändringsfunktioner, vilket gör att du kan utföra mer än att lägga till enbart filter.

Ta bort filter

REMOVEFILTERS Använd DAX-funktionen 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 har du tagit bort filter med hjälp ALL av DAX-funktionen eller varianter, inklusive ALLEXCEPT funktionerna och ALLNOBLANKROW DAX. 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 lägger du till ett nytt mått i tabellen Försäljning som utvärderar måttet Intäkter men gör det genom att ta bort filter från tabellen Sales Territory . 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.

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åttnamnet och deklarerar två variabler. 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.

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 Sales Territory i fönstret Fält.

Använd följande kolumnfilter:

  • Grupp – Nordamerika
  • Land – USA
  • 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.

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 subtil ändring som görs i måttformeln Intäkt % total region : Funktionen REMOVEFILTERS tar nu bort filter från kolumnen Region i stället för alla kolumner i tabellen Sales Territory .

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 % totalt land i tabellen Försäljning och formatera det sedan som en procentandel med två decimaler. Lägg till det nya måttet i matrisvisualiseringen.

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å värdet för land/region upprepas som regionnamn. 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
    )

När du tar bort filter från kolumnerna Region och Land i tabellen Sales Territory beräknar måttet regionens intäkter som ett förhållande mellan gruppens intäkter.

Bevara filter

Du kan använda KEEPFILTERS DAX-funktionen som ett filteruttryck i CALCULATE funktionen 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 Revenue Red så att funktionen KEEPFILTERS används.

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

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. Färgen svart och röd färg är korsade, och eftersom båda inte kan vara TRUE samtidigt filtreras uttrycket utan produktrader. Det är bara möjligt att båda de röda filtren kan vara TRUE på samma gång, vilket förklarar varför värdet Revenue Red visas.

Använda inaktiva relationer

En inaktiv modellrelation kan bara sprida filter när USERELATIONSHIP DAX-funktionen skickas som ett filteruttryck till CALCULATE funktionen. 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 relationsbeteende när ett uttryck utvärderas genom att skicka CROSSFILTER DAX-funktionen som ett filteruttryck till CALCULATE funktionen. Det är en avancerad funktion.

Funktionen CROSSFILTER kan ändra filterriktningar (från både till enstaka eller från enstaka till båda) och till och med inaktivera en relation.