Home / T-SQL / Hoe maak ik een datum dimensie?

Hoe maak ik een datum dimensie?

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!

Datum Dimensie voorbeeld

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:

Feestdagen 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

About Ronald Kraijesteijn

Microsoft SQL Server and Business Intelligence consultant, MCITP Certified. If you need a BI specialist for a freelance job, please contact me!

Check Also

Split postal code range into single rows

It’s been a while since my last article. I’ve been busy working on a lot …

10 comments

  1. Nice Ronald!

    Heb je dit ook in MySQL of in csv voor 2011/2012?

    Bvd,

  2. Super handig, Ronald! Komt goed van pas bij mijn eerste PowerPivot experimenten. Bedankt!

  3. Mooie post, komt altijd van pas.

  4. 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 🙂

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *