0

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)
);
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

完全に正直に言うと、私の経験では、ETL 処理中のデータの不一致を防ぐために、dimDate テーブルには単一の日付列 (つまり、FullDate キー) から計算されたほとんどすべての列が必要ですが、他のマイレージは異なる場合があります...

于 2014-05-25T10:24:18.147 に答える