Lezen in het Engels

Delen via


CALCULATE

Van toepassing op:berekende kolomberekende tabelMeasureVisuele berekening

Evalueert een expressie in een gewijzigde filter context.

Notitie

Er is ook de CALCULATETABLE functie. De functie voert precies dezelfde functionaliteit uit, except de context van de filter wordt gewijzigd toegepast op een expressie die een tabelobject retourneert.

Syntaxis

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

Parameters

Term Definitie
expression De expressie die moet worden geëvalueerd.
filter1, filter2,… (Optioneel) Booleaanse expressies or tabelexpressies die filters, orfilter modifier-functies definiëren.

De expressie die wordt gebruikt als de parameter first is in wezen hetzelfde als een measure.

Filters kan het volgende zijn:

  • Booleaanse filter expressies
  • Tabel-filter-expressies
  • Filter wijzigingsfuncties

Wanneer er meerdere filterszijn, kunnen ze worden geëvalueerd met behulp van de AND (&&) logische operator, wat betekent dat all voorwaarden moeten worden TRUE, or door de logische operator OR (||), wat betekent dat beide voorwaarden kunnen worden true.

Booleaanse filter expressies

Een Booleaanse expressie filter is een expressie die resulteert in TRUEorFALSE. Er zijn verschillende regels waaraan ze zich moeten houden:

  • Ze kunnen verwijzen naar kolommen uit één tabel.
  • Ze kunnen niet verwijzen naar metingen.
  • Ze kunnen geen geneste CALCULATE functie gebruiken.

Vanaf de release van september 2021 van Power BI Desktop is het volgende ook van toepassing:

  • Ze kunnen geen functies gebruiken die or een tabel retourneren, tenzij ze worden doorgegeven als argumenten voor aggregatiefuncties.
  • Ze kunnen een aggregatiefunctie bevatten die een scalaire valueretourneert. Bijvoorbeeld
    DAX
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Tabel-filter-expressie

Een tabelexpressie filter een tabelobject toepast als een filter. Dit kan een verwijzing naar een modeltabel zijn, maar waarschijnlijk is het een functie die een tabelobject retourneert. U kunt de functie FILTER gebruiken om complexe filter voorwaarden toe te passen, inclusief voorwaarden die niet kunnen worden gedefinieerd door een Booleaanse filter-expressie.

Filter modifier-functies

met Filter modifier-functies kunt u meer doen dan alleen filterstoevoegen. Ze bieden u extra controle bij het wijzigen van filter context.

Functie Doel
REMOVEFILTERS Verwijder allfilters, orfilters uit een or meer kolommen van een tabel or uit all kolommen van één tabel.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Verwijder filters uit een or meer kolommen, or uit all kolommen van één tabel.
KEEPFILTERS Voeg filter toe zonder bestaande filters in dezelfde kolommen te verwijderen.
USERELATIONSHIP Schakel een inactieve relatie tussen related kolommen in. In dat geval wordt de actieve relatie automatisch inactief.
CROSSFILTER Wijzig filter richting (van beide naar één, or van één naar beide) or een relatie uitschakelen.

1 De functie ALLand de varianten zich gedragen als zowel filter modifiers and als functies die tabelobjecten retourneren. If de functie REMOVEFILTERS wordt ondersteund door uw hulpprogramma, kunt u deze beter gebruiken om filterste verwijderen.

value retourneren

Het value dat het resultaat is van de expressie.

Opmerkingen

  • Wanneer filter expressies worden opgegeven, wijzigt de functie CALCULATE de filter context om de expressie te evaluate. Voor elke filter expressie zijn er twee mogelijke standaardresultaten wanneer de filter-expressie wordt not verpakt in de KEEPFILTERS functie:

    • If de kolommen (or tabellen) zich niet in de context van de filter bevinden, worden nieuwe filters toegevoegd aan de filter context om de expressie te evaluate.
    • If de kolommen (or tabellen) zich al in de context van de filter bevinden, wordt de bestaande filters overschreven door de nieuwe filters om de evaluate-expressie te CALCULATE.
  • De CALCULATE functie die wordt gebruikt zonder filters een specifieke vereiste bereikt. De rijcontext wordt overgestapt op filter context. Dit is vereist wanneer een expressie (not een model measure) die modelgegevens samenvat, moeten worden geëvalueerd in rijcontext. Dit scenario kan zich voordoen in een formule voor berekende kolommen or wanneer een expressie in een iterator-functie wordt geëvalueerd. Houd er rekening mee dat wanneer een model measure wordt gebruikt in rijcontext, contextovergang automatisch is.

  • Deze functie wordt not ondersteund voor gebruik in de DirectQuery-modus wanneer deze wordt gebruikt in berekende kolommen or regels voor beveiliging op rijniveau (RLS).

Voorbeelden

De volgende tabel Salesmeasure definitie produceert een omzetresultaat, maar alleen voor producten met de kleur blauw.

Voorbeelden in dit artikel kunnen worden gebruikt met het sample Adventure Works DW 2020 Power BI Desktop-model. Zie DAXsample modelom het model op te halen.

DAX
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 sum van de tabel SalesKolom Sales Amount in een gewijzigde filter context. Er wordt een nieuwe filter toegevoegd aan de Product tabel kolom Color(or), overschrijft de filter alle filter die al op de kolom zijn toegepast.

De volgende tabel Salesmeasure definitie produceert een verhouding van de verkoop via de verkoop voor all verkoopkanalen.

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%
DAX
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

De functie DIVIDE verdeelt een expressie die de som van de tabel Saleskolom Sales Amount kolom value (in de filter context) door dezelfde expressie in een gewijzigde filter context optelt. Dit is de CALCULATE functie die de filter context wijzigt met behulp van de functie REMOVEFILTERS, een filter modifier-functie. 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.

DAX
Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

In dit voorbeeld wordt rijcontext geconverteerd naar de filter context. Het staat bekend als contextovergang. Met de functie ALLEXCEPT verwijdert u filters uit allkolommen van de tabel Customerexcept de kolom CustomerKey.

Filter contextrijcontextCALCULATETABLE functieFilter functies