Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
berekende kolom
berekende tabel
Meting
Visuele berekening
Evalueert een expressie in een gewijzigde filtercontext.
Notitie
Er is ook de CALCULATETABLE functie. De functie voert precies dezelfde functionaliteit uit, behalve dat de filtercontext wordt gewijzigd toegepast op een expressie die een tabelobject retourneert.
Syntaxis
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parameters
| Term | Definitie |
|---|---|
expression |
De expressie die moet worden geëvalueerd. |
filter1, filter2,… |
(Optioneel) Booleaanse expressies of tabelexpressies waarmee filters of filteraanpassingsfuncties worden gedefinieerd. |
De expressie die u als eerste parameter gebruikt, werkt als een meting.
Filters kunnen:
- Booleaanse filterexpressies
- Tabelfilterexpressies
- Functies voor het wijzigen van filters
Wanneer u meerdere filters gebruikt, kunt u deze evalueren met behulp van de AND (&&) logische operator, wat betekent dat alle voorwaarden moeten zijn TRUE, of door de OR (||) logische operator, wat betekent dat beide voorwaarden waar kunnen zijn. Zie logische > operators voorDAX meer informatie.
Booleaanse filterexpressies
Een Boole-expressiefilter is een expressie die resulteert in TRUE of FALSE. Er moeten verschillende regels worden gevolgd:
Er kan worden verwezen naar kolommen uit één tabel.
Er kan niet naar metingen worden verwezen.
Er kan geen geneste CALCULATE functie worden gebruikt.
Er kunnen geen functies worden gebruikt die een tabel scannen of retourneren, tenzij u ze als argumenten doorgeeft aan aggregatiefuncties.
Het kan een aggregatiefunctie bevatten die een scalaire waarde retourneert. Voorbeeld:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Tabelfilterexpressie
Een tabelexpressiefilter past een tabelobject toe als filter. Dit kan een verwijzing naar een modeltabel zijn, maar waarschijnlijk is het een functie die een tabelobject retourneert. U kunt de FILTER functie gebruiken om complexe filtervoorwaarden toe te passen, inclusief voorwaarden die u niet kunt definiëren door een Booleaanse filterexpressie.
Filteraanpassingsfuncties
Met filteraanpassingsfuncties kunt u meer doen dan alleen filters toevoegen. Ze geven u extra controle bij het wijzigen van filtercontext.
| Functie | Doel |
|---|---|
| REMOVEFILTERS | Verwijder alle filters of filters uit een of meer kolommen van een tabel of uit alle kolommen van één tabel. |
| ALL 1, ALLEXCEPT, ALLNOBLANKROW | Verwijder filters uit een of meer kolommen of uit alle kolommen van één tabel. |
| KEEPFILTERS | Voeg filter toe zonder bestaande filters op dezelfde kolommen te verwijderen. |
| USERELATIONSHIP | Schakel een inactieve relatie tussen gerelateerde kolommen in. In dat geval wordt de actieve relatie automatisch inactief. |
| CROSSFILTER | Wijzig de filterrichting (van beide naar één of van één naar beide) of schakel een relatie uit. |
1 De functie ALL en de varianten gedragen zich als filteraanpassingen en als functies die tabelobjecten retourneren. Als uw hulpprogramma de REMOVEFILTERS functie ondersteunt, gebruikt u deze om filters te verwijderen.
Retourwaarde
De waarde die het resultaat is van de expressie.
Opmerkingen
Wanneer u filterexpressies opgeeft, wijzigt de CALCULATE functie de filtercontext om de expressie te evalueren. Voor elke filterexpressie bestaan twee standaardresultaten wanneer de filterexpressie niet is verpakt in de KEEPFILTERS functie:
- Als de kolommen of tabellen zich niet in de filtercontext bevinden, worden er nieuwe filters toegevoegd aan de filtercontext om de expressie te evalueren.
- Als de kolommen of tabellen zich al in de filtercontext bevinden, worden de bestaande filters overschreven door de nieuwe filters om de CALCULATE expressie te evalueren.
Het gebruik van de CALCULATE functie zonder filters bereikt een specifieke vereiste. Hiermee wordt rijcontext overgestapt op filtercontext. Deze overgang is vereist wanneer een expressie (geen modelmeting) waarin modelgegevens worden samengevat, moeten worden geëvalueerd in rijcontext. Dit scenario kan zich voordoen in een formule voor een berekende kolom of wanneer een expressie in een iterator-functie wordt geëvalueerd. Wanneer u een modelmeting in rijcontext gebruikt, wordt de contextovergang automatisch uitgevoerd.
-
Deze functie wordt niet ondersteund voor gebruik in de DirectQuery-modus wanneer deze wordt gebruikt in regels voor beveiliging op rijniveau (berekende kolommen of beveiliging op rijniveau).
Voorbeelden
Voorbeelden in dit artikel kunnen worden gebruikt met het voorbeeldmodel Adventure Works DW 2020 Power BI Desktop. Zie DAX voorbeeldmodelom het model op te halen.
Met de volgende tabelmetingsdefinitie verkoop wordt een omzetresultaat gegenereerd, maar alleen voor producten met de kleur blauw.
Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
| Categorie | Verkoopbedrag | Blauwe omzet |
|---|---|---|
| Accessoires | $ 1.272.057,89 | $ 165,406,62 |
| Fietsen | $ 94.620.526,21 | $ 8.374.313,88 |
| Kleding | $ 2.117.613,45 | $ 259,488,37 |
| Onderdelen | $ 11.799.076,66 | $ 803,642,10 |
| Totaal | $ 109.809.274,20 | $ 9.602.850,97 |
De functie CALCULATE evalueert de som van de tabel SalesSales Amount kolom in een gewijzigde filtercontext. Er wordt een nieuw filter toegevoegd aan de tabel Productkolom Color, of het filter overschrijft alle filters die al op de kolom zijn toegepast.
De volgende definitie van de tabelmaatregel Sales produceert een verhouding van de verkoopcijfers voor alle verkoopkanalen.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| Kanaal | Verkoopbedrag | Omzet % Totaalkanaal |
|---|---|---|
| Internet | $ 29.358.677,22 | 26.74% |
| Reseller | $ 80.450.596,98 | 73.26% |
| Totaal | $ 109.809.274,20 | 100,00% |
De functie DIVIDE verdeelt een expressie waarmee de som van de tabel SalesSales Amount kolomwaarde (in de filtercontext) wordt opgeteld door dezelfde expressie in een gewijzigde filtercontext. Het is de CALCULATE functie die de filtercontext wijzigt met behulp van de functie REMOVEFILTERS, een filteraanpassingsfunctie. Hiermee verwijdert u filters uit de kolom Sales Order tabel Channel.
In de volgende tabel berekende kolomdefinitie klant worden klanten ingedeeld in een loyaliteitsklasse. Het is een heel eenvoudig scenario: Wanneer de omzet die door de klant wordt geproduceerd, kleiner is dan $ 2500, worden ze geclassificeerd als Laag; anders zijn ze High.
Customer Segment =
IF (
CALCULATE (
SUM ( Sales[Sales Amount] ),
ALLEXCEPT ( Customer, Customer[CustomerKey] )
) < 2500,
"Low",
"High"
)
| Klantsegment | Aantal klanten | Verkoopbedrag |
|---|---|---|
| Hoog | 4,637 | $ 102.670.663,09 |
| Laag | 13,848 | $ 7.138.611,11 |
| Totaal | 18,485 | $ 109.809.274,20 |
In dit voorbeeld wordt rijcontext geconverteerd naar de filtercontext. Het staat bekend als contextovergang. Met de functie ALLEXCEPT worden filters verwijderd uit alle kolommen van Customer tabel, met uitzondering van de kolom CustomerKey.