BERÄKNA
Gäller för: Beräknad kolumn Beräknad tabell Mått Visuell beräkning
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. |
ALLA 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.
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 .
Relaterat innehåll
Filterkontext
Radkontext
Funktionen CALCULATETABLE
Filterfunktioner
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för