Time intelligence
Wat is time intelligence?
Time intelligence is de groep DAX-functies die berekeningen over datums verschuift en vergelijkt. Ermee beantwoord je de vragen die elk bedrijf stelt: hoe staan we ervoor year-to-date, hoe verhoudt deze maand zich tot dezelfde maand vorig jaar, hoe ziet een voortschrijdend gemiddelde over drie maanden eruit.
In plaats van het datumrekenwerk met de hand te bouwen, schrijf je een measure die zegt 'hetzelfde, maar over deze periode', en Power BI zoekt uit welke datums bij die periode horen op basis van de filtercontext van de visual.
De functies die je het vaakst nodig hebt
Year-to-date en lopende totalen.
TOTALYTDenDATESYTDstapelen een waarde op vanaf het begin van het jaar tot de datum in context. Er zijn bijpassende kwartaal- en maandvarianten.Vergelijken met een vorige periode.
SAMEPERIODLASTYEARen het algemenereDATEADDschuiven de huidige datums een jaar, een kwartaal, een maand of een dag terug, zodat je deze periode naast de vorige kan zetten.Voortschrijdende vensters.
DATESINPERIODenDATESBETWEENgeven een reeks datums terug, die je aanCALCULATEvoedt om een voortschrijdend gemiddelde over 7 dagen of 3 maanden te bouwen.Begin- en eindsaldo's. Functies als
CLOSINGBALANCEMONTHnemen de waarde op de laatste datum van een periode, wat past bij voorraadstanden en rekeningsaldo's die je niet over de dagen heen mag optellen.
Een korte year-over-year-measure toont de vorm. Ze hergebruikt een bestaande measure, gerekend over de datums van vorig jaar.
Omzet VJ = CALCULATE ( [Totale omzet], SAMEPERIODLASTYEAR ( 'Datum'[Datum] ) )Merk op dat de functie een kolom uit een aparte Datum-tabel krijgt, niet uit de verkooptabel. Dat is geen stijlkeuze, het is wat time intelligence laat werken.
Waarom een echte datumtabel nodig is
Bijna elke time intelligence-functie gaat uit van een echte datumtabel achter je model: een rij per dag, geen gaten, unieke datums, op dagniveau. De richtlijn van Microsoft is duidelijk dat je deze functies nooit op een datumkolom binnen een feitentabel mag richten, en dat de klassieke functies een fout geven als er datums ontbreken tussen de eerste en de laatste.
De reden is mechanisch. Een functie als DATESYTD moet een aaneengesloten reeks datums aflopen om te weten welke tot het jaar tot nu toe horen. Ontbreekt januari tot maart in je kalender, dan heeft year-to-date gaten en gaan de getallen stilletjes fout. Een aparte datumtabel geeft je bovendien kolommen voor jaar, kwartaal, maand en weekdag om op te filteren en te groeperen.
Je kan een datumtabel bouwen in Power Query, of er een genereren in DAX met CALENDAR of CALENDARAUTO. Gebruik je de klassieke time intelligence-functies, dan moet je Power BI ook vertellen welke tabel het is, via Markeren als datumtabel, zodat de engine ze als de kalender van het model behandelt.
Klassieke versus kalendergebaseerde time intelligence
Jarenlang was er een aanpak, nu klassieke time intelligence genoemd: markeer een datumtabel en gebruik dan functies als SAMEPERIODLASTYEAR op de datumkolom ervan. Ze is snel op te zetten en past bij de gregoriaanse en verschoven-gregoriaanse kalender, zoals een boekjaar dat op 1 juli start. Ze gaat minder goed om met berekeningen op weekbasis en heeft die ononderbroken datumreeks nodig.
Power BI voegde sindsdien een nieuwere, kalendergebaseerde aanpak toe, uitgebracht als de preview Enhanced DAX Time Intelligence. Je definieert een of meer kalenders op een tabel, wat betere ondersteuning brengt voor niet-standaard kalenders, periodes op weekbasis en in sommige gevallen snellere queries. Het vraagt wat meer opzet. Voor de meeste modellen vandaag is de klassieke aanpak nog het gewone startpunt, met de kalendergebaseerde optie de moeite waard om te kennen naarmate ze rijper wordt.
Waar moet je op letten bij het gebruik van time intelligence?
Geen datumtabel, of de verkeerde. Een functie op een datumkolom in de feitentabel richten is de meest voorkomende oorzaak van resultaten die bijna juist lijken maar het niet zijn. Gebruik een aparte datumtabel en markeer ze voor de klassieke functies.
Gaten in de kalender. Een datumtabel die weekends overslaat of stopt bij vandaag breekt year-to-date en de logica voor vorige periodes. Vul het bereik van de eerste dag van het vroegste jaar tot de laatste dag van het laatste.
Filteren op de feitendatum in plaats van de datumtabel. Slicers en relaties horen door de datumtabel te lopen. Filtert een visual op de datum van de feitentabel, dan kunnen de time intelligence-functies en de visual het oneens zijn.
Measures hergebruiken, niet logica herschrijven. Wikkel een bestaande measure in
CALCULATEmet een time intelligence-filter in plaats van de berekening opnieuw af te leiden. Zo blijven de getallen consistent over het semantisch model en het rapport heen.