DataPartner365

Jouw partner voor datagedreven groei en inzichten

DAX Functions Complete Guide: Alle Formules voor Power BI

Laatst bijgewerkt: 20 januari 2025
Leestijd: 15 minuten
DAX, Power BI, Data Analysis, Formules, Functions, Business Intelligence

Complete handleiding voor Data Analysis Expressions (DAX) in Power BI. Leer alle essentiële formules voor data-analyse, aggregaties, tijd-intelligentie en meer met praktische voorbeelden.

Zoek je Power BI DAX experts?

Vind gespecialiseerde BI Consultants voor complexe Power BI implementaties en DAX-ontwikkeling

1. Wat is Data Analysis Expressions (DAX)?

DAX (Data Analysis Expressions) is een formule- en queryscripttaal die wordt gebruikt in Power BI, Analysis Services en Power Pivot in Excel. Het is speciaal ontworpen voor data-analyse en werkt met relationele data en dynamische aggregaties.

Eenvoudige uitleg

Denk aan DAX als Excel-formules op steroïden. Waar Excel werkt met cellen, werkt DAX met kolommen en tabellen. Het kan complexe berekeningen uitvoeren over hele datasets, niet alleen individuele cellen.

Waarom DAX leren?

Dynamische berekeningen

Bereken totalen die automatisch aanpassen bij filters en slicers

Tijd-intelligentie

Vergelijk periodes (YTD, QoQ, YoY) eenvoudig

Geavanceerde filtering

Complexe voorwaarden voor data-analyse

Prestatie optimalisatie

Snellere rapporten met efficiënte formules

2. Basis DAX Functions

CALCULATE Filter Geavanceerd

De belangrijkste DAX function! Past filters toe op een berekening. Dit is je Zwitsers zakmes in DAX.

CALCULATE(<expression>, <filter1>, <filter2>, ...)
-- Totale omzet voor Nederland NL Omzet = CALCULATE( SUM(Verkoop[Omzet]), Klanten[Land] = "Nederland" ) -- Omzet vorig jaar Omzet Vorig Jaar = CALCULATE( SUM(Verkoop[Omzet]), SAMEPERIODLASTYEAR(Datum[Datum]) )
IF Logisch Beginners

Voert voorwaardelijke berekeningen uit (vergelijkbaar met Excel IF).

IF(<condition>, <value_if_true>, <value_if_false>)
-- Categoriseer omzet als hoog/laag Omzet Categorie = IF( [Totale Omzet] > 100000, "Hoog", "Laag" ) -- Bonus berekenen Bonus = IF( [Omzet] > 50000, [Omzet] * 0.1, -- 10% bonus [Omzet] * 0.05 -- 5% bonus )
SWITCH Logisch Beginners

Meerdere voorwaarden in één formule (beter dan geneste IFs).

SWITCH(<expression>, <value>, <result>, ..., <else>)
-- Maand namen naar getallen Maand Nr = SWITCH( [Maand], "Januari", 1, "Februari", 2, "Maart", 3, -- etc... 0 -- default ) -- Klant categorie Klant Type = SWITCH( TRUE(), [Aankopen] > 50, "VIP", [Aankopen] > 20, "Loyaal", [Aankopen] > 5, "Regulier", "Nieuw" )

Team nodig voor Power BI DAX ontwikkeling?

Vind ervaren BI Consultants gespecialiseerd in DAX en complexe berekeningen

3. Aggregatie Functions

Function Beschrijving Voorbeeld Niveau
SUM Tel waarden op Totale omzet berekenen Beginner
AVERAGE Gemiddelde berekenen Gemiddelde orderwaarde Beginner
MIN / MAX Minimum/maximum vinden Hoogste/laagste omzet Beginner
COUNT / COUNTA Aantal rijen tellen Aantal orders/klanten Beginner
DISTINCTCOUNT Unieke waarden tellen Aantal unieke klanten Beginner
SUMX / AVERAGEX Iterator Geavanceerd

Iterators werken rij voor rij en zijn krachtiger dan normale aggregaties.

SUMX(<table>, <expression>)
-- Totale marge berekenen Totale Marge = SUMX( Verkoop, Verkoop[Aantal] * (Verkoop[Prijs] - Verkoop[Kostprijs]) ) -- Gemiddelde orderwaarde per klant Gem Orderwaarde = AVERAGEX( Klanten, [Totale Omzet Per Klant] )

4. Tijd-intelligentie Functions

Tijd-intelligentie in praktijk

Deze functions maken vergelijkingen tussen periodes eenvoudig:

  • YoY (Year-over-Year): Vergelijk met vorig jaar
  • QoQ (Quarter-over-Quarter): Vergelijk met vorig kwartaal
  • MoM (Month-over-Month): Vergelijk met vorige maand
  • YTD (Year-to-Date): Cumulatief dit jaar

DATESYTD

Berekent jaar-tot-datum waarden

Omzet YTD = TOTALYTD(SUM(Verkoop[Omzet]), Datum[Datum])

SAMEPERIODLASTYEAR

Vergelijk metzelfde periode vorig jaar

Vorig Jaar = CALCULATE([Omzet], SAMEPERIODLASTYEAR(Datum[Datum]))

DATESQTD / DATESMTD

Kwartaal/maand-tot-datum

Omzet QTD = TOTALQTD(SUM(Verkoop[Omzet]), Datum[Datum])

PREVIOUSMONTH / DAY

Vorige periode selecteren

Vorige Maand = CALCULATE([Omzet], PREVIOUSMONTH(Datum[Datum]))

5. Filter Functions (De kracht van DAX)

FILTER - Dynamische filtering

Filtert een tabel op basis van een voorwaarde. Werkt altijd binnen CALCULATE.

-- Omzet van klanten met meer dan 10 orders
Hoog Volume Omzet = CALCULATE(
    SUM(Verkoop[Omzet]),
    FILTER(
        Klanten,
        [Aantal Orders] > 10
    )
)

-- Top 10 klanten omzet
Top 10 Omzet = CALCULATE(
    SUM(Verkoop[Omzet]),
    TOPN(10, Klanten, [Totale Omzet])
)

ALL - Filters verwijderen

Verwijdert filters van een kolom of tabel. Cruciaal voor totaalberekeningen.

-- Totale omzet ongeacht filters
Totaal Alle Jaren = CALCULATE(
    SUM(Verkoop[Omzet]),
    ALL(Datum)
)

-- Percentage van totaal
Percentage van Totaal = DIVIDE(
    [Huidige Omzet],
    CALCULATE([Huidige Omzet], ALLSELECTED())
)

RELATED / RELATEDTABLE - Relaties gebruiken

Haalt gerelateerde data uit andere tabellen op.

-- Productcategorie toevoegen aan verkoopregel
Categorie = RELATED(Producten[Categorie])

-- Aantal orders per klant (met gerelateerde tabel)
Orders Per Klant = COUNTROWS(
    RELATEDTABLE(Orders)
)

Klaar voor complexe DAX ontwikkeling?

Vind de juiste experts of plaats je BI Consultant vacature

6. Iterator Functions (X-functions)

Wat zijn iterators?

Iterators (functions die eindigen op X) werken rij-voor-rij door een tabel. Ze zijn krachtiger maar kunnen langzamer zijn dan aggregaties. Gebruik ze wanneer je berekeningen per rij nodig hebt.

SUMX

Rij-voor-rij optellen

Omzet = SUMX(Verkoop, Verkoop[Aantal] * Verkoop[Prijs])

AVERAGEX

Gemiddelde per rij berekenen

Gem. Order = AVERAGEX(Orders, Orders[Totaal])

COUNTX

Voorwaardelijk tellen

Grote Orders = COUNTX(Orders, IF(Orders[Totaal] > 1000, 1, BLANK()))

MAXX / MINX

Maximum/minimum met voorwaarden

Hoogste Order = MAXX(Klanten, [Hoogste Order Waarde])

7. Praktijkvoorbeelden: Reële DAX-scenario's

Voorbeeld 1: Running Total (Cumulatief totaal)

-- Cumulatieve omzet per datum
Cumulatieve Omzet = 
VAR CurrentDate = MAX(Datum[Datum])
RETURN
CALCULATE(
    SUM(Verkoop[Omzet]),
    FILTER(
        ALL(Datum),
        Datum[Datum] <= CurrentDate
    )
)

Voorbeeld 2: YoY Growth (Jaar-op-jaar groei)

-- Omzet groei percentage YoY
Omzet Vorig Jaar = 
CALCULATE(
    [Totale Omzet],
    SAMEPERIODLASTYEAR(Datum[Datum])
)

YoY Groei % = 
DIVIDE(
    [Totale Omzet] - [Omzet Vorig Jaar],
    [Omzet Vorig Jaar]
)

Voorbeeld 3: Top N Analysis (Top 10 analyse)

-- Is huidige klant in top 10?
Is Top 10 Klant = 
VAR Top10Klanten = 
    TOPN(
        10,
        VALUES(Klanten[KlantID]),
        [Totale Omzet]
    )
RETURN
IF(
    SELECTEDVALUE(Klanten[KlantID]) IN Top10Klanten,
    "Top 10",
    "Overig"
)

-- Omzet van top 10 klanten
Top 10 Omzet = 
CALCULATE(
    [Totale Omzet],
    FILTER(
        Klanten,
        [Is Top 10 Klant] = "Top 10"
    )
)

8. DAX Best Practices en Performance

Top 10 DAX Best Practices

  1. Gebruik variabelen (VAR) voor complexe berekeningen
  2. Vermijd geneste CALCULATE calls waar mogelijk
  3. Gebruik DIVIDE i.p.v. / operator voor deling (betere error handling)
  4. Filter op kolommen, niet op calculated columns voor betere performance
  5. Gebruik SUMMARIZE spaarzaam - kan traag zijn
  6. Test DAX met Performance Analyzer in Power BI Desktop
  7. Documenteer complexe formules met comments
  8. Gebruik ALLSELECTED i.p.v. ALL voor "percentage van totaal"
  9. Vermijd iterators op grote tabellen als aggregatie kan
  10. Gebruik tijd-intelligentie functions i.p.v. handmatige datumlogica

Performance Tips

Wat te doen Waarom Impact
Gebruik variabelen Berekening wordt maar 1x uitgevoerd Tot 50% sneller
Vermijd calculated columns in filters Calculated columns hebben minder optimalisatie Tot 70% sneller
Gebruik DIVIDE() Voorkomt delen door nul errors Stabieler, zelfde snelheid
Minimaliseer iterator gebruik Iterators zijn rij-voor-rij trager Tot 90% sneller bij aggregaties

Veelgemaakte DAX fouten

  • ❌ CIRCULAR DEPENDENCY: Berekening verwijst naar zichzelf
  • ❌ MISSING FILTER CONTEXT: CALCULATE vergeten te gebruiken
  • ❌ IMPLICIT MEASURE: Aggregatie direct in visual gebruiken
  • ❌ BLANK() vs. 0: Verkeerde behandeling van lege waarden
  • ❌ RELATIONSHIP ERRORS: Verkeerde relaties gebruiken

Word DAX expert vandaag!

Vind gespecialiseerde Power BI Consultants of plaats je vacature