CALCULATE
gjelder:beregnet kolonneberegnet tabellmålevisualobjektberegning
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 som brukes som den første parameteren, er i hovedsak det samme som et mål.
Filtre kan være:
- Boolske filteruttrykk
- Tabellfilteruttrykk
- Filtermodifikasjonsfunksjoner
Når det finnes flere filtre, kan de evalueres ved hjelp av AND (&&
) logiske operatoren, noe som betyr at alle betingelser må være TRUE
, eller av den logiske operatoren OR (||
), noe som betyr at begge betingelsene kan være sanne.
Boolske filteruttrykk
Et boolsk uttrykksfilter er et uttrykk som evalueres til TRUE
eller FALSE
. Det finnes flere regler de må følge:
- De kan referere til kolonner fra én enkelt tabell.
- De kan ikke referere til mål.
- De kan ikke bruke en nestet CALCULATE-funksjon.
Fra og med september 2021-utgivelsen av Power BI Desktop gjelder følgende også:
- De kan ikke bruke funksjoner som skanner eller returnerer en tabell med mindre de sendes som argumenter til aggregasjonsfunksjoner.
- De kan inneholde en aggregasjonsfunksjon som returnerer en skalarverdi. For 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 som ikke kan defineres 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 REMOVEFILTERS-funksjonen støttes av verktøyet, er det bedre å bruke den til å fjerne filtre.
Returverdi
Verdien som er resultatet av uttrykket.
Merknader
Når filteruttrykk er angitt, endrer CALCULATE-funksjonen filterkonteksten for å evaluere uttrykket. For hvert filteruttrykk er det to mulige standardresultater når filteruttrykket ikke er pakket inn i KEEPFILTERS-funksjonen:
- Hvis kolonnene (eller tabellene) ikke er i filterkonteksten, legges nye filtre til i filterkonteksten for å evaluere uttrykket.
- Hvis kolonnene (eller tabellene) allerede er i filterkonteksten, overskrives de eksisterende filtrene av de nye filtrene for å evaluere CALCULATE-uttrykket.
Funksjonen CALCULATE som brukes uten filtre oppnår et bestemt krav. Den overfører radkontekst til filterkontekst. Det 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. Vær oppmerksom på at når et modellmål brukes 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
Følgende Måldefinisjon for salg tabell gir et inntektsresultat, men bare for produkter som har fargen blå.
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.
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.
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% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
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"
)
I dette eksemplet konverteres radkonteksten til filterkonteksten. Det kalles kontekstovergang. ALLEXCEPT-funksjonen fjerner filtre fra alle Customer-tabellkolonner unntatt CustomerKey-kolonnen.
Relatert innhold
FilterkontekstRadkontekstCALCULATETABLE funksjonFilterfunksjoner