我正在实施DataWarehouse日期维度。根据我的情况,我必须将10月到1月之间的日期标记为Season_A
,将标记为4月到8月的日期标记为Season_B
。
我创建了dimDate
表,如下所示:
CREATE TABLE dbo.dimDate
(
DateKey INT NOT NULL,
FullDate DATE NOT NULL,
MonthNumberName NVARCHAR(15) NULL,
CalendarQuarter TINYINT NULL,
CalendarYear SMALLINT NULL,
Season NVARCHAR(10)
CONSTRAINT PK_Dates PRIMARY KEY (DateKey)
);
答案 0 :(得分:0)
关注其他问题/因素,我对此的初步反应是使用computed column并使用存储过程中的简单between子句计算季节
示例实现伪代码
CREATE TABLE dbo.dimDate
(
DateKey INT NOT NULL
,FullDate DATE NOT NULL
,MonthNumberName NVARCHAR(15) NULL
,CalendarQuarter TINYINT NULL
,CalendarYear SMALLINT NULL
,Season NVARCHAR(10) as GetSeason(FullDate)
,CONSTRAINT PK_Dates PRIMARY KEY (DateKey)
);
GO;
Create Procedure dbo.GetSeason
@Date as datetime
as
if(Month(@Date) between 1 and 3)
select 'Season A'
--etc
说实话,我的经验是dimDate表应该几乎所有列都是通过单个日期列计算的(即:FullDate键),以防止ETL处理期间的数据不一致,但其他里程可能会有所不同......