Da kao što je jablan napisao, kreiraš tabelu pa je napuniš vrednostima, može i iz excela ako hoćeš. Konkretno ovo što koristim na MSSQL-u izgleda ovako:
Kôd:
CREATE TABLE [dbo].[DimDate](
[DimDateId] [int] IDENTITY(1,1) NOT NULL,
[Period] [int] NOT NULL,
[Date] [date] NOT NULL,
[Year] [int] NULL,
[Month] [int] NULL,
[Week] [int] NULL,
[SundayWeek] [int] NULL,
[DayOfMonth] [int] NULL,
[DayOfWeek] [int] NULL,
[Quarter] [int] NULL,
[DayName] [nvarchar](50) NULL,
[MonthName] [nvarchar](50) NULL,
CONSTRAINT [PK_DimDate] PRIMARY KEY CLUSTERED
(
[DimDateId] ASC
) ON [PRIMARY]
) ON [PRIMARY]
Tabela je inicijalno popunjena ovakvim nekakvim skriptom:
Kôd:
CREATE PROCEDURE [dbo].[GetDimDate]
@startDate DATETIME,
@endDate DATETIME
AS
BEGIN
DECLARE @date DATETIME = @startDate
SET DATEFIRST 1
CREATE TABLE #dateDimension(
[Period] [int] NOT NULL,
[Date] [date] NOT NULL,
[Year] [int] NULL,
[Month] [int] NULL,
[Week] [int] NULL,
[DayOfMonth] [int] NULL,
[DayOfWeek] [int] NULL
)
WHILE (@date < @endDate)
BEGIN
INSERT INTO #dateDimension
VALUES
(DATEPART(YEAR, @date),
@date,
DATEPART(YEAR, @date),
DATEPART(MONTH, @date),
DATEPART(WEEK, @date),
DATEPART(DAY, @date),
DATEPART(WEEKDAY, @date)
)
SET @date = DATEADD(DAY, 1, @date)
END
SELECT * FROM #dateDimension
DROP TABLE #dateDimension
END
Za potrebe reportinga / analysis servisa koristim view koji čita slogove do tekućeg i eventualno proračunava još neku kolonu, čisto da se korisnicima kad gledaju reporte / kocke ne bi pojavljivali neki datumi u budućnosti. U tabeli imam datume do 2020, mada je to proizvoljna odluka.
Dobar primer dimenzionog modela za Data Warehouse je Microsoftov AdventureWorksDW, tabela se zove DimTime, možeš da skineš bazu sa codeplex-a, mislim da je skriptovana, tako da uopšte ne moraš da instaliraš MSSQL:
http://sqlserversamples.codeplex.com/