日期維度幾乎存在於所有 Cube 設計中,但依據專案需求不同,其設計細節差異極大。在動工前,必須釐清以下關鍵需求:
建議自行撰寫建立腳本,依需求自訂欄位。以下提供完整範例,包含自然年與會計年度、季、半年等屬性:
-- 核心建表與資料填入邏輯(節錄)
CREATE TABLE DimDate (
DateKey INT PRIMARY KEY,
FullDate DATE NOT NULL,
DayNumberOfWeek TINYINT NOT NULL,
DayNameOfWeek NVARCHAR(10) NOT NULL,
IsWeekend BIT NOT NULL,
IsLeapYear BIT NOT NULL,
CalendarQuarter TINYINT NOT NULL,
CalendarYear SMALLINT NOT NULL,
FiscalQuarter TINYINT NOT NULL,
FiscalYear SMALLINT NOT NULL,
-- 其他欄位略...
);
-- 迴圈產生 2005-01-01 至 2013-12-31 的資料
WHILE (@StartDate <= @EndDate) BEGIN
INSERT INTO DimDate (...) VALUES (...);
SET @StartDate = DATEADD(DAY, 1, @StartDate);
END
實務上建議在資料倉庫建立檢視表,SSAS 資料來源檢視參考檢視而非基底表,未來維度結構微調時只需修改檢視,避免動到 SSAS 專案:
CREATE VIEW vDimDate AS
SELECT
DateKey, FullDate, DateName,
CONVERT(VARCHAR(2),DayNumberOfMonth) + ' ' + EnglishMonthName + ' ' + CONVERT(CHAR(4), CalendarYear) AS FullDateName,
CASE WHEN IsWeekend = 1 THEN 'Weekend' ELSE 'Weekday' END AS WeekdayWeekend,
CalendarYear * 100 + MonthNumberOfYear AS MonthKey,
'CY ' + CONVERT(CHAR(4),CalendarYear) + ' Qtr ' + CONVERT(CHAR(1), CalendarQuarter) AS CalendarQuarterName,
'FY ' + CONVERT(CHAR(4),FiscalYear) + ' Qtr ' + CONVERT(CHAR(1), FiscalQuarter) AS FiscalQuarterName
-- 其他計算欄位...
FROM DimDate
此設計支援雙年度體系(自然年/會計年),並預先計算常用顯示名稱與鍵值,大幅簡化 Cube 端定義工作。