CALCULATE

gælder for:beregnet kolonneberegnet tabelberegning af målingvisualisering

Evaluerer et udtryk i en ændret filterkontekst.

Seddel

Der er også funktionen CALCULATETABLE. Den udfører præcis den samme funktionalitet, bortset fra at den ændrer den filterkontekst, anvendt på et udtryk, der returnerer et tabelobjekt.

Syntaks

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Parametre

Udtryk Definition
expression Det udtryk, der skal evalueres.
filter1, filter2,… (Valgfrit) Booleske udtryk eller tabeludtryk, der definerer filtre eller filterændringsfunktioner.

Det udtryk, du bruger som den første parameter, fungerer som en måling.

Filtre kan være:

  • Booleske filterudtryk
  • Tabelfilterudtryk
  • Filterændringsfunktioner

Når du bruger flere filtre, kan du evaluere dem ved hjælp af den AND (&&) logiske operator, hvilket betyder, at alle betingelser skal være TRUE, eller af den OR (||) logiske operator, hvilket betyder, at begge betingelser kan være sande. Du kan få flere oplysninger under DAX Operatorer > for logiske operatorer.

Booleske filterudtryk

Et boolesk udtryksfilter er et udtryk, der evalueres til TRUE eller FALSE. Den skal følge flere regler:

  • Den kan referere til kolonner fra en enkelt tabel.

  • Den kan ikke referere til målinger.

  • Den kan ikke bruge en indlejret CALCULATE funktion.

  • Den kan ikke bruge funktioner, der scanner eller returnerer en tabel, medmindre du overfører dem som argumenter til sammenlægningsfunktioner.

  • Den kan indeholde en sammenlægningsfunktion, der returnerer en skalarværdi. Eksempel:

    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabelfilterudtryk

Et tabeludtryksfilter anvender et tabelobjekt som et filter. Det kan være en reference til en modeltabel, men mere sandsynligt er det en funktion, der returnerer et tabelobjekt. Du kan bruge funktionen FILTER til at anvende komplekse filterbetingelser, herunder dem, du ikke kan definere ved hjælp af et boolesk filterudtryk.

Funktioner til filterændring

Med filterændringsfunktioner kan du gøre mere end blot at tilføje filtre. De giver dig ekstra kontrol, når du ændrer filterkontekst.

Funktion Formål
REMOVEFILTERS Fjern alle filtre eller filtre fra en eller flere kolonner i en tabel eller fra alle kolonner i en enkelt tabel.
ALL 1, ALLEXCEPTALLNOBLANKROW Fjern filtre fra en eller flere kolonner eller fra alle kolonner i en enkelt tabel.
KEEPFILTERS Tilføj filter uden at fjerne eksisterende filtre på de samme kolonner.
USERELATIONSHIP Aktivér en inaktiv relation mellem relaterede kolonner, hvorefter den aktive relation automatisk bliver inaktiv.
CROSSFILTER Rediger filterretningen (fra begge til enkelt eller fra enkelt til begge), eller deaktiver en relation.

1 Funktionen ALL og dens varianter fungerer både som filtermodifikatorer og som funktioner, der returnerer tabelobjekter. Hvis dit værktøj understøtter funktionen REMOVEFILTERS , skal du bruge den til at fjerne filtre.

Returværdi

Den værdi, der er resultatet af udtrykket.

Bemærkninger

  • Når du angiver filterudtryk, ændrer funktionen CALCULATE filterkonteksten for at evaluere udtrykket. For hvert filterudtryk findes der to standardresultater, når filterudtrykket ikke er ombrudt i funktionen KEEPFILTERS :

    • Hvis kolonnerne eller tabellerne ikke er i filterkonteksten, føjes der nye filtre til filterkonteksten for at evaluere udtrykket.
    • Hvis kolonnerne eller tabellerne allerede er i filterkonteksten, overskrives de eksisterende filtre af de nye filtre for at evaluere udtrykket CALCULATE .
  • Brug af funktionen CALCULATEuden filtre opnår et bestemt krav. Den skifter rækkekontekst til filterkontekst. Denne overgang er påkrævet, når et udtryk (ikke en modelmåling), der opsummerer modeldata, skal evalueres i rækkekontekst. Dette scenarie kan ske i en formel for en beregnet kolonne, eller når et udtryk i en iteratorfunktion evalueres. Når du bruger en modelmåling i rækkekontekst, sker kontekstovergangen automatisk.

  • Denne funktion understøttes ikke til brug i DirectQuery-tilstand, når den bruges i beregnede kolonner eller RLS-regler (row-level security).

Eksempler

Eksempler i denne artikel kan bruges sammen med eksempelmodellen Adventure Works DW 2020 Power BI Desktop. Hvis du vil hente modellen, skal du se DAX eksempelmodel.

Følgende målingsdefinitionen Sales tabel giver et indtægtsresultat, men kun for produkter, der har farven blå.

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Kategori Salgsbeløb Blå indtægt
Tilbehør 1.272.057,89 USD 165.406,62 USD
Cykler 94.620.526,21 USD 8.374.313,88 USD
Tøj 2.117.613,45 USD 259.488,37 USD
Komponenter 11.799.076,66 USD 803.642,10 USD
i alt 109.809.274,20 USD 9.602.850,97 USD

Funktionen CALCULATE evaluerer summen af tabellen Saleskolonnen Sales Amount i en ændret filterkontekst. Der føjes et nyt filter til tabellen ProductKolonnen Color – eller filteret overskriver alle filtre, der allerede er anvendt på kolonnen.

Følgende målingsdefinitionen sales tabel giver et forhold mellem 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øb Indtægt % kanal i alt
internet 29.358.677,22 USD 26.74%
Forhandler 80.450.596,98 USD 73.26%
i alt 109.809.274,20 USD 100,00%

Funktionen DIVIDE opdeler et udtryk, der opsummerer tabellen Saleskolonneværdien Sales Amount (i filterkonteksten) med det samme udtryk i en ændret filterkontekst. Det er den CALCULATE funktion, der ændrer filterkonteksten ved hjælp af funktionen REMOVEFILTERS, som er en filterændringsfunktion. Den fjerner filtre fra tabellen Sales Orderkolonnen Channel.

Følgende Definition af beregnet kolonne for kunde tabel klassificerer kunder i en loyalitetsklasse. Det er et meget simpelt scenarie: Når kundens indtægt er mindre end 2.500 USD, klassificeres de som Low; Ellers er de High.

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Kundesegment Kundeantal Salgsbeløb
Høj 4,637 102.670.663,09 USD
Lav 13,848 7.138.611,11 USD
i alt 18,485 109.809.274,20 USD

I dette eksempel konverteres rækkekontekst til filterkonteksten. Det kaldes kontekstovergang. Funktionen ALLEXCEPT fjerner filtre fra alle tabelkolonnerne Customer undtagen kolonnen CustomerKey.