Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:
beräknad kolumn
beräknad tabell
Mått
Visuell 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 du använder som den första parametern fungerar som ett mått.
Filter kan vara:
- Booleska filteruttryck
- Tabellfilteruttryck
- Funktioner för filterändring
När du använder flera filter kan du utvärdera dem med hjälp av den AND logiska operatorn (&&), vilket innebär att alla villkor måste vara TRUE, eller av den OR logiska operatorn (||), vilket innebär att båda villkoren kan vara sanna. Mer information finns iDAX operatorer > logiska operatorer.
Booleska filteruttryck
Ett booleskt uttrycksfilter är ett uttryck som utvärderas till TRUE eller FALSE. Den måste följa flera regler:
Den kan referera till kolumner från en enda tabell.
Det går inte att referera till mått.
Den kan inte använda en kapslad CALCULATE funktion.
Den kan inte använda funktioner som söker igenom eller returnerar en tabell om du inte skickar dem som argument till aggregeringsfunktioner.
Den kan innehålla en aggregeringsfunktion som returnerar ett skalärt värde. Ett 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 FILTER funktionen för att tillämpa komplexa filtervillkor, inklusive de som du inte kan definiera med ett booleskt filteruttryck.
Filtermodifierarfunktioner
Med filtermodifierarfunktioner kan du göra mer än att bara lägga till filter. De ger dig extra 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 verktyget stöder REMOVEFILTERS funktionen använder du den för att ta bort filter.
Returvärde
Värdet som är resultatet av uttrycket.
Anmärkningar
När du anger filteruttryck CALCULATE ändrar funktionen filterkontexten för att utvärdera uttrycket. För varje filteruttryck finns det två standardutfall när filteruttrycket inte är inslaget i KEEPFILTERS funktionen:
- 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.
CALCULATE Att använda funktionen utan filter uppnår ett specifikt krav. Den överför radkontexten till filterkontexten. Den här övergången 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. När du använder ett modellmått 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
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.
Följande definition av måttet Sales ger ett intäktsresultat, men bara för produkter som har färgen blå.
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.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| 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% |
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"
)
| Kundsegment | Antal kunder | Försäljningsbelopp |
|---|---|---|
| Hög | 4,637 | $102,670,663.09 |
| Låg | 13,848 | $7,138,611.11 |
| totalt | 18,485 | $109,809,274.20 |
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.