Bruk filterendringsfunksjoner
Når du bruker CALCULATE
funksjonen, kan du sende inn filtermodifikasjonsfunksjoner, som lar deg oppnå mer enn å legge til filtre alene.
Fjern filtre
Bruk DAX-funksjonen REMOVEFILTERS
som et CALCULATE
filteruttrykk for å fjerne filtre fra filterkontekst. Den kan fjerne filtre fra én eller flere kolonner, eller fra alle kolonner i én enkelt tabell.
Obs!
Funksjonen REMOVEFILTERS
er relativt ny. I tidligere versjoner av DAX fjernet du filtre ved hjelp ALL
av DAX-funksjonen eller varianter, inkludert ALLEXCEPT
ALLNOBLANKROW
DAX-funksjonene. Disse funksjonene fungerer både som filtermodifikatorer og som funksjoner som returnerer tabellobjekter med distinkte verdier. Disse funksjonene nevnes nå fordi du sannsynligvis vil finne eksempler på dokumentasjon og formler som fjerner filtre ved å bruke dem.
I eksemplet nedenfor legger du til et nytt mål i Salg-tabellen som evaluerer omsetningsmålet , men som gjør det ved å fjerne filtre fra tabellen Salgsdistrikt . Formater målet som valuta med to desimalplasser.
Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))
Legg nå til målet Total omsetning for område til matrisevisualobjektet som du finner på Side 2 i rapporten. Matrisevisualobjektet grupperer seg etter tre kolonner fra tabellen Salgsdistrikt på radene: Gruppe, Land og Område.
Legg merke til at hver Total omsetning for område-verdi er den samme. Det er verdien av den totale omsetningen.
Selv om dette resultatet ikke er til hjelp, regner det ut en prosentandel av totalsummen når det brukes som en nevner i et forhold. Derfor skal du nå overskrive måldefinisjonen for Total omsetning for område med følgende definisjon. (Denne nye definisjonen endrer målnavnet og deklarerer to variabler. Pass på at du formaterer målet som en prosentdel med to desimaler.)
Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory')
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalRegionRevenue
)
Sjekk at matrisevisualobjektet nå viser verdiene for Total omsetning i % for område.
Du skal nå opprette et annet mål, men denne gangen skal du regne ut forholdet mellom omsetning for et område delt på landets omsetning.
Før du full fører denne oppgaven, ber vi deg legge merke til at verdien for Total omsetning i % for område for sørvest-området er 22,95 prosent. Undersøk filterkonteksten for denne cellen. Bytt til datavisning, og velg deretter Salgsdistrikt-tabellen i Felt-ruten.
Bruk følgende kolonnefiltre:
- Gruppe – Nord-Amerika
- Land – USA
- Område – Sørvest
Legg merke til at filtrene reduserer antall rader i tabellen til én. Mens du nå tenker over det nye målet ditt om å opprette et forhold mellom områdets omsetning og landets omsetning, fjerner du filteret fra Område-kolonnen.
Legg merke til at det nå finnes fem rader. Hver rad tilhører landet USA. Når du fjerner kolonnefiltrene for Område, samtidig som du beholder filtrene på kolonnene Land og Gruppe, får du en ny filterkontekst for områdets land.
Legg merke til hvordan du kan slette eller fjerne et filter fra en kolonne i måldefinisjonen nedenfor. I DAX-logikk er det en liten og diskré endring som er gjort i målformelen omsetning i % for område: Funksjonen REMOVEFILTERS
fjerner nå filtre fra Område-kolonnen i stedet for alle kolonnene i Salgsterritorium-tabellen .
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
Legg til målet Omsetning i % totalt land i Salg-tabellen , og formater det deretter som en prosentdel med to desimaler. Legg til det nye målet i matrisevisualobjektet.
Legg merke til at alle verdiene, bortsett fra verdiene for områder i USA, er 100 prosent. Årsaken er at selskapet Adventure Works opererer med områder i USA, men ikke i alle andre land.
Obs!
Tabulære modeller støtter ikke ujevne hierarkier, altså hierarkier med variable dybder. Derfor er det, under utformingen, vanlig å gjenta overordnede verdier på lavere nivåer i hierarkiet. Australia har for eksempel ikke et område, så verdien for land/område gjentas som områdenavn. Det er alltid bedre å lagre en meningsfylt verdi heller enn en BLANK.
Det neste eksemplet er det siste målet du skal opprette. Legg til målet Total omsetning i % for gruppe, og formater det deretter som en prosentandel med to desimalplasser. Legg deretter til det nye målet i matrisevisualobjektet.
Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS(
'Sales Territory'[Region],
'Sales Territory'[Country]
)
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalGroupRevenue
)
Når du fjerner filtre fra kolonnene Område og Land i tabellen Salgsdistrikt , beregner målet områdeinntektene som et forhold mellom gruppens omsetning.
Behold filtre
Du kan bruke KEEPFILTERS
DAX-funksjonen som et filteruttrykk i CALCULATE
funksjonen for å bevare filtre.
Se hvordan du gjennomfører denne oppgaven ved å bytte til Side 1 i rapporten. Deretter endrer du måldefinisjonen omsetningsrød for å bruke KEEPFILTERS
funksjonen.
Revenue Red =
CALCULATE(
[Revenue],
KEEPFILTERS('Product'[Color] = "Red")
)
Legg merke til at bare den ene Omsetning i rødt-verdien er å se i tabellvisualobjektet. Årsaken er at det boolske filteruttrykket bevarer eksisterende filtre i Farge-kolonnen i Produkt-tabellen . Grunnen til at andre farger (som ikke er røde) er BLANK, er fordi filterkontekstene og filteruttrykkene er kombinert for disse to filtrene. Fargen svart og fargen rød er krysset, og fordi begge ikke kan være TRUE
samtidig, filtreres uttrykket uten produktrader. Det er bare mulig at begge de røde filtrene kan være TRUE
samtidig, noe som forklarer hvorfor den ene omsetningsrøde verdien vises.
Bruk inaktive relasjoner
En inaktiv modellrelasjon kan bare overføre filtre når USERELATIONSHIP
DAX-funksjonen sendes som et filteruttrykk til CALCULATE
funksjonen. Når du bruker denne funksjonen til å engasjere en inaktiv relasjon, blir den aktive relasjonen automatisk inaktiv.
Gå gjennom et eksempel på en måldefinisjon som bruker en inaktiv relasjon til å beregne Omsetning-målet etter forsendelsesdatoer:
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
Endre relasjonsfunksjonalitet
Du kan endre virkemåten for modellrelasjonen når et uttrykk evalueres ved å sende CROSSFILTER
DAX-funksjonen som et filteruttrykk til CALCULATE
funksjonen. Dette er en avansert funksjonalitet.
Funksjonen CROSSFILTER
kan endre filterretninger (fra både til én eller fra enkelt til begge) og til og med deaktivere en relasjon.