私の質問がそのSEに属していない場合は申し訳ありませんが、最適な場所を見つけようとしましたが、ここで終わりました。
私の問題はこれです:
データウェアハウス環境にこのようにモデル化されたテーブルがあります。 :
MYTABLE (service_id, date_input, date_when_active, date_when_inactive, bunch_of_values...)
このテーブルは毎晩、prodenvからの新しいレコードで更新されます。レコードがprodで変更され、すでにdwに存在する場合、同じserviceid
でdwに新しいレコードが作成され、when_inactive
フィールドのsysdate
で古いレコードが更新されます。新しく作成されたレコードには、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
などをDBに直接含めるようにテーブルを改造する必要があるかどうかです。 Cognos FWMで直接行うことは可能ですか?
要件の1つは、ユーザーに2つの日付セットの使用を強制しないことです(入力日と会計年度でフィルター処理します)。入力日は透過的にフィルタリングする必要があります。会計年度パラメータを使用してデータをフィルタリングまたは表示する場合、入力日ルールがそれに応じて適用される必要があります。
日付ディメンション テーブルが必要で、次のようになります。
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のように日付をキーとして)を使用します。ウェアハウスでスマートキーを使用する必要があるのはこれだけです。それ以外の場合は、意味のない代理を使用してください。
テキストの「名前」フィールドを使用して、「N/A」の日付を許可します
1つの日付ディメンションテーブルが必要であり、ファクトテーブルの日付キーはすべてそれを指している必要があります
日付ディメンションテーブルに時間を含めないでください。時間を追跡する必要がある場合は、時間ディメンションテーブルを検討してください。