dax-power-bi-uitleg-voorbeeld

DAX in PowerBI: wat is het en hoe gebruik je het? Incl. voorbeeld

Als je werkt met Power BI kom je vroeg of laat in aanmerking met DAX. DAX (een afkorting van Data Analysis Expressions) is een formuletaal die het mogelijk maakt allerlei berekeningen uit te voeren. Het lijkt op het eerste gezicht een beetje op wat je wellicht gewend bent van Excel-formules, maar het is een andere taal, het werkt anders en het heeft een andere syntax.

De taal wordt niet alleen gebruikt in Power BI, het wordt ook gebruikt in Microsoft Power Pivot, een toevoeging aan Microsoft Excel die er sinds de 2016-versie in zit. De werking is daarbij identiek aan de werking in Power BI.

In deze blog leer je meer over DAX in Power BI. We behandelen:

Voorbeeld datamodel voor DAX in Power BI

In dit voorbeeld maken we gebruik van openbare KNMI-data van meetstations in Nederland. Per meetstation wordt elke dag bijgehouden wat de temperatuur was en hoeveel neerslag er viel.

Voor deze oefening is de dataset onderverdeeld in drie tabellen: metingen, stations en provincie.

De tabel metingen ziet er zo uit:

stationdatumtemperatuurneerslagjaarmaand
21001-01-006.61.220001
35625-01-000020001
..................

We weten niet waar dit station staat, we hebben alleen een nummer van het station. Gelukkig hebben we per station wel meer informatie in de tabel stations:

stationplaats
391Arcen
......

In de tabel provincie staat ook per plaats aangegeven in welke provincie deze plaats ligt:

plaatsprovincie
ArcenLimburg
......

Al deze informatie had ook in één platte tabel kunnen staan, elke rij in de tabel metingen had dan ook een kolom met 'plaats' en 'provincie' gehad. Dit is echter niet efficiënt wanneer je met veel data werkt: voor elk meetpunt zou dan apart worden aangegeven wat de plaatsnaam en provincie is, waardoor je onnodig veel data inlaadt.

Het datamodel ziet er dan als volgt uit:

dax-power-bi-voorbeeld-datamodel

Per tabel is gedefinieërd dat er een relatie is op basis van de kolommen die in beide tabellen voorkomen. De eerste relatie is op basis van de kolom 'station' in de tabel 'metingen' en 'stations', de tweede relatie is op basis van de kolom 'plaats' in de tabel 'stations' en 'provincies'.

Berekende kolom toevoegen met DAX in Power BI

Vervolgens maken we een kolom aan met een berekende kolom:

dax-power-bi-voorbeeld-dax-formule

De formule die je bovenin ziet is een DAX-formule:

gemiddelde temperatuur (°C) = CALCULATE(AVERAGE(metingen[temperatuur]))

We bekijken term voor term wat hier staat:

  • Gemiddelde temperatuur (°C): de naam van de aangemaakte kolom
  • CALCULATE: een DAX-functie (een zogenaamde filterfunctie).
  • AVERAGE: hiermee bereken je het gemiddelde over de kolom temperatuur in de tabel metingen.

Als je deze formule ziet kan je je afvragen waarom de functie CALCULATE nodig is. Dat heeft te maken met de zogenaamde filtercontext, een begrip dat vaker terugkomt in DAX-berekeningen.

Elke DAX-functie wordt uitgevoerd in een bepaalde filtercontext, een filtercontext is een selectie van de rijen in alle tabellen die relevant zijn. Standaard wordt een berekening uitgevoerd op alle rijen in alle tabellen, door gebruik te maken van CALCULATE wordt de filtercontext gewijzigd van alle rijen naar alleen de relevante rijen. De relevante rijen worden in dit geval gedefinieërd door de relatie op basis van de kolom 'station': alleen rijen waarin de waarde voor 'station' in de tabellen 'metingen' en 'stations' gelijk zijn aan elkaar worden meegenomen.

Een measure definiëren met DAX formule in Power BI

Deze berekende kolom is nu 'hard' toegevoegd aan de tabel 'stations'. Maar wat nou als je de gemiddelde temperatuur per plaats of provincie wilt weten? Voor een provincie zou je dezelfde berekening kunnen toevoegen aan de kolom 'provincies', maar wanneer je bijvoorbeeld wilt groeperen op jaartal (kolom 'jaar') wordt dit al lastiger.

In zulke gevallen is een measure een betere oplossing. Dit lijkt qua werking erg op een calculated column, maar het is geen vaste kolom: het is een waarde die dynamisch berekend wordt afhankelijk van de filtercontext. De knop 'new measure' zit naast 'new column'.

dax-power-bi-new-measure

We gebruiken dezelfde formulule:

gemiddelde temperatuur (°C) = CALCULATE(AVERAGE(metingen[temperatuur]))

We maken een grafiek met op de x-as achtereenvolgens 'provincie', 'plaats' en 'jaar', je ziet dat de gemiddelde temperatuur elke keer anders wordt berekend.

measure-verschillende-groeperingen-dax-power-bi

Conclusie over DAX in PowerBI

We hebben een voorbeeld waarin middels DAX een berekening wordt uitgevoerd over een dataset die bestaat uit meerdere gerelateerde tabellen. Dit is slechts één voorbeeld, er zijn nog veel meer berekeningen mogelijk.

Indien je Excel gewend bent, zal je waarschijnlijk moeten wennen aan het feit dat berekeningen worden gedaan over kolommen binnen een filtercontext en niet over expliciet gedefinieërde cellen. Dit is in eerste instantie wellicht wat complexer, maar zodra je de logica doorhebt en datamodellen goed opzet kan je relatief eenvoudig dynamisch de juiste berekeningen maken en visualiseren.

Een goed begrip van DAX helpt je daarom om een betere data-analist te worden. In onze Power BI training leer je hier alles over.

by: