BERÄKNA

Utvärderar ett uttryck i en modifierad filterkontext.

Kommentar

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

Syntax

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

Parametrar

Period Definition
Uttryck 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 (&&), vilket innebär att alla villkor måste vara TRUE eller 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 Syfte
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.
ALLA1, 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.

Kommentarer

  • 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.
  • Funktionen CALCULATE 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 beräknad kolumnformel 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 måttdefinition för försäljningstabellen 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-exempelmodellen.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategori Försäljningsbelopp Blå intäkter
Accessoarer $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 kolumnen Sales table Sales Amount i en modifierad filterkontext. Ett nytt filter läggs till i kolumnen Färg i produkttabellen, eller så skriver filtret över alla filter som redan har tillämpats på kolumnen.

Följande måttdefinition för försäljningstabellen ger ett förhållande mellan försäljning och försäljning för alla försäljningskanaler.

Kanal Försäljningsbelopp Intäkt % total kanal
Internet $29,358,677.22 26.74%
Reseller 80 450 596,98 USD 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 DIVIDEra ett uttryck som summerar kolumnvärdet Sales Amount (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 Försäljningsorder Kanal.

Följande beräknade kolumndefinition i kundtabellen klassificerar kunder till en lojalitetsklass. Det är ett mycket enkelt scenario: När intäkterna som kunden producerar är mindre än 2 500 USD klassificeras de som Låga, annars är de höga.

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 kundtabellkolumner utom kolumnen CustomerKey .

Filterkontext
Radkontext
Funktionen CALCULATETABLE
Filterfunktioner