The Time Dimension Structure and Loading script for SQLServer
In a Data Warehouse there are a number of common dimensions such as Geographic and Time.
I leave here a script to create the Time Dimension table and a procedure to loading it between two dates:
/ * Destination database * /
use PAnalisys
/ * Create table * /
create table DIM_TIME
(
DateSK int not null,
Date date not null,
Year smallint not null,
Quarter smallint not null,
Month smallint not null,
Week smallint not null,
Day smallint not null,
WeekDay smallint not null,
NQurater char (7) not null,
NMonth char (15) not null,
NMonth3L char (3) not null,
NWeek char (10) not null,
NDay char (6) not null,
NWeekDay char (10) not null
constraint PK_DIM_TIME CONSTRAINT PRIMARY KEY CLUSTERED
(
Asc Date
)
)
/ * Loading Script * /
DECLARE @DateFrom as smalldatetime, @DateTo as smalldatetime
DECLARE @DateYYYYMMDD int
DECLARE @Year smallint, @Quarter char (2), @Month smallint
DECLARE @Week smallint, @Day smallint, @WeekDay smallint
DECLARE @NQuarter char (7), @NMonth char (15)
DECLARE @NMonth3l char (3)
DECLARE @NWeek char (10), @NDay char (6), @NWeekDay char (10)
-- Initial Date Set if different from the server
SET DATEFORMAT dmy
SET DATEFIRST 1
BEGIN TRANSACTION
-- Delete current data, if necessary
-- TRUNCATE TABLE FROM DIM_TIME
-- Range of dates to generate: 01/01/2006 to 31/12/Current year +2
SELECT @DateFrom = CAST ('20060101 'AS smalldatetime)
SELECT @DateTo = CAST (CAST (YEAR (GETDATE ()) +2 AS CHAR (4)) + '1231 'AS smalldatetime)
WHILE (@DateFrom <= @DateTo) BEGIN
SELECT @FechaAAAAMMDD = YEAR (@DateFrom) * 10000 +
MONTH (@DateFrom) * 100 +
DATEPART (dd, @ DateFrom)
SELECT @Year = DATEPART (yy, @DateFrom)
SELECT @Quarter = DATEPART (qq, @DateFrom)
SELECT @Month = DATEPART (m, @DateFrom)
SELECT @Week = DATEPART (wk, @DateFrom)
SELECT @Day = RIGHT ('0 '+ DATEPART (dd, @DateFrom), 2)
SELECT @WeekDay = DATEPART (DW, @DateFrom)
SELECT @NMonth = DATENAME (mm, @DateFrom)
SELECT @NMonth3l = LEFT (@NMonth, 3)
SELECT @NQuarter = 'Q' + CAST (@Quarter as CHAR (1)) + '/' + RIGHT (@Year, 2)
SELECT @NWeek = 'Week' + CAST (@week AS CHAR (2)) + '/' + RIGHT (RTRIM (CAST (@Year AS CHAR (4))), 2)
SELECT @NDay = CAST (@Day AS CHAR (2)) + '' + RTRIM (@NMES)
SELECT @NWeekDay = DATENAME (dw, @DateFrom)
INSERT INTO PAnalytics.dbo.DIM_TIME
(
DateSK,
Date,
Year,
Quarter,
Month
Week,
Day,
WeekDay,
NQuarter,
NMonth,
NMonth3L,
NWeek,
NDay,
NWeekDay
) VALUES
(
@DateYYYYMMDD,
@DateFrom,
@Year
@Quarter,
@Month
@Week,
@Day,
@WeekDay,
@NQuarter,
@NMonth,
@NMonth3l,
@NWeek,
@NDay,
@NWeekDay
)
- Increase the loop
SELECT @DateFrom = DATEADD (DAY, 1, @DateFrom)
END
COMMIT TRANSACTION
From here everyone can modify it at his convenience by adding or removing attributes 
+ ========= >>
- Using synonyms to share objects
- The Time Dimension structure and Loading Procedure for MySQL
- GRANTS WITH GRANT OPTION: The transitive property granting privileges
- Nigel Pendse, OLAP and Business Intelligence Survey
- Data Mining Tools
- Searching for user passwords in Oracle
- ROLAP vs MOLAP
- XE, the free database, Oracle
- The CRISP-DM Data Mining model
- Tools EIS, DSS and BSC
