Datum dimensies zijn enorm handig. Door gebruik te maken van een datum dimensie / datumtabel kun je voor een datum bepalen in welke week deze datum valt, welk jaar, welke maand, of het een feestdag is, etc. Dit artikel laat zien wat je met een datum dimensie kunt doen. Ook kun je een script downloaden om zelf een datum(tabel)/ dimensie aan te maken.
Een datum dimensie is niets meer of minder dan een datumtabel. Iedere datum in het jaar is een aparte regel. Daarbij vind je een aantal kolommen die voor die dag laten zien in welke weerk hij valt, de maand, kwartaal en nog veel meer. Zo is er ook een kolom aanwezig die aangeeft of een datum een feestdag is. Zo kun je snel tellingen doen voor feestdagen. Een datum dimensie is goed toepasbaar in een Data Warehouse maar je kunt hem natuurlijk ook gewoon aanmaken in een willekeurige database zoals Exact of Microsoft Dynamix.
Let op; dit is een voorbeelddimensie. Je kunt hem uiteraard zelf verfraaien met velden die voor jou belangrijk zijn!
Als we nu de datumdimensie aanmaken in de AdventureWorks database (dus niet het dwh van adventureworks) kun je de kracht zien. We gaan de datumdimensie joinen aan de OrderDate. Vervolgens kunnen we eenvoudig meerdere eigenschappen voor deze datum vinden!
SELECT TOP 100 SOH.SalesOrderID, SOH.OrderDate, DD.DatumId, DD.WeekNummer, DD.MaandNummerVanJaar, DD.Kwartaal445Code, DD.Kwartaal445Nummer FROM Sales.SalesOrderHeader AS SOH -- Hier zetten we de OrderDate om naar een integer en joinen hem met de Datum-dimensie DimDatum LEFT OUTER JOIN DimDatum AS DD ON YEAR(SOH.OrderDate) * 10000 + MONTH(SOH.OrderDate) * 100 + DAY(SOH.OrderDate) = DD.DatumId |
Wat ook handig is voor Excel PowerPivot is om de datumtabel te laden als tabblad. Je kunt hem dan ook in Excel PowerPivot gebruiken.
Nog een voorbeeld, geef me alle feestdagen in SQL Server voor 2013:
Als je bedrijfsspecifieke feestdagen hebt en je weet die vooraf kun je die ook aangeven in deze tabel. Dit is handig als je bepaalde berekeningen wilt doorvoeren en rekening wilt houden met feestdagen.
Als bijlage bij dit artikel tref je een script aan om de datumdimensietabel te maken. Daarna een MS SQL Server stored procedure om de tabel te kunnen vullen.
Eventueel kan ik ook een script maken die de tabel maakt en gelijk de data insert
Nice Ronald!
Heb je dit ook in MySQL of in csv voor 2011/2012?
Bvd,
Hierbij een CSV file met een datum dimensie vanaf 2002 t/m 2020.
TNX!!!
Super handig, Ronald! Komt goed van pas bij mijn eerste PowerPivot experimenten. Bedankt!
Zeker handig, eigenlijk kan je niet zonder bij power pivot.
Mooie post, komt altijd van pas.
Hoi, het script draait nu al 2 uur, voor 2010 tot 2020, lijkt me een beetje te lang, dus ik zal dan maar het csv-file importeren.
Dat is niet normaal, normaal duurt het ongeveer 20 seconden. Misschien is er iets mis met je database. Je kunt het ook in stapjes vullen, je maakt dan eerst de tabel aan en voert daarna stukjes van de procedure uit. Succes 🙂
ah, het is gelukt met een aantal aanpassinkjes!
het Engels_vullen script gebruikt andere namen voor de functions dan het nederlandse vullen script. Het nederlandse script werkt wel mits ik de databasenaam DWH_NL_REF aanpas naar eigen db en het DWH_NL_ISA stuk uitcomment
thanks 🙂