Læs på engelsk

Del via


CALCULATE

gælder for:beregnet kolonneberegnet tabelMeasurevisualiseringsberegning

Evaluerer et udtryk i en ændret filter kontekst.

Bemærk

Der er også funktionen CALCULATETABLE. Den udfører præcis den samme funktionalitet, except den ændrer den filter kontekst, der 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 or tabeludtryk, der definerer filters, orfilter modifikatorfunktioner.

Det udtryk, der bruges som parameteren first, er stort set det samme som et measure.

Filters kan være:

  • Booleske filter udtryk
  • Tabel filter udtryk
  • Filter ændringsfunktioner

Når der er flere filters, kan de evalueres ved hjælp af den AND (&&) logiske operator, hvilket betyder, at all betingelser skal være TRUE, or af den logiske operator OR (||) , hvilket betyder, at begge betingelser kan være true.

Booleske filter udtryk

Et boolesk udtryk filter er et udtryk, der evalueres til TRUEorFALSE. Der er flere regler, som de skal overholde:

  • De kan referere til kolonner fra en enkelt tabel.
  • De kan ikke referere til målinger.
  • De kan ikke bruge en indlejret CALCULATE funktion.

Fra og med udgivelsen af Power BI Desktop fra september 2021 gælder følgende også:

  • De kan ikke bruge funktioner, der scanner or returnerer en tabel, medmindre de overføres som argumenter til sammenlægningsfunktioner.
  • De kan indeholde en sammenlægningsfunktion, der returnerer en skalar value. For eksempel
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Udtryk for tabel filter

Et tabeludtryk filter anvender et tabelobjekt som en 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 filter betingelser, herunder dem, der ikke kan defineres af et boolesk filter udtryk.

Filter modifikatorfunktioner

Filter modifikatorfunktioner gør det muligt at gøre mere end blot at tilføje filters. De giver dig yderligere kontrol, når du ændrer filter kontekst.

Funktion Formål
REMOVEFILTERS Fjern allfiltersorfilters fra en or flere kolonner i en tabel or fra all kolonner i en enkelt tabel.
ALL 1, ALLEXCEPTALLNOBLANKROW Fjern filters fra en or flere kolonner, or fra all kolonner i en enkelt tabel.
KEEPFILTERS Tilføj filter uden at fjerne eksisterende filters på de samme kolonner.
USERELATIONSHIP Aktivér en inaktiv relation mellem related kolonner, hvorefter den aktive relation automatisk bliver inaktiv.
CROSSFILTER Rediger filter retning (fra begge til enkelt, or fra enkelt til begge) or deaktivere en relation.

1 Funktionen ALLand dens varianter fungerer som begge filter modifikatorer and som funktioner, der returnerer tabelobjekter. If funktionen REMOVEFILTERS understøttes af værktøjet, er det bedre at bruge den til at fjerne filters.

Returner value

Den value, der er resultatet af udtrykket.

Bemærkninger

  • Når der angives filter udtryk, ændrer funktionen CALCULATE den filter kontekst for at evaluate udtrykket. For hvert filter udtryk er der to mulige standardresultater, når det filter udtryk not ombrudt i funktionen KEEPFILTERS:

    • If kolonnerne (or tabeller) ikke er i den filter kontekst, føjes der nye filters til den filter kontekst for at evaluate udtrykket.
    • If kolonnerne (or tabeller) allerede er i den filter kontekst, overskrives de eksisterende filters af den nye filters for at evaluate det CALCULATE udtryk.
  • Funktionen CALCULATE, der bruges uden filters, opfylder et bestemt krav. Den overgår rækkekontekst til filter kontekst. Det er påkrævet, når et udtryk (not en model measure), der opsummerer modeldata, skal evalueres i rækkekontekst. Dette scenarie kan ske i en formel for en beregnet kolonne or, når et udtryk i en iteratorfunktion evalueres. Bemærk, at når en model measure bruges i rækkekontekst, sker kontekstovergangen automatisk.

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

Eksempler

Følgende tabellen Salesmeasure definition giver et indtægtsresultat, men kun for produkter, der har farven blå.

Eksempler i denne artikel kan bruges sammen med sample Adventure Works DW 2020 Power BI Desktop-model. Hvis du vil hente modellen, skal du se DAXsample model.

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 sum af tabellen Saleskolonnen Sales Amount i en ændret filter kontekst. Der føjes en ny filter til den Product tabel kolonnen Color–oroverskriver filter alle filter, der allerede er anvendt på kolonnen.

Følgende tabel over salgmeasure definition giver et forhold mellem salg og salg for all salgskanaler.

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%
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Funktionen DIVIDE opdeler et udtryk, der opsummerer tabellen Saleskolonnen Sales Amountvalue (i den filter kontekst) med det samme udtryk i en ændret filter kontekst. Det er den CALCULATE funktion, der ændrer den filter kontekst ved hjælp af funktionen REMOVEFILTERS, som er en filter modifikatorfunktion. Det fjerner filters fra tabellen Sales OrderChannel kolonne.

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"
)

I dette eksempel konverteres rækkekontekst til den filter kontekst. Det kaldes kontekstovergang. Funktionen ALLEXCEPT fjerner filters fra tabelkolonnerne allCustomerexcept kolonnen CustomerKey.

Filter kontekst
rækkekontekst
CALCULATETABLE funktion
Filter funktioner