Data-Warehouse
建模事實的建議,基於兩個條件的時間層次結構
對不起,如果我的問題不屬於那個 SE,但我試圖找到最好的地方,結果就到了這裡。
我的問題是這樣的:
我在我們的數據倉庫環境中有一個這樣建模的表。:
MYTABLE (service_id, date_input, date_when_active, date_when_inactive, bunch_of_values...)
每天晚上,該表都會使用來自我們產品環境的新記錄進行更新。當 prod 中的記錄發生更改並且已經存在於 dw 中時,會在 dw 中創建一條具有相同內容的新記錄,並使用in欄位
serviceid
更新舊記錄。新創建的記錄的欄位為。sysdate``when_inactive``when_inactive``null
我們使用查詢從這個表中提取數據,使用一些條件來準確地得到一個精確時期內所有服務的價值。查詢是這樣的:
select * from mytable where service_date_input between :p_date_start and :p_date_end and :p_date_end between date_when_active and nvl(date_when_inactive,:p_date_end)
我想做的是在 Cognos Framework Manager 中對時間層次結建構模,這樣我就可以鑽取會計年度、期間、週、月等。
我想不通的是,我是否需要直接在數據庫中改造表格以包含計算、、、
fiscal_year_id
等period_id
,week_id
或者month_id
是否可以直接在 Cognos FWM 中進行?其中一項要求是不要強制使用者使用兩個日期集(按輸入日期和財政年度過濾)。應透明過濾輸入日期:當您使用會計年度參數過濾或顯示數據時,應相應地應用輸入日期規則。
您需要一個日期維度表,它應該如下所示:
create table calendar ( date_id int primary key, name text not null unique, date_iso date unique, year smallint, quarter_of_year smallint, month_of_year smallint, day_of_year smallint, day_of_month smallint, fiscal_year smallint, quarter_of_fiscal_year smallint, month_of_fiscal_year smallint, ... );
並像這樣插入數據:
insert into calendar values (0, 'N/A', null, ...), (20130703, '2013-07-03', '2013-07-03', 2013, 3, 7, 184, 3, ...), (20130704, '2013-07-04', '2013-07-04', 2013, 3, 7, 185, 4, ...);
筆記:
- 使用智能鍵(以日期為鍵,如 20130703)作為日期維度的主鍵,以便於事實表分區。這是您唯一一次應該在倉庫中使用智能鑰匙。否則使用無意義的代理。
- 使用文本“名稱”欄位以允許“不適用”日期
- 您應該有一個日期維度表,並且您的事實表日期鍵都應該指向它
- 您不應在日期維度表中包含時間。如果您需要跟踪時間,請考慮使用時間維度表,例如分鐘粒度。