Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
gjelder:
beregnet kolonne
beregnet tabell
måle
visualobjektberegning
Evaluerer et uttrykk i en endret filterkontekst.
Notat
Det finnes også CALCULATETABLE-funksjonen. Den utfører nøyaktig samme funksjonalitet, bortsett fra at den endrer filterkonteksten brukt på et uttrykk som returnerer et tabellobjekt.
Syntaks
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parametere
| Vilkår | Definisjon |
|---|---|
expression |
Uttrykket som skal evalueres. |
filter1, filter2,… |
(Valgfritt) Boolske uttrykk eller tabelluttrykk som definerer filtre, eller filtermodifikatorfunksjoner. |
Uttrykket du bruker som den første parameteren, fungerer som et mål.
Filtre kan være:
- Boolske filteruttrykk
- Tabellfilteruttrykk
- Filtermodifikasjonsfunksjoner
Når du bruker flere filtre, kan du evaluere dem ved hjelp av den AND (&&) logiske operatoren, noe som betyr at alle betingelser må være TRUE, eller av den OR (||) logiske operatoren, noe som betyr at begge betingelsene kan være sanne. Hvis du vil ha mer informasjon, kan du se DAX operatorene > logiske operatorer.
Boolske filteruttrykk
Et boolsk uttrykksfilter er et uttrykk som evalueres til TRUE eller FALSE. Den må følge flere regler:
Den kan referere til kolonner fra én enkelt tabell.
Den kan ikke referere til mål.
Den kan ikke bruke en nestet CALCULATE funksjon.
Den kan ikke bruke funksjoner som skanner eller returnerer en tabell med mindre du sender dem som argumenter til aggregasjonsfunksjoner.
Den kan inneholde en aggregasjonsfunksjon som returnerer en skalarverdi. Eksempel:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Tabellfilteruttrykk
Et tabelluttrykksfilter bruker et tabellobjekt som et filter. Det kan være en referanse til en modelltabell, men mer sannsynlig er det en funksjon som returnerer et tabellobjekt. Du kan bruke FILTER funksjonen til å bruke komplekse filterbetingelser, inkludert de du ikke kan definere av et boolsk filteruttrykk.
Funksjoner for filtermoderator
Filtrer endringsfunksjoner lar deg gjøre mer enn bare å legge til filtre. De gir deg ekstra kontroll når du endrer filterkontekst.
| Funksjon | Hensikt |
|---|---|
| REMOVEFILTERS | Fjern alle filtre eller filtre fra én eller flere kolonner i en tabell, eller fra alle kolonnene i én enkelt tabell. |
| ALL 1, ALLEXCEPT, ALLNOBLANKROW | Fjern filtre fra én eller flere kolonner, eller fra alle kolonnene i én enkelt tabell. |
| KEEPFILTERS | Legg til filter uten å fjerne eksisterende filtre i de samme kolonnene. |
| USERELATIONSHIP | Engasjer en inaktiv relasjon mellom relaterte kolonner, og i så fall blir den aktive relasjonen automatisk inaktiv. |
| CROSSFILTER | Endre filterretning (fra både til enkel eller fra enkel til begge) eller deaktiver en relasjon. |
1 Funksjonen ALL og variantene fungerer som både filtermodifiserte og som funksjoner som returnerer tabellobjekter. Hvis verktøyet støtter REMOVEFILTERS funksjonen, kan du bruke den til å fjerne filtre.
Returverdi
Verdien som kommer fra uttrykket.
Merknader
Når du angir filteruttrykk, CALCULATE endrer funksjonen filterkonteksten for å evaluere uttrykket. For hvert filteruttrykk finnes det to standardresultater når filteruttrykket ikke er pakket inn i KEEPFILTERS funksjonen:
- Hvis kolonnene eller tabellene ikke er i filterkonteksten, legges nye filtre til filterkonteksten for å evaluere uttrykket.
- Hvis kolonnene eller tabellene allerede er i filterkonteksten, overskrives de eksisterende filtrene av de nye filtrene for å evaluere CALCULATE uttrykket.
Bruk av CALCULATE funksjonen uten filtre oppnår et bestemt krav. Den overfører radkontekst til filterkontekst. Denne overgangen kreves når et uttrykk (ikke et modellmål) som oppsummerer modelldata, må evalueres i radkontekst. Dette scenarioet kan skje i en beregnet kolonneformel eller når et uttrykk i en gjentakelsesfunksjon evalueres. Når du bruker et modellmål i radkontekst, er kontekstovergang automatisk.
-
Denne funksjonen støttes ikke for bruk i DirectQuery-modus når den brukes i beregnede kolonner eller regler for sikkerhet på radnivå (RLS).
Eksempler
Eksempler i denne artikkelen kan brukes med eksempelmodellen Adventure Works DW 2020 Power BI Desktop. Hvis du vil ha modellen, kan du se DAX eksempelmodell.
Følgende Måldefinisjon for salg tabell gir et inntektsresultat, men bare for produkter som har fargen blå.
Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
| Kategori | Salgsbeløp | Blå omsetning |
|---|---|---|
| Tilbehør | KR 1 272 057,89 | KR 165 406,62 |
| Sykler | KR 94 620 526,21 | KR 8 374 313,88 |
| Klær | KR 2 117 613,45 | kr 2 59 488,37 |
| Komponenter | KR 11 799 076,66 | KR 803 642,10 |
| totalt | $109,809,274.20 | $9,602,850.97 |
Funksjonen CALCULATE evaluerer summen av tabellen SalgSalgsbeløp i en endret filterkontekst. Et nytt filter legges til i tabellen ProduktFarge , eller overskriver filteret alle filtre som allerede er brukt i kolonnen.
Følgende Måldefinisjon for salg tabell gir et forhold mellom salg og salg for alle salgskanaler.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| Kanal | Salgsbeløp | Omsetning % totalkanal |
|---|---|---|
| Internett | KR 29 358 677,22 | 26.74% |
| Forhandler | KR 80 450 596,98 | 73,26% |
| totalt | $109,809,274.20 | 100,00% |
Funksjonen DIVIDE deler et uttrykk som summerer Sales-tabellen kolonneverdien (i filterkonteksten) med samme uttrykk i en endret filterkontekst. Det er CALCULATE-funksjonen som endrer filterkonteksten ved hjelp av REMOVEFILTERS-funksjonen, som er en filterendringsfunksjon. Den fjerner filtre fra tabellen salgsordrekanal.
Følgende Beregnet kolonnedefinisjon for Kunde tabell klassifiserer kunder i en lojalitetsklasse. Det er et veldig enkelt scenario: Når omsetningen som produseres av kunden er mindre enn USD 2500, klassifiseres de som Lav; Ellers er de High.
Customer Segment =
IF (
CALCULATE (
SUM ( Sales[Sales Amount] ),
ALLEXCEPT ( Customer, Customer[CustomerKey] )
) < 2500,
"Low",
"High"
)
| Kundesegment | Kundeantall | Salgsbeløp |
|---|---|---|
| Høy | 4,637 | KR 102 670 663,09 |
| Lav | 13,848 | KR 7 138 611,11 |
| totalt | 18,485 | $109,809,274.20 |
I dette eksemplet konverteres radkonteksten til filterkonteksten. Det kalles kontekstovergang. ALLEXCEPT-funksjonen fjerner filtre fra alle Customer-tabellkolonner unntatt CustomerKey-kolonnen.