Dela via


CALCULATE

gäller för:beräknad kolumnberäknad tabellMeasurevisuell beräkning

Utvärderar ett uttryck i en modifierad filter kontext.

Not

Det finns också funktionen CALCULATETABLE. Den utför exakt samma funktioner except den ändrar den filter kontexten 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 or tabelluttryck som definierar filters, orfilter modifierarfunktioner.

Uttrycket som används som parametern first är i stort sett detsamma som en measure.

Filters kan vara:

  • Booleska filter uttryck
  • Tabelluttryck filter
  • Filter ändringsfunktioner

När det finns flera filterskan de utvärderas med hjälp av den AND (&&) logiska operatorn, vilket innebär att all villkor måste vara TRUE, or av OR (||) logiska operatorn, vilket innebär att endera villkoret kan vara true.

Booleska filter uttryck

Ett booleskt uttryck filter är ett uttryck som utvärderas till TRUEorFALSE. 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 genomsöker or returnerar en tabell om de inte skickas som argument till aggregeringsfunktioner.
  • De kan innehålla en aggregeringsfunktion som returnerar en skalär value. Till exempel
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabell filter uttryck

Ett tabelluttryck filter använder ett tabellobjekt som en 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 filter villkor, inklusive de som inte kan definieras av ett booleskt filter uttryck.

Filter modifierarfunktioner

Filter modifierarfunktioner kan du göra mer än att bara lägga till filters. De ger dig ytterligare kontroll när du ändrar filter kontext.

Funktion Avsikt
REMOVEFILTERS Ta bort allfilters, orfilters från en or fler kolumner i en tabell, or från all kolumner i en enda tabell.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Ta bort filters från en or fler kolumner, or från all kolumner i en enda tabell.
KEEPFILTERS Lägg till filter utan att ta bort befintliga filters på samma kolumner.
USERELATIONSHIP Engagera en inaktiv relation mellan related kolumner, i vilket fall den aktiva relationen automatiskt blir inaktiv.
CROSSFILTER Ändra filter riktning (från båda till enkla or från en till båda) or inaktivera en relation.

1 Funktionen ALLand dess varianter fungerar som både filter modifierare and som funktioner som returnerar tabellobjekt. If funktionen REMOVEFILTERS stöds av verktyget är det bättre att använda den för att ta bort filters.

Returnera value

Den value som är resultatet av uttrycket.

Anmärkningar

  • När filter uttryck tillhandahålls ändrar funktionen CALCULATEfilter kontext för att evaluate uttrycket. För varje filter uttryck finns det två möjliga standardutfall när filter-uttrycket not omsluts i funktionen KEEPFILTERS:

    • If kolumnerna (or tabeller) inte finns i filter kontext läggs nya filters till i den filter kontexten för att evaluate uttrycket.
    • If kolumnerna (or tabeller) redan finns i den filter kontexten skrivs den befintliga filters över av den nya filters för att evaluateCALCULATE-uttrycket.
  • Den CALCULATE funktion som används utan filters uppnår ett specifikt krav. Radkontexten övergår till filter kontext. Det krävs när ett uttryck (not en modell measure) som sammanfattar modelldata måste utvärderas i radkontext. Det här scenariot kan inträffa i en beräknad kolumnformel or när ett uttryck i en iteratorfunktion utvärderas. Observera att när en modell measure används i radkontext sker kontextövergång automatiskt.

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

Exempel

Följande sales tabell measure definition ger ett intäktsresultat, men bara för produkter som har färgen blå.

Exempel i den här artikeln kan användas med sample Adventure Works DW 2020 Power BI Desktop-modell. Information om hur du hämtar modellen finns i DAXsample modell.

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 sum i tabellen SalesSales Amount i en ändrad filter kontext. En ny filter läggs till i tabellen ProductColor,or, filter skriver över alla filter som redan tillämpas på kolumnen.

Följande sales-tabell measure definition ger ett förhållande mellan försäljning jämfört med försäljning för all 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 kolumn value (i filter kontext) med samma uttryck i en modifierad filter kontext. Det är funktionen CALCULATE som ändrar filter-kontexten med hjälp av funktionen REMOVEFILTERS, som är en filter modifierare. Den tar bort filters 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 kontexten filter. Det kallas kontextövergång. Funktionen ALLEXCEPT tar bort filters från tabellkolumnerna allCustomerexcept kolumnen CustomerKey.

Filter kontextradkontextCALCULATETABLE funktionFilter funktioner