{"id":322,"date":"2014-01-01T02:25:44","date_gmt":"2014-01-01T00:25:44","guid":{"rendered":"http:\/\/www.flip-design.de\/?p=322"},"modified":"2014-06-21T20:56:18","modified_gmt":"2014-06-21T18:56:18","slug":"script-zum-erstellen-einer-datums-dimensions-tabelle","status":"publish","type":"post","link":"https:\/\/www.flip-design.de\/?p=322","title":{"rendered":"Script zum Erstellen einer Datums-Dimensions Tabelle"},"content":{"rendered":"<p><a href=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2013\/04\/PowerPivot_Logo.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft  wp-image-270\" src=\"http:\/\/www.flip-design.de\/wp-content\/uploads\/2013\/04\/PowerPivot_Logo.png\" alt=\"PowerPivot_Logo\" width=\"97\" height=\"98\" srcset=\"https:\/\/www.flip-design.de\/wp-content\/uploads\/2013\/04\/PowerPivot_Logo.png 252w, https:\/\/www.flip-design.de\/wp-content\/uploads\/2013\/04\/PowerPivot_Logo-150x150.png 150w\" sizes=\"(max-width: 97px) 100vw, 97px\" \/><\/a>Da ich st\u00e4ndig immer wieder Systeme habe, wo ich keine ausreichende Datums-Dimensions Tabelle vorfinde, bspw. f\u00fcr ein Data Warehouse, habe ich nachfolgendes TSQL Script entwickelt welches mir alle n\u00f6tigen Felder zur\u00fcckliefert. Das Script erstellt hier erstmal eine Table Variable und f\u00fcllt diese, dies sollte man dann durch ein CREATE TABLE austauschen und die Tabelle so erzeugen. Das Script ist teils etwas umf\u00e4nglich und redundant geschrieben, f\u00fcr aber einen nicht so TSQL Profi ist es so \u00fcbersichtlich. Gerne dazu auch Feedback!<\/p>\n<p>Frohes Neues Jahr!<\/p>\n<p>Die Tabelle<\/p>\n<p>Das Script<\/p>\n<pre>SET NOCOUNT ON;\r\n\r\n-- Start Datum ab wann gez\u00e4hlt werden soll\r\nDECLARE @Start DATE = '20000101';\r\n-- Ende Datum bis wann gez\u00e4hlt werden soll\r\nDECLARE @Ende DATE = '20401231';\r\n\r\n-- Table Variable; sollte umgestellt werden auf ein CREATE TABLE wenn die Tabelle physisch angelegt werden soll\r\nDECLARE @DateDimension TABLE (\r\n\u00a0\u00a0\u00a0 DateKey INT NOT NULL PRIMARY KEY,\r\n\u00a0\u00a0\u00a0 Tagesdatum DATE NOT NULL,\r\n\u00a0\u00a0\u00a0 TagDerWocheNummer TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 Wochentagsname NVARCHAR(10) NOT NULL,\r\n\u00a0\u00a0\u00a0 TagDesMonatsNummer TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 MonatsNummer TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 Quartal TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 QuartalName NVARCHAR(20) NOT NULL,\r\n\u00a0\u00a0\u00a0 KalenderJahr SMALLINT NOT NULL,\r\n\u00a0\u00a0\u00a0 Semester TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 QuartalMitJahr NVARCHAR(30) NOT NULL,\r\n\u00a0\u00a0\u00a0 KalenderWoche TINYINT NOT NULL,\r\n\u00a0\u00a0\u00a0 KalenderWocheName NVARCHAR(20) NOT NULL,\r\n\u00a0\u00a0\u00a0 MonatsnummerMitJahr NVARCHAR(20) NOT NULL,\r\n\u00a0\u00a0\u00a0 KalenderWocheMitJahr NVARCHAR(20) NOT NULL,\r\n\u00a0\u00a0\u00a0 Monatsname NVARCHAR(30) NOT NULL,\r\n\u00a0\u00a0\u00a0 SemesterMitJahr NVARCHAR(20) NOT NULL\r\n\u00a0\u00a0\u00a0 );\r\n\r\nDECLARE @DateKey INT;\r\nDECLARE @Tagesdatum DATE;\r\nDECLARE @TagDerWocheNummer TINYINT;\r\nDECLARE @Wochentagsname NVARCHAR(10);\r\nDECLARE @TagDesMonatsNummer TINYINT;\r\nDECLARE @MonatsNummer TINYINT;\r\nDECLARE @Quartal TINYINT;\r\nDECLARE @QuartalName NVARCHAR(20);\r\nDECLARE @KalenderJahr SMALLINT;\r\nDECLARE @Semester TINYINT;\r\nDECLARE @QuartalMitJahr NVARCHAR(30);\r\nDECLARE @KalenderWoche TINYINT;\r\nDECLARE @KalenderWocheName NVARCHAR(20);\r\nDECLARE @MonatsnummerMitJahr NVARCHAR(20);\r\nDECLARE @KalenderWocheMitJahr NVARCHAR(20);\r\nDECLARE @Monatsname NVARCHAR(30);\r\nDECLARE @SemesterMitJahr NVARCHAR(20);\r\n\r\nDECLARE @inkrement INT = 1\r\n\r\nWHILE @Start &lt; @Ende\r\nBEGIN\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 SET @DateKey = CONVERT(INT, CONVERT(VARCHAR(8), @Start, 112));\r\n\u00a0\u00a0\u00a0 SET @Tagesdatum = @Start;\r\n\u00a0\u00a0\u00a0 SET @TagDerWocheNummer = DATEPART(dw, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @Wochentagsname = DATENAME(dw, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @TagDesMonatsNummer = DATEPART(dd, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @MonatsNummer = MONTH(@Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @Quartal = DATEPART(qq, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @QuartalName = 'Q ' + CONVERT(VARCHAR, @Quartal);\r\n\u00a0\u00a0\u00a0 SET @KalenderJahr = YEAR(@Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @Semester = CASE WHEN @MonatsNummer &lt; 6 THEN 1 ELSE 2 END;\r\n\u00a0\u00a0\u00a0 SET @QuartalMitJahr = @QuartalName + ' ' + CONVERT(VARCHAR, @KalenderJahr);\r\n\u00a0\u00a0\u00a0 SET @KalenderWoche = DATEPART(wk, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @KalenderWocheName = 'KW ' + CONVERT(VARCHAR, @KalenderWoche);\r\n\u00a0\u00a0\u00a0 SET @MonatsnummerMitJahr = CONVERT(VARCHAR, @Monatsnummer) + ' ' + CONVERT(VARCHAR, @KalenderJahr);\r\n\u00a0\u00a0\u00a0 SET @KalenderWocheMitJahr = CONVERT(VARCHAR, @KalenderWoche) + ' ' + CONVERT(VARCHAR, @KalenderJahr);\r\n\u00a0\u00a0\u00a0 SET @Monatsname = DATENAME(m, @Tagesdatum);\r\n\u00a0\u00a0\u00a0 SET @SemesterMitJahr = CONVERT(VARCHAR, @Semester) + ' ' + CONVERT(VARCHAR, @KalenderJahr);\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 -- Auch hier muss eine Anpassung dann auf die physische Tabelle erfolgen\r\n\u00a0\u00a0\u00a0 INSERT INTO @DateDimension\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ( DateKey, Tagesdatum, TagDerWocheNummer, Wochentagsname, TagDesMonatsNummer, MonatsNummer,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Quartal, QuartalName, KalenderJahr, Semester, QuartalMitJahr, KalenderWoche, KalenderWocheName,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MonatsnummerMitJahr, KalenderWocheMitJahr, Monatsname, SemesterMitJahr)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 VALUES \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (@DateKey, @Tagesdatum, @TagDerWocheNummer, @Wochentagsname, @TagDesMonatsNummer, @MonatsNummer,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @Quartal, @QuartalName, @KalenderJahr, @Semester, @QuartalMitJahr, @KalenderWoche, @KalenderWocheName,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @MonatsnummerMitJahr, @KalenderWocheMitJahr, @Monatsname, @SemesterMitJahr);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 SET @Start = DATEADD(day, @inkrement, @Start);\r\nEND\r\n\r\nSELECT * FROM @DateDimension<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Da ich st\u00e4ndig immer wieder Systeme habe, wo ich keine ausreichende Datums-Dimensions Tabelle vorfinde, bspw. f\u00fcr ein Data Warehouse, habe ich nachfolgendes TSQL Script entwickelt welches mir alle n\u00f6tigen Felder zur\u00fcckliefert. Das Script erstellt hier erstmal eine Table Variable und &hellip; <a href=\"https:\/\/www.flip-design.de\/?p=322\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":107,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[30,31,26,10,3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/322"}],"collection":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=322"}],"version-history":[{"count":3,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/322\/revisions"}],"predecessor-version":[{"id":383,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/posts\/322\/revisions\/383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=\/wp\/v2\/media\/107"}],"wp:attachment":[{"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flip-design.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}