Power BI Studio
Terug naar alle artikelen

Time intelligence in DAX: 12 measures die elke finance dashboard nodig heeft

Jan Willem den Hollander
Jan Willem den Hollander

Power BI architect, LSS Black Belt. 15 jaar ervaring in data & business intelligence.

Time intelligence in DAX: 12 measures die elke finance dashboard nodig heeft

Wat je nodig hebt voor deze implementatie

Aan het einde van dit artikel heb je een complete set van 12 time intelligence measures die in elk finance dashboard thuishoren. Je implementeert elk van deze measures stap voor stap, met concrete DAX-code en uitleg over wanneer je welke gebruikt.

Je hebt nodig: een Power BI Desktop installatie, een dataset met een datumtabel (Date table) die gerelateerd is aan je fact-tabellen, en basiskennis van DAX. Je datamodel moet een juist ingerichte datumtabel hebben — zonder continuous date range werken time intelligence functies niet correct.

Stap 1: Controleer je datumtabel setup

Voordat je time intelligence measures gaat bouwen, controleer je datumtabel. Ga naar Model view in Power BI Desktop. Je datumtabel moet:

  • Een continuous range hebben zonder gaten (elke datum tussen min en max moet aanwezig zijn)
  • Gemarkeerd zijn als date table (Table tools > Mark as date table)
  • Een relatie hebben met je fact-tabellen via een datum kolom
  • Standard datumkolommen bevatten: Year, Quarter, Month, Week

Test dit door een simpele measure te maken:

Test Dates = 
COUNT('Date'[Date])

Als deze measure geen waarden toont in je visuals, is je datumtabel niet correct ingesteld. Los dit eerst op voordat je verdergaat.

Stap 2: Implementeer basis revenue measures

Begin met drie fundamentele revenue measures. Deze vormen de basis voor alle verdere time intelligence berekeningen.

Current period revenue

Ga naar Modeling tab > New measure. Voer in:

Revenue = 
SUM('Sales'[Amount])

Deze measure toont altijd de revenue voor de geselecteerde periode in je filter context.

Previous year same period

Revenue PY = 
CALCULATE(
    [Revenue],
    SAMEPERIODLASTYEAR('Date'[Date])
)

SAMEPERIODLASTYEAR verschuift automatisch je filter context naar dezelfde periode vorig jaar. Voor januari 2024 krijg je januari 2023, voor Q1 2024 krijg je Q1 2023.

Year-to-date revenue

Revenue YTD = 
CALCULATE(
    [Revenue],
    DATESYTD('Date'[Date])
)

DATESYTD berekent automatisch van 1 januari tot de geselecteerde datum. In maart toont het jan+feb+maart, in december het hele jaar.

Stap 3: Voeg growth measures toe

Nu implementeer je measures die growth tonen — essentieel voor elke finance dashboard.

Year-over-year growth percentage

Revenue YoY Growth% = 
VAR CurrentYear = [Revenue]
VAR PreviousYear = [Revenue PY]
RETURN
    IF(
        NOT ISBLANK(PreviousYear) && PreviousYear <> 0,
        DIVIDE(CurrentYear - PreviousYear, PreviousYear),
        BLANK()
    )

Deze measure berekent (Current - Previous) / Previous en toont BLANK() als er geen vorig jaar data is. Format deze measure als percentage in de formatting pane.

Year-over-year growth absolute

Revenue YoY Growth = 
VAR CurrentYear = [Revenue]
VAR PreviousYear = [Revenue PY]
RETURN
    IF(
        NOT ISBLANK(PreviousYear),
        CurrentYear - PreviousYear,
        BLANK()
    )

Deze toont de absolute groei in dezelfde currency als je revenue data.

Stap 4: Implementeer month-to-date en quarter-to-date

Voor operationele finance dashboards zijn MTD en QTD measures onmisbaar.

Month-to-date revenue

Revenue MTD = 
CALCULATE(
    [Revenue],
    DATESMTD('Date'[Date])
)

Quarter-to-date revenue

Revenue QTD = 
CALCULATE(
    [Revenue],
    DATESQTD('Date'[Date])
)

DATESMTD berekent van de eerste dag van de maand tot de huidige datum. DATESQTD doet hetzelfde voor kwartalen (1 jan/apr/jul/okt tot huidige datum).

Stap 5: Voeg prior period vergelijkingen toe

Voor trending en seasonality analysis heb je prior period measures nodig.

Previous month revenue

Revenue PM = 
CALCULATE(
    [Revenue],
    DATEADD('Date'[Date], -1, MONTH)
)

DATEADD verschuift je datum filter met een gespecificeerd interval. -1 MONTH geeft de vorige maand, -1 YEAR geeft vorig jaar, -7 DAY geeft vorige week.

Previous quarter revenue

Revenue PQ = 
CALCULATE(
    [Revenue],
    DATEADD('Date'[Date], -1, QUARTER)
)

Month-over-month growth

Revenue MoM Growth% = 
VAR CurrentMonth = [Revenue]
VAR PreviousMonth = [Revenue PM]
RETURN
    IF(
        NOT ISBLANK(PreviousMonth) && PreviousMonth <> 0,
        DIVIDE(CurrentMonth - PreviousMonth, PreviousMonth),
        BLANK()
    )

Stap 6: Implementeer rolling averages

Rolling averages gladden seizoensschommelingen en tonen trends duidelijker.

3-month rolling average

Revenue 3M Rolling Avg = 
VAR CurrentDate = MAX('Date'[Date])
VAR ThreeMonthsBack = DATEADD(CurrentDate, -2, MONTH)
RETURN
    CALCULATE(
        AVERAGEX(
            DATESBETWEEN(
                'Date'[Date],
                ThreeMonthsBack,
                CurrentDate
            ),
            [Revenue]
        )
    )

Deze measure berekent het gemiddelde van de laatste 3 maanden. DATESBETWEEN definieert het periode window, AVERAGEX berekent het gemiddelde over die periode.

12-month rolling average

Revenue 12M Rolling Avg = 
VAR CurrentDate = MAX('Date'[Date])
VAR TwelveMonthsBack = DATEADD(CurrentDate, -11, MONTH)
RETURN
    CALCULATE(
        AVERAGEX(
            DATESBETWEEN(
                'Date'[Date],
                TwelveMonthsBack,
                CurrentDate
            ),
            [Revenue]
        )
    )

Stap 7: Voeg cumulative measures toe

Cumulative measures tonen opgebouwde waarden over tijd — cruciaal voor budget tracking.

Cumulative revenue (running total)

Revenue Cumulative = 
VAR MaxDate = MAX('Date'[Date])
RETURN
    CALCULATE(
        [Revenue],
        'Date'[Date] <= MaxDate,
        ALLSELECTED('Date')
    )

ALLSELECTED zorgt ervoor dat de measure alle datums in je visual gebruikt, niet alleen de huidige row context. Dit bouwt een running total op.

Stap 8: Test je measures in een dashboard

Maak een test-dashboard om je measures te valideren:

  1. Voeg een Table visual toe met 'Date'[MonthYear] en alle 12 measures
  2. Filter op de laatste 24 maanden
  3. Controleer of PY measures data tonen (als niet: je hebt niet genoeg historische data)
  4. Controleer of YTD in december gelijk is aan totaal jaar revenue
  5. Controleer of MTD op de laatste dag van de maand gelijk is aan hele maand revenue

Screenshot: Table visual met alle measures per maand, gefilterd op laatste 24 maanden

Als een measure BLANK() toont waar je data verwacht, controleer je datumtabel relaties en continuous date range.

Veelgemaakte fouten

De meest voorkomende fout: een datumtabel die niet continuous is. Time intelligence functies zoals SAMEPERIODLASTYEAR werken alleen met een complete datum range zonder gaten. Als je 1 januari 2023 mist, werkt SAMEPERIODLASTYEAR niet voor 1 januari 2024.

Tweede fout: vergeten om BLANK() te gebruiken in conditional logic. Zonder BLANK() tonen je measures 0 in plaats van leeg, wat verkeerde totalen geeft in visuals. Gebruik altijd BLANK() voor missing data scenarios.

Derde fout: DATEADD gebruiken in plaats van SAMEPERIODLASTYEAR voor year-over-year vergelijkingen. DATEADD(-1, YEAR) werkt niet correct met fiscal years of partial periods. Gebruik SAMEPERIODLASTYEAR voor year-over-year, DATEADD voor andere intervals.

Vierde fout: measures formatteren als tekst in plaats van getal/percentage. Revenue measures moeten currency formatting hebben, growth measures percentage formatting. Dit stel je in via de Modeling tab > Format.

Volgende stappen

Start met implementatie van deze 12 measures in je eigen datamodel. Test eerst je datumtabel setup met de basis revenue measure, implementeer dan stap voor stap de andere measures. Voor complexere scenarios zoals fiscal years of custom periods, optimaliseer je DAX performance door measures te combineren en variabelen te hergebruiken. Voor geautomatiseerde implementatie van best practices, gebruik de Power BI Report Auditor om je datamodel structure te valideren.