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 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.