Del via


CALCULATE

gjelder:beregnet kolonneberegnet tabellMeasurevisualobjektberegning

Evaluerer et uttrykk i en endret filter kontekst.

Notat

Det finnes også CALCULATETABLE-funksjonen. Den utfører nøyaktig samme funksjonalitet, except den endrer filter konteksten 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 or tabelluttrykk som definerer filters, orfilter endringsfunksjoner.

Uttrykket som brukes som first-parameteren, er i hovedsak det samme som en measure.

Filters kan være:

  • Boolske filter uttrykk
  • Tabell filter uttrykk
  • Filter endringsfunksjoner

Når det finnes flere filters, kan de evalueres ved hjelp av AND (&&) logiske operatoren, noe som betyr at all betingelser må være TRUE, or av den logiske operatoren OR (||), noe som betyr at en av betingelsene kan være true.

Boolske filter uttrykk

Et boolsk uttrykk filter er et uttrykk som evalueres til TRUEorFALSE. 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 or returnere en tabell med mindre de sendes som argumenter til aggregasjonsfunksjoner.
  • De kan inneholde en aggregasjonsfunksjon som returnerer en skalar value. For eksempel
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabell filter uttrykk

Et tabelluttrykk filter bruker et tabellobjekt som en 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 filter betingelser, inkludert de som ikke kan defineres av et boolsk filter uttrykk.

Filter endringsfunksjoner

Filter endringsfunksjoner lar deg gjøre mer enn bare å legge til filters. De gir deg ekstra kontroll når du endrer filter kontekst.

Funksjon Hensikt
REMOVEFILTERS Fjern allfilters, orfilters fra én or flere kolonner i en tabell, or fra all kolonner i én enkelt tabell.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Fjern filters fra én or flere kolonner, or fra all kolonner i én enkelt tabell.
KEEPFILTERS Legg til filter uten å fjerne eksisterende filters i de samme kolonnene.
USERELATIONSHIP Engasjer en inaktiv relasjon mellom related kolonner, og i så fall blir den aktive relasjonen automatisk inaktiv.
CROSSFILTER Endre filter retning (fra både til enkel, or fra enkel til begge) or deaktivere en relasjon.

1 Funksjonen ALLand variantene fungerer som både filter modifikatorer and som funksjoner som returnerer tabellobjekter. If REMOVEFILTERS-funksjonen støttes av verktøyet, er det bedre å bruke den til å fjerne filters.

Returner value

Den value som er resultatet av uttrykket.

Merknader

  • Når filter uttrykk er angitt, endrer CALCULATE-funksjonen filter konteksten for å evaluate uttrykket. For hvert filter uttrykk finnes det to mulige standardresultater når filter-uttrykket not er pakket inn i KEEPFILTERS-funksjonen:

    • If kolonnene (or tabeller) ikke er i filter kontekst, legges nye filters til i filter konteksten for å evaluate uttrykket.
    • If kolonnene (or tabeller) allerede er i filter kontekst, overskrives den eksisterende filters av den nye filters for å evaluateCALCULATE-uttrykket.
  • Funksjonen CALCULATE som brukes uten filters oppnår et bestemt krav. Den overfører radkonteksten til filter kontekst. Det kreves når et uttrykk (not en modell measure) som oppsummerer modelldata, må evalueres i radkontekst. Dette scenarioet kan skje i en beregnet kolonneformel or når et uttrykk i en gjentakelsesfunksjon evalueres. Vær oppmerksom på at når en modell measure brukes i radkontekst, er kontekstovergang automatisk.

  • Denne funksjonen støttes not for bruk i DirectQuery-modus når den brukes i beregnede kolonner or regler for sikkerhet på radnivå (RLS).

Eksempler

Følgende Sales-tabell measure definisjon gir et inntektsresultat, men bare for produkter som har fargen blå.

Eksempler i denne artikkelen kan brukes med sample Adventure Works DW 2020 Power BI Desktop-modellen. Hvis du vil ha modellen, kan du se DAXsample modell.

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

CALCULATE-funksjonen evaluerer sum i Sales-tabellen -kolonnen i en endret filter kontekst. En ny filter legges til i Product tabell Farge-kolonnen–oroverskriver filter alle filter som allerede er brukt i kolonnen.

Følgende Sales-tabell measure definisjon gir et forhold mellom salg og salg for all 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 kolonne value (i filter kontekst) med det samme uttrykket i en endret filter kontekst. Det er CALCULATE-funksjonen som endrer filter konteksten ved hjelp av REMOVEFILTERS-funksjonen, som er en filter endringsfunksjon. Den fjerner filters 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 filter kontekst. Det kalles kontekstovergang. ALLEXCEPT-funksjonen fjerner filters fra tabellkolonnene allCustomerexceptCustomerKey.

Filter kontekstradkontekstCALCULATETABLE funksjonenFilter funksjoner