Data-Warehouse

建模事實的建議,基於兩個條件的時間層次結構

  • July 3, 2013

對不起,如果我的問題不屬於那個 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_idperiod_idweek_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)作為日期維度的主鍵,以便於事實表分區。這是您唯一一次應該在倉庫中使用智能鑰匙。否則使用無意義的代理。
  • 使用文本“名稱”欄位以允許“不適用”日期
  • 您應該有一個日期維度表,並且您的事實表日期鍵都應該指向它
  • 您不應在日期維度表中包含時間。如果您需要跟踪時間,請考慮使用時間維度表,例如分鐘粒度。

引用自:https://dba.stackexchange.com/questions/30077