EN

Wat DAX eigenlijk doet: drie niveaus in een Power BI rapport

🎯 Beginner⏱ 10 minuten

Wat je in deze les leert

In elke Power BI cursus komt op dag 1 dezelfde vraag terug: “waarom werkt deze DAX-formule niet zoals in Excel?” Het antwoord ligt bijna nooit in de formule zelf, het ligt een niveau hoger, in de vraag welk stukje van je rapport hier eigenlijk het werk zou moeten doen.

Die vraag klinkt simpel, maar hij raakt het grootste struikelblok in de Power BI-leercurve: de meeste beginnerspijn zit niet in ingewikkelde functies, ze zit in het door elkaar halen van drie duidelijk gescheiden activiteiten. Zodra je die drie uit elkaar houdt, wordt de meeste DAX-verwarring een stuk overzichtelijker.

Drie activiteiten, drie gereedschappen

Een Power BI rapport bestaat uit drie duidelijk gescheiden activiteiten, elk met een eigen plek, een eigen taal en een eigen verantwoordelijkheid.

Data ophalen en klaarzetten gebeurt in Power Query, met de taal M. Hier haal je data binnen uit bronnen zoals Excel-bestanden, databases of API’s en bereid je ze voor op gebruik: kolommen omzetten, splitsen, opschonen, lege rijen verwijderen, tabellen samenvoegen of opsplitsen. Power Query is de mise-en-place van je rapport: wat je hier goed doet, hoef je later niet in DAX te repareren.

Modelleren gebeurt in het datamodel zelf. Je hangt tabellen aan elkaar via relaties, houdt feiten en dimensies uit elkaar en bouwt een stermodel: één centrale feittabel met dimensietabellen eromheen die elk één aspect van de data beschrijven, zoals klant, product of datum. Een goed model is het fundament waarop je berekeningen later kloppen zonder trukendoos.

Berekenen gebeurt in DAX: sommeren, tellen, tellen onder voorwaarden, verhoudingen berekenen, alles wat er per visual en per filter aan cijfers uit hoort te komen. DAX werkt niet op rijen die je zelf aanwijst, maar op de filtercontext die het rapport op dat moment heeft. Dat is precies de reden dat dezelfde formule in Excel en in DAX anders kan uitpakken: Excel rekent met wat er in de cel staat, DAX rekent met wat het rapport op dat moment ziet.

Checkvraag

Waarom kan dezelfde formule in Excel en in DAX een ander resultaat geven?

Measure en berekende kolom: beide in het derde niveau

Zowel measures als berekende kolommen zijn DAX, maar ze gedragen zich heel anders.

Een berekende kolom wordt berekend zodra je model ververst. De uitkomst wordt per rij opgeslagen in de tabel, als een extra kolom die er altijd al stond. Dat is handig voor een categorielabel dat op rijniveau vaststaat, zoals een klantgroep op basis van omzetbedrag, maar het kost opslagruimte want elke waarde wordt letterlijk bewaard in het model.

Een measure wordt pas berekend op het moment dat iemand naar je rapport kijkt, per visual, per filter en per rij van de matrix. De uitkomst wordt nergens opgeslagen: Power BI rekent hem elke keer vers uit op basis van de huidige context. Dat maakt measures licht en flexibel, maar ook lastiger te doorgronden voor wie gewend is aan cel-gebaseerd denken uit Excel.

Het praktische verschil: een berekende kolom voor iets wat per filter of per visual verandert, geeft altijd hetzelfde getal, ongeacht de context. Een measure volgt die context precies. Kies je voor een berekende kolom waar een measure hoort, dan wordt je model groter zonder dat het slimmer wordt. Dat verschil merk je bij dag 2 direct terug in de modelgrootte.

Eerst het niveau, dan de functie

Bij elke DAX-vraag hoort eerst een niveau-vraag: welke van de drie activiteiten hoort dit op te lossen.

Wil je een tekstkolom opschonen of splitsen, kijk dan of dat werk in Power Query hoort. Je werkt daar met M, niet met DAX, en het resultaat staat netjes klaar voor het model. Klopt een totaal niet in je rapport, kijk dan eerst of alle relaties in je model staan en of de tabelstructuur klopt, voordat je de measure gaat aanpassen. Bouw je een berekende kolom voor iets wat per filter of per visual verandert, bedenk dan of een measure de betere plek is.

Dat klinkt als extra denkwerk, maar het scheelt uiteindelijk tijd. Een DAX-formule debuggen waarvan het probleem eigenlijk in het model of in Power Query zit, is een stuk lastiger dan het probleem op het juiste niveau aanpakken.

Tijd om de niveau-vraag te oefenen. Zes situaties uit de praktijk; klik per kaart het niveau dat dit hoort op te lossen.

Sorteeropdracht

Welk niveau lost dit op?

Wat dit als startpunt geeft

Dag 1 van de DAX-serie is geen syntaxles, het is een orientatieles: drie niveaus, drie gereedschappen, drie verantwoordelijkheden. Met dat frame gaan de vervolgvragen over measures en berekende kolommen, over SUM en COUNTROWS, over filtercontext, een stuk sneller.

📌
Onthoud dit

Bij elke DAX-vraag hoort eerst een niveau-vraag: welke van de drie activiteiten hoort dit op te lossen? Eerst het niveau, dan de functie.

Dit is deel 1 van vijf. Dag 2: wanneer measure, wanneer berekende kolom, en waarom die keuze je model half zo groot of twee keer zo groot maakt.

Wil je de DAX-basis samen doorlopen? Op trainerbjorn.nl vind je meer over de trainingen, of neem direct contact op.

TrainerBjörn is onderdeel van DoGoDa, Doing Good with Data. Gemaakt door Björn, met hulp van AI. Disclaimers.