CALCULATE in DAX: de functie die je moet begrijpen om Power BI te beheersen
Yorrick Zijlstra · Maart 2026 · 8 min leestijd
CALCULATE is misschien wel de meest machtige functie in DAX. Met CALCULATE kun je de filtercontext van een berekening aansturen — filters toepassen, verwijderen, of wijzigen voordat een uitdrukking wordt geëvalueerd. Dit is de sleutel tot geavanceerde measures die je Power BI modellen echt tot leven brengen. In dit artikel leggen we uit hoe CALCULATE werkt, hoe je filtercontext manipuleert, en hoe je veelgemaakte fouten vermijdt.
Wat doet CALCULATE?
CALCULATE wijzigt de filtercontext waarin een berekening plaatsvindt. Stel je voor: je hebt een measure Omzet = SUM(Verkopen[Bedrag]) die normaal reageert op alle filters in je rapport (maand, regio, categorie). Met CALCULATE kun je filters overschrijven, toevoegen of verwijderen.
De basis syntax is:
CALCULATE( expressie, filter1, filter2, ... )
CALCULATE neemt een uitdrukking en nul of meer filterargumenten. Het voert de uitdrukking uit in de nieuwe filtercontext.
De basis: filtercontext aansturen
Een simpel voorbeeld. Stel je hebt maandgegevens in je rapport en je wilt altijd de omzet voor 2024 zien, ongeacht welke maand is geselecteerd:
Omzet 2024 = CALCULATE(
SUM( Verkopen[Bedrag] ),
Kalender[Jaar] = 2024
)
Nu toont deze measure altijd de totale omzet voor 2024, wat de gebruiker ook filtert. Dat komt omdat CALCULATE het filter Kalender[Jaar] = 2024 toepast voordat SUM wordt geëvalueerd.
Filtercontext begrijpen
Dit is de kern: Power BI werkt altijd in een filtercontext. Wanneer je naar een matrix kijkt waar maanden in rijen staan en regio's in kolommen, gelden de filters van die positie. Elke cel heeft zijn eigen context.
Voorbeeld: stel je een matrix voor met maanden in rijen en regio's in kolommen. De cell op rij "Maart" en kolom "Amsterdam" heeft twee geldende filters: Kalender[Maand] = Maart en Regio[Regio] = Amsterdam. CALCULATE laat je die filters wijzigen.
CALCULATE met ALL, ALLEXCEPT en ALLSELECTED
Nu komt het interessante deel. Met functies als ALL, ALLEXCEPT en ALLSELECTED kun je filters verwijderen. Dit is essentieel voor percentage-berekeningen.
% van totaal met ALL
ALL verwijdert alle filters. Dit is handig als je wilt weten hoeveel procent van het totaal een getal is:
% van Totaal =
VAR Huidige = SUM( Verkopen[Bedrag] )
VAR Totaal = CALCULATE( SUM( Verkopen[Bedrag] ), ALL( Verkopen ) )
RETURN DIVIDE( Huidige, Totaal )
Hier gebruiken we ALL(Verkopen) om alle filters op de tabel Verkopen uit te schakelen. Totaal bevat nu echt het totaal van alles, ongeacht welke filters actief zijn.
% van categorie met ALLEXCEPT
ALLEXCEPT verwijdert alle filters BEHALVE de kolommen die je specificeert. Handig als je het percentage per categorie wilt:
% van Categorie =
VAR Huidige = SUM( Verkopen[Bedrag] )
VAR CategorieTotal = CALCULATE(
SUM( Verkopen[Bedrag] ),
ALLEXCEPT( Verkopen, Verkopen[Categorie] )
)
RETURN DIVIDE( Huidige, CategorieTotal )
Nu berekent CategorieTotal het totaal per categorie, ongeacht andere filters (maand, regio, etc.). Je krijgt het percentage binnen de gekozen categorie.
% van selectie met ALLSELECTED
ALLSELECTED is verfijnd: het verwijdert filters die via niveau of rapport zijn geappliceerd, maar behoudt filters van slicer-selecties:
% van Selectie =
VAR Huidige = SUM( Verkopen[Bedrag] )
VAR SelectieTotal = CALCULATE(
SUM( Verkopen[Bedrag] ),
ALLSELECTED( Verkopen )
)
RETURN DIVIDE( Huidige, SelectieTotal )
Dit is subtiel maar belangrijk: als je een matrix-niveau filtert (door een maand te selecteren), wordt dat genegeerd. Maar als je een slicer gebruikt, blijft dat filter gelden. Handig voor "% van de geselecteerde regio's".
CALCULATE met KEEPFILTERS
Normaal overschrijft CALCULATE filters. Als je CALCULATE(expr, Jaar=2024) schrijft, verwijdert het alle andere Jaar-filters en zet het Jaar op 2024. KEEPFILTERS zegt: behoud ook de geldende filters.
Omzet Amsterdam & 2024 = CALCULATE(
SUM( Verkopen[Bedrag] ),
KEEPFILTERS( Regio[Regio] = "Amsterdam" ),
KEEPFILTERS( Kalender[Jaar] = 2024 )
)
Met KEEPFILTERS combineer je filters (intersectie) in plaats van ze te vervangen. Dit is essentieel voor logisch complexe measures.
CALCULATE met tijdintelligentie
Een veel voorkomend patroon: vergelijken met vorig jaar. Dit doe je door CALCULATE te combineren met functies als SAMEPERIODLASTYEAR of DATEADD:
Omzet Vorig Jaar = CALCULATE(
SUM( Verkopen[Bedrag] ),
SAMEPERIODLASTYEAR( Kalender[Datum] )
)
SAMEPERIODLASTYEAR verschuift de actieve datumfilters een jaar terug. Als je momenteel naar maart 2025 kijkt, toont dit de omzet voor maart 2024.
Ook handig met DATEADD voor meer flexibiliteit:
Omzet 3 Maanden Geleden = CALCULATE(
SUM( Verkopen[Bedrag] ),
DATEADD( Kalender[Datum], -3, MONTH )
)
DATEADD verschuift de actieve datumfilters 3 maanden naar achteren. Handig voor rolling periods.
CALCULATE vs CALCULATETABLE
CALCULATE evalueert een scalaire expressie (een getal). CALCULATETABLE doet hetzelfde, maar geeft een tabel terug. Dit is handig in combinatie met functies die een tabel verwachten, zoals COUNTROWS of FILTER:
Klanten met Omzet 2024 = COUNTROWS(
CALCULATETABLE(
VALUES( Verkopen[KlantID] ),
Kalender[Jaar] = 2024
)
)
Hier gebruiken we CALCULATETABLE om de lijst unieke klanten op te halen in de context van 2024, en tellen die vervolgens met COUNTROWS. Je gebruikt CALCULATETABLE zelden direct in een visual, maar wel als bouwsteen in complexere measures.
Vergelijking: ALL vs ALLEXCEPT vs ALLSELECTED
| Functie | Wat verwijdert het | Wanneer gebruiken |
|---|---|---|
| ALL | Alle filters op tabel/kolom | % van totaal, grand totals |
| ALLEXCEPT | Alle filters behalve opgegeven kolommen | % per dimensie, subtotals |
| ALLSELECTED | Matrix-filters, behoudt slicers | % van slicer-selectie |
| REMOVEFILTERS | Specifieke kolom-filters | Fine-grained filter control |
Veelgemaakte fouten
Fout 1: Onbewust filters overschrijven op dezelfde kolom
Een veelgemaakte fout: CALCULATE overschrijft bestaande filters op de kolom die je in het filterargument noemt. Als een gebruiker via een slicer al filtert op Status, vervangt CALCULATE dat filter met jouw opgegeven waarde.
Kan onverwacht zijn:
Omzet met Status = CALCULATE(
SUM( Verkopen[Bedrag] ),
Verkopen[Status] = "Compleet"
)
Dit overschrijft een eventueel bestaand filter op de Status-kolom. Wil je het combineren (intersectie) in plaats van vervangen? Gebruik KEEPFILTERS:
Omzet met Status = CALCULATE(
SUM( Verkopen[Bedrag] ),
KEEPFILTERS( Verkopen[Status] = "Compleet" )
)
Fout 2: Context transition niet begrijpen
CALCULATE doet meer dan alleen filters toepassen: het zet de huidige rijcontext om naar een filtercontext. Dit heet context transition. Als je CALCULATE(SUM(...)) in een calculated column schrijft, filtert het automatisch op de huidige rij — waardoor SUM effectief de waarde van die ene rij teruggeeft. Dit is zelden wat je bedoelt en kan tot verwarrende resultaten leiden.
Fout 3: Geneste CALCULATE vereenvoudigen
Geneste CALCULATE-statements worden snel ingewikkeld. Probeer VAR (variable) statements te gebruiken voor helderheid:
Complexe Berekening =
VAR GrandTotal = CALCULATE( SUM( Verkopen[Bedrag] ), ALL( Kalender ) )
VAR MaandHuidige = SUM( Verkopen[Bedrag] )
RETURN DIVIDE( MaandHuidige, GrandTotal )
Dit is veel leesbaarder dan alles genest in één CALCULATE-statement.
Samenvatting
CALCULATE is de sleutel tot geavanceerde DAX. Met CALCULATE stuur je filtercontext aan — filters toepassen, verwijderen, combineren. Leer de basispatronen: ALL voor totalen, ALLEXCEPT voor per-dimensie percentages, KEEPFILTERS om filters te combineren, en tijdintelligentie voor jaar-op-jaar vergelijkingen. En onthoud: VAR-statements maken complexe measures leesbaar.
Gerelateerde artikelen
DAX measures vs. calculated columns → Power BI performance verbeteren → Wat is een semantisch model? →Hoe volwassen is jouw Power BI omgeving?
Doe de gratis scan en ontdek in 2 minuten hoe het staat met je architectuur, governance en meer.
Hulp bij complexe DAX?
YorrData helpt je door je meest ingewikkelde measures uit te werken en je DAX-kennis uit te breiden.
Neem contact op →DAX tools voor je dagelijkse werk
Formatteer je DAX met de DAX Formatter, zoek functies in de Cheat Sheet, of kopieer patronen uit de Measure Patronen bibliotheek.