Vraag van een cursist: Hoe ga je om met tijd in Power BI?
Deelnemers aan trainingen van SignOn ICT Trainingen+ kunnen gebruikmaken van onze nazorgservice. Als een cursist na afloop van een training nog vragen heeft over de behandelde stof, kan hij of zij onze trainers raadplegen. Veel deelnemers maken hier gebruik van. Soms kunnen vragen en antwoorden ook leerzaam zijn voor anderen. Daarom delen wij ze graag, zodat anderen er ook van kunnen profiteren.
Hieronder vind je een vraag van een deelnemer die onlangs de Power BI Basis training heeft gevolgd, samen met het antwoord/oplossing van de trainer.
Vraag van een cursist: Hoe ga je om met tijd in Power BI?
“Tijdens de training hebben we geleerd dat je vrijwel altijd een datumtabel moet maken om datums, maanden en jaren weer te geven. In onze data is echter ook de tijd van de dag belangrijk. We willen de data per uur of misschien zelfs per kwartier kunnen bekijken. Hoe kunnen we dat aan de datumtabel toevoegen?”
Waarom deze vraag?
Zoals de cursist terecht opmerkt, is een datumtabel bijna altijd noodzakelijk als je data kolommen met datums bevat.
Een datumtabel is een dimensietabel waarin elke rij een unieke datum vertegenwoordigt. Met deze tabel kun je je datamodel filteren op bijvoorbeeld maand, jaar of kwartaal.
Datumtabellen worden vaak geïmporteerd uit een Data Warehouse of direct in Power BI gemaakt met Power Query of DAX.
Aangezien elke datum slechts één dag bevat, blijven deze tabellen relatief klein. Voor één jaar zijn er slechts 365 rijen nodig.
Voor de meeste rapporten is dit voldoende, omdat “datum” vaak de kleinste tijdseenheid is. Bij facturen of andere financiële transacties is bijvoorbeeld de boekingsdatum vaak de kleinste eenheid.
Maar soms speelt tijd wel een belangrijke rol.
Hoe ga je dan om met zogenaamde “Datumtijd”-velden?
Het antwoord op deze Power BI vraag:
Wanneer je databron ‘datumtijd’-datatypen bevat, is het beste advies om deze velden altijd om te zetten naar andere datatypes in Power BI.
‘Datumtijd’-velden kunnen namelijk veel opslagruimte innemen. Dit komt doordat de grootte van kolommen in Power BI sterk afhankelijk is van de kardinaliteit van de data, oftewel het aantal unieke waarden in een kolom. Hoe hoger de kardinaliteit, hoe meer ruimte de data inneemt. Een kolom met slechts “ja” of “nee” neemt bijvoorbeeld aanzienlijk minder ruimte in beslag dan een kolom met duizend verschillende waarden.
Aangezien een ‘datumtijd’-kolom tot de seconde nauwkeurig en dus een zeer hoge kardinaliteit heeft, kan dit leiden tot een aanzienlijke toename in opslaggebruik.
Dit effect wordt duidelijk zichtbaar wanneer je de data analyseert met tools zoals DAX Studio. Stel, je hebt een tabel met 1 miljoen ‘datumtijd’-waarden over een periode van vier jaar. Door de ‘datumtijd’-waarde op te splitsen in aparte datum- en tijdkolommen, kun je de opslagruimte aanzienlijk verminderen en de prestaties van je Power BI-rapporten verbeteren.
Wanneer je dus tijd helemaal niet nodig heb, kun je aanzienlijk ruimte besparen door het datatype te veranderen in “date” in plaats van “datetime”.
Als de tijd wel belangrijk is. Is de “best practice” de ‘datumtijd’-kolom op te splitsen in afzonderlijke datum- en tijdkolommen. Dit vermindert nog steeds de benodigde ruimte, aangezien de gecombineerde grootte van de twee kolommen kleiner is dan die van één enkele ‘datumtijd’-kolom.
Na het splitsen kunnen de tijdgegevens eenvoudig gefilterd worden door een aparte tijdtabel toe te voegen.
Stappen om datum en tijd te splitsen in Power Query:
- Ga naar Power Query en selecteer de “datumtijd” kolom.
2. Ga naar het menu “Add Column” en kies voor “Time” en vervolgens “Time Only.” Dit creëert een nieuwe kolom met alleen de tijdwaarden.
3. Selecteer opnieuw de ‘datumtijd’-kolom en ga naar het “Transform” menu. Kies “Date” en vervolgens “Date Only” om de kolom aan te passen naar alleen de datums.
Je kan nu eventueel ook de naam veranderen.
Toevoegen van een tijdtabel
Nu kun je een tijdtabel toevoegen. De beste plek om deze te maken is Power Query (al zou het eventueel ook met DAX kunnen). Er zijn online veel kant-en-klare scripts beschikbaar om een tijdtabel te maken.
1. Open Power Query en maak een nieuwe lege query.
2. Ga naar de geavanceerde editor en plak een script dat een tabel genereert met alle mogelijke tijdstippen. (de code hieronder)
let
Dates = Table.FromList(
List.Times(#time(0,0,0), 24*60*60, #duration(0,0,0,1)),
Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Rename = Table.RenameColumns(Dates,{{"Column1", "Time"}}),
Type = Table.TransformColumnTypes(Rename,{{"Time", type time}}),
Hour = Table.AddColumn(Type, "Hour", each Time.Hour([Time]), Int64.Type),
Min = Table.AddColumn(Hour, "Minute", each Time.Minute([Time]), Int64.Type)
in
Min
Deze query maakt een tabel met alle tijdstippen die mogelijk zijn.
3. Laad deze query en koppel de tijdtabel aan de tijdkolom in uw feitentabel.
Hiermee kan je in het rapport tijden en datums afzonderlijk maar ook in combinatie weergeven en filteren.
De “best practice” om in Power BI Power BI met tijd om te gaan is dus eigenlijk hetzelfde als met datums. Maar we houden tijdstippen (uren, minuten seconden) en datums (dagen, maanden, jaren etc.) wel gescheiden als twee aparte in plaats van ze te combineren.