0

我正在实施 DataWarehouse 日期维度。根据我的情况,我必须将 10 月和 1 月之间的日子标记为Season_A4 月和 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)
);
4

1 回答 1

0

排除其他问题/因素,我对此的最初反应是使用计算列并使用存储过程中的简单 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 处理期间的数据不一致,但其他里程可能会有所不同......

于 2014-05-25T10:24:18.147 回答