Unngå å bruke FILTER som et filter-argument
Som datamodellerer er det vanlig at du skriver DAX uttrykk som må evalueres i en endret filter kontekst. Du kan for eksempel skrive en measure definisjon for å calculate salg for produkter med høy margin. Vi vil beskrive denne beregningen senere i denne artikkelen.
Notat
Denne artikkelen er spesielt relevant for modellberegninger som gjelder filters for importtabeller.
Funksjonene CALCULATEandCALCULATETABLEDAX er viktige and nyttige funksjoner. De lar deg skrive beregninger som fjerner or legge til filters, or endre relasjonsbaner. Det gjøres ved å sende inn filter argumenter, som enten er boolske uttrykk, tabelluttrykk, or spesielle filter funksjoner. Vi diskuterer bare boolske and tabelluttrykk i denne artikkelen.
Vurder følgende measure definisjon, som beregner rødt product salg ved hjelp av et tabelluttrykk. Det vil replace eventuelle filters som kan brukes på Product tabellen.
Red Sales =
CALCULATE(
[Sales],
FILTER('Product', 'Product'[Color] = "Red")
)
Funksjonen CALCULATE godtar et tabelluttrykk som returneres av FILTERDAX-funksjonen, som evaluerer filter uttrykk for hver rad i Product tabellen. Det oppnår riktig resultat – salgsresultatet for røde produkter. Det kan imidlertid oppnås mye mer effektivt ved hjelp av et boolsk uttrykk.
Her er en forbedret measure definisjon, som bruker et boolsk uttrykk i stedet for tabelluttrykket. Funksjonen KEEPFILTERSDAX sikrer at eventuelle eksisterende filters som brukes på kolonnen Farge beholdes, andnot overskrives.
Red Sales =
CALCULATE(
[Sales],
KEEPFILTERS('Product'[Color] = "Red")
)
Det anbefales at du sender filter argumenter som boolske uttrykk når det er mulig. Det er fordi importmodelltabeller er i minnekolonnelagre. De er eksplisitt optimalisert for effektivt å filter kolonner på denne måten.
Det finnes imidlertid begrensninger som gjelder for boolske uttrykk når de brukes som filter argumenter. De:
- Kan ikke referere til kolonner fra flere tabeller
- Kan ikke referere til en measure
- Kan ikke bruke nestede CALCULATE funksjoner
- Kan ikke bruke funksjoner som skanner or returnere en tabell
Det betyr at du må bruke tabelluttrykk for mer komplekse filter krav.
Vurder now en annen measure definisjon. Kravet er å calculate salg, men bare for måneder som har oppnådd en fortjeneste.
Sales for Profitable Months =
CALCULATE(
[Sales],
FILTER(
VALUES('Date'[Month]),
[Profit] > 0
)
)
I dette eksemplet må FILTER-funksjonen brukes. Det er fordi det krever evaluering av Profitmeasure for å eliminere de månedene som ikke oppnådde en fortjeneste. Det er not mulig å bruke en measure i et boolsk uttrykk når det brukes som et filter argument.
Anbefalinger
For best ytelse anbefales det at du bruker boolske uttrykk som filter argumenter når det er mulig.
Derfor bør FILTER-funksjonen bare brukes når det er nødvendig. Du kan bruke den til å utføre filter komplekse kolonnesammenligninger. Disse kolonnesammenligningene kan innebære:
- Tiltak
- Andre kolonner
- Ved hjelp av ORDAX-funksjonen or den logiske operatoren OR (||)
Related innhold
- Filter funksjoner (DAX)
- Lære path: Bruke DAX i Power BI Desktop
- Spørsmål? Prøv å spørre Power BI-fellesskapet
- Forslag? Bidra med ideer for å forbedre Power BI-