EN

Mijn notitiesPraktische Power BI tips

REMOVEFILTERS en ALL: welke pak je wanneer?

Kaart bij de notitie: REMOVEFILTERS en ALL: welke pak je wanneer?

Gisteren stond FILTER centraal, de functie waarmee je slicergedrag teruggeeft aan je gebruiker. Vandaag doen we het omgekeerde: filters juist uitzetten waar je ze even niet wilt.

En op die plek duiken in codevoorbeelden twee functies naast elkaar op, REMOVEFILTERS en ALL. Ze lijken hetzelfde te doen. Binnen CALCULATE doen ze dat ook, maar ALL heeft nog een tweede leven als tabelfunctie, en daar zit de keuze.

Wat REMOVEFILTERS doet

REMOVEFILTERS is een dedicated modifier voor CALCULATE. Hij bestaat alleen binnen CALCULATE of CALCULATETABLE, en nergens anders. Je geeft hem een tabel, een kolom of een set kolommen mee, en wat hij doet, is het filter op precies dat ding wissen voordat de measure wordt uitgerekend.

CALCULATE(
    SUM(Sales[Bedrag]),
    REMOVEFILTERS(Product[Kleur])
)

REMOVEFILTERS is een instructie aan CALCULATE om dat ene filter weg te halen voordat de berekening begint, en zelf geeft hij niets terug, ook geen tabel. Één taak, geen dubbelrol.

Waar ALL een extra rol heeft

ALL heeft twee gezichten. Zet je ALL als filterargument in CALCULATE, dan doet hij precies hetzelfde als REMOVEFILTERS: het filter op die kolom of tabel wissen. Maar schrijf je ALL buiten CALCULATE als tabeluitdrukking, dan geeft hij álle rijen van de tabel terug met filters genegeerd:

SUMX(
    ALL(Product),
    Product[Prijs] * Product[Voorraad]
)

In dit voorbeeld geeft ALL SUMX een volledige lijst van producten om rij voor rij over te lopen, met alle filters genegeerd, en wist hij zelf niets. REMOVEFILTERS kan dit niet, want hij is geen tabel en geeft niets terug buiten CALCULATE. Dat tweede gebruik van ALL heb je later in de serie nodig, wanneer je een tabel in je berekening nodig hebt in plaats van een filter-instructie.

Wanneer ze hetzelfde zijn

Binnen CALCULATE als filterargument zijn ALL(Product[Kleur]) en REMOVEFILTERS(Product[Kleur]) letterlijk hetzelfde: allebei wissen ze het filter op de kolom Kleur, met dezelfde uitkomst tot op het getal en dezelfde performance. Je hoeft de een niet boven de ander te kiezen op basis van snelheid of nauwkeurigheid.

Het verschil zit in de code die overblijft. Als een collega ALL(Product[Kleur]) in jouw measure ziet staan, moet hij even checken welke rol ALL hier speelt: filter-wisser of tabelfunctie? Als hij REMOVEFILTERS(Product[Kleur]) ziet staan, weet hij meteen dat hier een filter wordt uitgezet, punt. REMOVEFILTERS draagt zijn bedoeling al in zijn naam, ALL niet.

De regel voor vandaag

Voor de filter-wisrol binnen CALCULATE is REMOVEFILTERS de duidelijkere keuze, precies omdat hij die dubbelrol niet heeft. Wil je een filter uitzetten, gebruik REMOVEFILTERS. Wil je een tabel teruggeven met alle rijen, gebruik ALL, en dat gebruik komt later in de serie.

Er is ook een praktische kwestie: wis alleen die ene kolom die je los wilt breken. REMOVEFILTERS(Sales) op de hele feittabel wist óók je jaar-slicer en je regio-selectie, en dat is bijna nooit wat je bedoelt:

// Goed: wist alleen het kleurfilter, jaar-slicer blijft staan
CALCULATE(
    SUM(Sales[Bedrag]),
    REMOVEFILTERS(Product[Kleur])
)

// Pas op: wist alle filters op Sales, inclusief de jaar-slicer van de gebruiker
CALCULATE(
    SUM(Sales[Bedrag]),
    REMOVEFILTERS(Sales)
)

Gebruik REMOVEFILTERS(Product[Kleur]) als je alleen het kleurfilter wilt uitzetten. De jaar-slicer van je gebruiker blijft dan gewoon staan.

Morgen: percentage van totaal

Nu je weet hoe je een filter wist en voor welke kolom precies, gaan we morgen door met het eerste echte praktijkgeval, percentage van totaal. De noemer van die berekening moet op één product uitrekenen en tegelijk de jaar-slicer van de gebruiker intact laten. Dat lukt alleen als je precies de juiste kolom wist, niet meer dan dat.

Dit is dag 3 van 5 in de DAX filter-burst. Dag 2 was FILTER als ontsnappingsroute. Dag 4 brengt de eerste meting waarvoor je een filterwisser écht nodig hebt, en de hele serie staat samengevat in de spiekbrief.

Meer leren over Power BI en DAX? Op trainerbjorn.nl vind je trainingen en een gratis leerpad voor de PL-300 certificering.

Alle notities in ‘Praktische Power BI tips’ →