Mijn notitiesPraktische Power BI tips
DAX filtercontext: de measure kent geen rij

De measure kent geen rij. Dat is de kortste manier om het misverstand samen te vatten waar bijna elke DAX-starter op vastloopt: de gedachte dat een measure “weet” in welke visual, boven welke rij en onder welke slicer hij in een rapport landt. Dat weet hij niet.
Een measure ziet de tabel die overblijft nadat de filtercontext is toegepast, en op die overgebleven tabel voert hij zijn eigen expressie uit. Filtercontext is het geheel van filters dat geldt op het moment dat de DAX-expressie evalueert. Die filters komen van buitenaf, van de plek waar de measure landt, en de measure bepaalt ze niet zelf.
Om dat concreet te maken gebruik ik één measure als anker: [Aantal orders] := COUNTROWS(Orders). Dezelfde expressie, drie keer op een andere plek gezet.
De visual bepaalt welke tabel de measure ziet
Zet [Aantal orders] in een kaartvisual en je krijgt het totale aantal orders in het model. Er staan geen velden op assen, geen dimensies op rijen; de filtercontext is onbeperkt. De measure ziet alle orders en telt ze.
Zet diezelfde measure in een tabel met Region[Region] op de rijen, en per rij evalueert de measure opnieuw, deze keer voor de deelverzameling die de regionaam afbakent. Noord krijgt de orders uit Noord, Zuid krijgt de orders uit Zuid. De measure zelf is geen komma veranderd, alleen de tabel die de visual overlaat is per rij anders. Dat is filtercontext in zijn meest directe vorm: de visual bepaalt welke tabel de measure te zien krijgt voordat hij begint te tellen.
De slicer voegt een extra filter toe
Voeg een slicer op Date[Year] toe aan de rapportpagina en kies 2025. Dezelfde [Aantal orders] verandert opnieuw, in elke visual op de pagina die op datum kan filteren. De measure weet nog steeds niets van “2025”; de filtercontext op het moment van evalueren bevat nu simpelweg een extra filter, Date[Year] = 2025, bovenop wat de visual zelf al oplegt. Kaart, tabel, matrix: allemaal krijgen ze een kleinere brontabel te zien, en de measure telt wat er nog staat.
Dit is ook waarom een slicerwijziging soms verrassend uitpakt: als één visual niet reageert, kan dat betekenen dat er een relatie mist in het model, of dat de visual een filter op een andere kolom heeft die de slicer overschrijft. Filtercontext is altijd een samenstelling van meerdere lagen.
De rij in een matrix geeft elke cel zijn eigen context
Leg dezelfde measure in een matrix met Region[Region] op de rij en Date[Year] op de kolom. Elke cel evalueert de measure opnieuw met een eigen filtercontext, opgebouwd uit de rij, de kolom, de slicer en de pagina samen. De cel Zuid × 2025 heeft filtercontext {Region = Zuid, Year = 2025}, en COUNTROWS(Orders) ziet daar alleen de orders die aan beide filters voldoen. Zo krijgt dezelfde uitdrukking per cel een andere uitkomst, zonder dat er iets aan de measure is veranderd.
Dit is ook de reden waarom totaalrijen in een matrix soms verrassende getallen opleveren: de totaalcel evalueert de measure zonder de rijfilter, zodat je het kolomtotaal ziet in plaats van de optelling van de afzonderlijke rijen, wat bij niet-additieve measures een ander getal oplevert dan je verwacht.
Waar je in Power BI Desktop kijkt bij een vreemd getal
Zodra dit besef er is, verschuift de eerste vraag bij een verrassend getal in een visual van “wat doet mijn measure?” naar “welke filters staan hier eigenlijk op?”. In Power BI Desktop kun je die vraag letterlijk beantwoorden.
Klik op de visual. Open het paneel “Filters on this visual” en bekijk welke filters de visual zelf oplegt. Kijk daarna naar “Filters on this page” voor pagina-filters en slicerselecties. Als die twee panelen samen de brontabel verklaren die je measure te zien krijgt, klopt het getal. Als dat niet zo is, zoek je verder, naar cross-filterinvloed vanuit een andere visual op de pagina.
Vier stappen die bij elke troubleshoot-sessie helpen: controleer de visual-filters, controleer de pagina-filters, controleer de slicers, en controleer of een andere visual op de pagina via cross-filtering meefiltert.
CALCULATE en de volgende stap
CALCULATE is de functie waarmee je de filtercontext van binnenuit aanpast: filters toevoegen, weghalen of vervangen, zonder dat je de visual of de slicer aanraakt. Dat is de volgende stap na filtercontext begrijpen, en de kern van de serie die hierna begint: FILTER, ALL, REMOVEFILTERS, ALLEXCEPT en ALLSELECTED.
Wil je de DAX basis-serie samen doorlopen of heb je een vraag over filtercontext in jouw rapport? Kijk op trainerbjorn.nl of neem contact op.