【问题标题】:how to derive season in a date dimension如何在日期维度中导出季节
【发布时间】:2014-05-25 09:59:14
【问题描述】:

我正在实施 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)
);

【问题讨论】:

    标签: sql-server data-warehouse dimensional-modeling


    【解决方案1】:

    排除其他顾虑/因素,我对此的最初反应是使用 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 处理期间的数据不一致,但其他里程可能会有所不同......

    【讨论】:

    • 感谢您的支持。在我的场景中,season_B 属于两年,因为它落在 10 月至 1 月。所以我想存储这些信息,所以我添加了另一个名为“SeasonYear”的列。你能帮我填充那个栏目吗?例如:(19900101, 1990-01-01, 01, 1, 1990, Season_B, 1989-1990)
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多