Dela via


CALCULATE

gäller för:beräknad kolumnberäknad tabellMåttVisuell beräkning

Utvärderar ett uttryck i en modifierad filterkontext.

Not

Det finns också funktionen CALCULATETABLE. Den utför exakt samma funktioner, förutom att den ändrar filterkontexten tillämpas på ett uttryck som returnerar ett tabellobjekt.

Syntax

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

Parametrar

Term Definition
expression Uttrycket som ska utvärderas.
filter1, filter2,… (Valfritt) Booleska uttryck eller tabelluttryck som definierar filter eller filtermodifierarfunktioner.

Uttrycket som används som den första parametern är i stort sett detsamma som ett mått.

Filter kan vara:

  • Booleska filteruttryck
  • Tabellfilteruttryck
  • Funktioner för filterändring

När det finns flera filter kan de utvärderas med hjälp av den logiska operatorn AND (&&) logiska operatorn, vilket innebär att alla villkor måste vara TRUEeller av den logiska operatorn OR (||), vilket innebär att båda villkoren kan vara sanna.

Booleska filteruttryck

Ett booleskt uttrycksfilter är ett uttryck som utvärderas till TRUE eller FALSE. Det finns flera regler som de måste följa:

  • De kan referera till kolumner från en enda tabell.
  • De kan inte referera till mått.
  • De kan inte använda en kapslad CALCULATE funktion.

Från och med september 2021-versionen av Power BI Desktop gäller även följande:

  • De kan inte använda funktioner som söker igenom eller returnerar en tabell om de inte skickas som argument till aggregeringsfunktioner.
  • De kan innehålla en aggregeringsfunktion som returnerar ett skalärt värde. Till exempel
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabellfilteruttryck

Ett tabelluttrycksfilter använder ett tabellobjekt som ett filter. Det kan vara en referens till en modelltabell, men mer troligt är det en funktion som returnerar ett tabellobjekt. Du kan använda funktionen FILTER för att tillämpa komplexa filtervillkor, inklusive de som inte kan definieras av ett booleskt filteruttryck.

Filtermodifierarfunktioner

Med filtermodifierarfunktioner kan du göra mer än att bara lägga till filter. De ger dig ytterligare kontroll när du ändrar filterkontexten.

Funktion Avsikt
REMOVEFILTERS Ta bort alla filter eller filter från en eller flera kolumner i en tabell eller från alla kolumner i en enda tabell.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Ta bort filter från en eller flera kolumner eller från alla kolumner i en enskild tabell.
KEEPFILTERS Lägg till filter utan att ta bort befintliga filter på samma kolumner.
USERELATIONSHIP Engagera en inaktiv relation mellan relaterade kolumner, i vilket fall den aktiva relationen automatiskt blir inaktiv.
CROSSFILTER Ändra filterriktningen (från båda till enstaka eller från enstaka till båda) eller inaktivera en relation.

1 Funktionen ALL och dess varianter fungerar både som filtermodifierare och som funktioner som returnerar tabellobjekt. Om funktionen REMOVEFILTERS stöds av verktyget är det bättre att använda den för att ta bort filter.

Returvärde

Värdet som är resultatet av uttrycket.

Anmärkningar

  • När filteruttryck tillhandahålls ändrar funktionen CALCULATE filterkontexten för att utvärdera uttrycket. För varje filteruttryck finns det två möjliga standardutfall när filteruttrycket inte omsluts i funktionen KEEPFILTERS:

    • Om kolumnerna (eller tabellerna) inte finns i filterkontexten läggs nya filter till i filterkontexten för att utvärdera uttrycket.
    • Om kolumnerna (eller tabellerna) redan finns i filterkontexten skrivs de befintliga filtren över av de nya filtren för att utvärdera CALCULATE-uttrycket.
  • Den CALCULATE funktion som används utan filter uppnår ett specifikt krav. Den överför radkontexten till filterkontexten. Det krävs när ett uttryck (inte ett modellmått) som sammanfattar modelldata måste utvärderas i radkontext. Det här scenariot kan inträffa i en formel för beräknade kolumner eller när ett uttryck i en iteratorfunktion utvärderas. Observera att när ett modellmått används i radkontext sker kontextövergång automatiskt.

  • Den här funktionen stöds inte för användning i DirectQuery-läge när den används i beräknade kolumner eller säkerhetsregler på radnivå (RLS).

Exempel

Följande definition av måttet Sales ger ett intäktsresultat, men bara för produkter som har färgen blå.

Exempel i den här artikeln kan användas med exempelmodellen Adventure Works DW 2020 Power BI Desktop. Information om hur du hämtar modellen finns i DAX exempelmodell.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategori Försäljningsbelopp Blå intäkter
Tillbehör $1,272,057.89 $165,406.62
Cyklar $94,620,526.21 $8,374,313.88
Kläder $2,117,613.45 $259,488.37
Komponenter $11,799,076.66 $803,642.10
totalt $109,809,274.20 $9,602,850.97

Funktionen CALCULATE utvärderar summan av tabellen SalesSales Amount i en modifierad filterkontext. Ett nytt filter läggs till i tabellen ProductColor , eller så skriver filtret över alla filter som redan har tillämpats på kolumnen.

Följande definition av måttet Sales ger ett förhållande mellan försäljning och försäljning för alla försäljningskanaler.

Kanal Försäljningsbelopp Intäkter % total kanal
Internet $29,358,677.22 26,74%
Återförsäljare $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])
    )
)

Funktionen DIVIDE delar upp ett uttryck som summerar tabellen SalesSales Amount kolumnvärde (i filterkontexten) med samma uttryck i en modifierad filterkontext. Det är funktionen CALCULATE som ändrar filterkontexten med hjälp av funktionen REMOVEFILTERS, som är en filtermodifierarfunktion. Den tar bort filter från tabellen Sales OrderChannel.

Följande kund tabell beräknad kolumndefinition klassificerar kunder till en lojalitetsklass. Det är ett mycket enkelt scenario: När intäkterna från kunden är mindre än 2 500 USD klassificeras de som Låg; annars är de High.

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

I det här exemplet konverteras radkontexten till filterkontexten. Det kallas kontextövergång. Funktionen ALLEXCEPT tar bort filter från alla tabellkolumner för kund förutom kolumnen CustomerKey.

Filtrera kontextradkontextCALCULATETABLE funktionfilterfunktioner