Denne delen beskriver hvordan du oppretter filtre i DAX-formler (Data Analysis Expressions). Du kan opprette filtre i formler for å begrense verdiene fra kildedataene som brukes i beregninger. Du gjør dette ved å angi en tabell som inndata i formelen, og deretter definere et filteruttrykk. Filteruttrykket du angir, brukes til å spørre etter dataene og returnere bare et delsett av kildedataene. Filteret brukes dynamisk hver gang du oppdaterer resultatene av formelen, avhengig av gjeldende kontekst for dataene.
I denne artikkelen
Opprette et filter på en tabell som brukes i en formel
Du kan bruke filtre i formler som tar en tabell som inndata. I stedet for å skrive inn et tabellnavn, bruker du FILTER-funksjonen til å definere et delsett med rader fra den angitte tabellen. Delsettet sendes deretter til en annen funksjon, for operasjoner som egendefinerte aggregasjoner.
Anta for eksempel at du har en tabell med data som inneholder ordreinformasjon om forhandlere, og du vil beregne hvor mye hver forhandler solgte. Du vil imidlertid vise salgsbeløpet bare for forhandlere som solgte flere enheter av produktene med høyere verdi. Følgende formel, basert på DAX-eksempelarbeidsboken, viser ett eksempel på hvordan du kan opprette denne beregningen ved hjelp av et filter:
=SUMMERX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 5 && 'ResellerSales_USD'[ProductStandardCost_USD] > 100), 'ResellerSales_USD'[SalesAmt] )-
Den første delen av formelen angir én av de Power Pivot aggregasjonsfunksjonene, som tar en tabell som et argument. SUMX beregner en sum over en tabell.
-
Den andre delen av formelen, FILTER(table, expression),forteller SUMX hvilke data som skal brukes. SUMX krever en tabell eller et uttrykk som resulterer i en tabell. Her, i stedet for å bruke alle dataene i en tabell, bruker du FILTER -funksjonen til å angi hvilke av radene fra tabellen som skal brukes.
Filteruttrykket har to deler: den første delen navngir tabellen som filteret gjelder for. Den andre delen definerer et uttrykk som skal brukes som filterbetingelsen. I dette tilfellet filtrerer du på forhandlere som solgte mer enn 5 enheter og produkter som koster mer enn USD 100. Operatoren, &&, er en logisk AND-operator, som angir at begge delene av betingelsen må være sanne for at raden skal tilhøre det filtrerte delsettet.
-
Den tredje delen av formelen forteller SUMX funksjonen hvilke verdier som skal summeres. I dette tilfellet bruker du bare salgsbeløpet.
Vær oppmerksom på at funksjoner som FILTER, som returnerer en tabell, aldri returnerer tabellen eller radene direkte, men alltid bygges inn i en annen funksjon. Hvis du vil ha mer informasjon om FILTER og andre funksjoner som brukes til filtrering, inkludert flere eksempler, kan du se Filterfunksjoner (DAX).
Obs!: Filteruttrykket påvirkes av konteksten den brukes i. Hvis du for eksempel bruker et filter i et mål, og målet brukes i en pivottabell eller et pivotdiagram, kan delsettet med data som returneres, bli påvirket av flere filtre eller slicere som brukeren har brukt i pivottabellen. Hvis du vil ha mer informasjon om kontekst, kan du se Kontekst i DAX-formler.
Filtre som fjerner duplikater
I tillegg til å filtrere etter bestemte verdier, kan du returnere et unikt sett med verdier fra en annen tabell eller kolonne. Dette kan være nyttig når du vil telle antall unike verdier i en kolonne, eller bruke en liste over unike verdier for andre operasjoner. DAX inneholder to funksjoner for å returnere distinkte verdier: DISTINCT-funksjonen og VALUES-funksjonen.
-
DISTINCT-funksjonen undersøker én enkelt kolonne som du angir som et argument for funksjonen, og returnerer en ny kolonne som bare inneholder de distinkte verdiene.
-
VALUES-funksjonen returnerer også en liste med unike verdier, men returnerer også det ukjente medlemmet. Dette er nyttig når du bruker verdier fra to tabeller som er sammenføyd av en relasjon, og en verdi mangler i én tabell og finnes i den andre. Hvis du vil ha mer informasjon om det ukjente medlemmet, kan du se Kontekst i DAX-formler.
Begge disse funksjonene returnerer en hel kolonne med verdier. Derfor bruker du funksjonene til å hente en liste over verdier som deretter sendes til en annen funksjon. Du kan for eksempel bruke følgende formel til å få en liste over de distinkte produktene som selges av en bestemt forhandler, ved hjelp av den unike produktnøkkelen, og deretter telle produktene i listen ved hjelp av COUNTROWS-funksjonen:
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
Hvordan kontekst påvirker filtre
Når du legger til en DAX-formel i en pivottabell eller et pivotdiagram, kan resultatene av formelen påvirkes av konteksten. Hvis du arbeider i en Power Pivot tabell, er konteksten gjeldende rad og dens verdier. Hvis du arbeider i en pivottabell eller et pivotdiagram, betyr konteksten settet eller delsettet med data som er definert av operasjoner som oppdeling eller filtrering. Utformingen av pivottabellen eller pivotdiagrammet har også en egen kontekst. Hvis du for eksempel oppretter en pivottabell som grupperer salg etter område og år, vises bare dataene som gjelder for disse områdene og årene i pivottabellen. Derfor beregnes alle mål du legger til i pivottabellen i konteksten til kolonne- og radoverskriftene, pluss eventuelle filtre i målformelen.
Hvis du vil ha mer informasjon, kan du se Kontekst i DAX-formler.
Fjerner filtre
Når du arbeider med komplekse formler, vil du kanskje vite nøyaktig hva de gjeldende filtrene er, eller du vil kanskje endre filterdelen av formelen. DAX inneholder flere funksjoner som gjør det mulig å fjerne filtre og kontrollere hvilke kolonner som beholdes som en del av gjeldende filterkontekst. Denne delen gir en oversikt over hvordan disse funksjonene påvirker resultatene i en formel.
Overstyrer alle filtre med ALL-funksjonen
Du kan bruke ALL -funksjonen til å overstyre eventuelle filtre som tidligere ble brukt, og returnere alle radene i tabellen til funksjonen som utfører aggregatet eller en annen operasjon. Hvis du bruker én eller flere kolonner, i stedet for en tabell, som argumenter for å ALL, returnerer ALL -funksjonen alle rader, og ignorerer eventuelle kontekstfiltre.
Obs!: Hvis du er kjent med relasjonsdatabaseterminologi, kan du tenke på ALL som å generere den naturlige venstre ytre sammenføyningen av alle tabellene.
Anta for eksempel at du har tabellene, Salg og Produkter, og at du vil opprette en formel som beregner salgssummen for det gjeldende produktet delt på salgene for alle produkter. Du må ta hensyn til at hvis formelen brukes i et mål, kan det hende at brukeren av pivottabellen bruker en slicer til å filtrere etter et bestemt produkt, med produktnavnet på radene. Hvis du vil hente den sanne verdien til nevneren uavhengig av filtre eller slicere, må du derfor legge til ALL-funksjonen for å overstyre eventuelle filtre. Følgende formel er ett eksempel på hvordan du bruker ALL til å overstyre effektene av tidligere filtre:
=SUMMER (Salg[Beløp])/SUMX(Salg[Beløp], FILTER(Salg, ALLE(Produkter)))
-
Den første delen av formelen, SUMMER (Salg[Beløp]), beregner telleren.
-
Summen tar hensyn til gjeldende kontekst, noe som betyr at hvis du legger til formelen i en beregnet kolonne, brukes radkonteksten, og hvis du legger til formelen i en pivottabell som et mål, brukes eventuelle filtre som brukes i pivottabellen (filterkonteksten).
-
Den andre delen av formelen beregner nevneren. ALL-funksjonen overstyrer alle filtre som kan brukes på den Products tabellen.
Hvis du vil ha mer informasjon, inkludert detaljerte eksempler, kan du se ALL-funksjonen.
Overstyrer bestemte filtre med ALLEXCEPT-funksjonen
ALLEXCEPT-funksjonen overstyrer også eksisterende filtre, men du kan angi at noen av de eksisterende filtrene skal bevares. Kolonnene du navngir som argumenter til ALLEXCEPT-funksjonen, angir hvilke kolonner som fortsatt skal filtreres. Hvis du vil overstyre filtre fra de fleste kolonner, men ikke alle, er ALLEXCEPT mer praktisk enn ALLE. ALLEXCEPT-funksjonen er spesielt nyttig når du oppretter pivottabeller som kan filtreres på mange forskjellige kolonner, og du vil kontrollere verdiene som brukes i formelen. Hvis du vil ha mer informasjon, inkludert et detaljert eksempel på hvordan du bruker ALLEXCEPT i en pivottabell, kan du se ALLEXCEPT-funksjonen.