BEREGNE

Gælder for:Beregnet tabel beregningaf målingsvisualisering for en beregnet kolonne

Evaluerer et udtryk i en ændret filterkontekst.

Bemærk

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

Syntaks

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

Parametre

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

Det udtryk, der bruges som den første parameter, er stort set det samme som en måling.

Filtre kan være:

  • Booleske filterudtryk
  • Tabelfilterudtryk
  • Filterændringsfunktioner

Når der er flere filtre, kan de evalueres ved hjælp af den logiske OPERATOR AND (&&), hvilket betyder, at alle betingelser skal være TRUE eller af den logiske OPERATOR OR (||), hvilket betyder, at begge betingelser kan være sande.

Booleske filterudtryk

Et boolesk udtryksfilter er et udtryk, der evalueres til TRUE eller FALSE. 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 eller returnerer en tabel, medmindre de overføres som argumenter til sammenlægningsfunktioner.
  • De kan indeholde en sammenlægningsfunktion, der returnerer en skalarværdi. F.eks.
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabelfilterudtryk

Et tabeludtryksfilter anvender et tabelobjekt som 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, der ikke kan defineres af et boolesk filterudtryk.

Funktioner til filterændring

Filterændringsfunktioner gør det muligt at gøre mere end blot at tilføje filtre. De giver dig yderligere 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.
ALLE1, ALLEXCEPT, ALLNOBLANKROW 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 funktionen REMOVEFILTERS understøttes af dit værktøj, er det bedre at bruge den til at fjerne filtre.

Returværdi

Den værdi, der er resultatet af udtrykket.

Bemærkninger

  • Når der angives filterudtryk, ændrer funktionen CALCULATE filterkonteksten for at evaluere udtrykket. For hvert filterudtryk er der to mulige 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.
  • Funktionen CALCULATE, der bruges uden filtre , opfylder et bestemt krav. Den skifter rækkekontekst til filterkontekst. Det er påkrævet, når et udtryk (ikke en modelmåling), der opsummerer modeldata, skal evalueres i rækkekontekst. Dette scenarie kan forekomme i en formel for en beregnet kolonne, eller når et udtryk i en iteratorfunktion evalueres. Bemærk, at når en modelmåling bruges 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

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

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.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategori Salgsbeløb Blå indtægt
Accessories 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
Total 109.809.274,20 USD 9.602.850,97 USD

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

Følgende målingsdefinition for tabellen Sales giver et forhold mellem salg og salg for alle salgskanaler.

Kanal Salgsbeløb Indtægt i % kanal i alt
Internet 29.358.677,22 USD 26.74%
Reseller 80.450.596,98 USD 73.26%
Total 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 dividerer et udtryk, der opsummerer kolonneværdien Sales Amount (i filterkonteksten) med det samme udtryk i en ændret filterkontekst. Det er funktionen CALCULATE, der ændrer filterkonteksten ved hjælp af funktionen REMOVEFILTERS, som er en filterændringsfunktion. Den fjerner filtre fra kolonnen Channel i tabellen Sales Order.

Følgende definition af en beregnet kolonne i tabellen Customer klassificerer kunder i en loyalitetsklasse. Det er et meget simpelt scenarie: Når den indtægt, der produceres af kunden, er mindre end $2.500, klassificeres de som Low, ellers er de Høje.

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

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

Filterkontekst
Rækkekontekst
Funktionen CALCULATETABLE
Filterfunktioner