SSIS/SSASにスタースキーマ/キューブを入力したい。
すべてのディメンションテーブルとファクトテーブル、主キーなどを準備しました。
ソースは「フラット」(アイテムレベル)テーブルであり、私の問題は、それを分割して1つからそれぞれのテーブルに取得する方法です。
私はかなりのグーグルをしましたが、問題に対する満足のいく解決策を見つけることができませんでした。これはBI開発でかなり一般的な問題/状況であると想像できますか?!
ありがとう、alexl
SSIS/SSASにスタースキーマ/キューブを入力したい。
すべてのディメンションテーブルとファクトテーブル、主キーなどを準備しました。
ソースは「フラット」(アイテムレベル)テーブルであり、私の問題は、それを分割して1つからそれぞれのテーブルに取得する方法です。
私はかなりのグーグルをしましたが、問題に対する満足のいく解決策を見つけることができませんでした。これはBI開発でかなり一般的な問題/状況であると想像できますか?!
ありがとう、alexl
まず、単純な初期データ転送を実行するか、より高度なもの(インクリメンタルなど)を実行するかによって異なります。最初のデータ転送を行っていると仮定します。
アイテムテーブルに次のような列があるとします。id, cat1, cat2, cat3, cat4, ...
カテゴリ1〜4に列があるとすると、次のようid, cat_name
にdim_cat1(アイテムカテゴリ1のディメンションテーブル)をロードできます。
insert into dim_cat1 (cat_name)
select distinct cat1 from item_table;
他のすべてのカテゴリ/ディメンションテーブルについても同じことができます。ディメンションテーブルに自動的に生成されたIDがあると想定しています。次に、ファクトテーブルをロードします。
insert into fact_table (id, cat1_id, cat2_id, cat3_id, cat4_id, ...)
select id, dc1.id
from item_table it
join dim_cat1 dc1 on dc1.cat_name = it.cat1
join dim_cat2 dc2 on dc2.cat_name = it.cat2
join dim_cat3 dc3 on dc3.cat_name = it.cat3
join dim_cat4 dc3 on dc4.cat_name = it.cat4
...
大量のデータがある場合は、item_tableおよび場合によってはディメンションテーブルのカテゴリ名にインデックスを作成するのが理にかなっている場合があります。
ところで、これはデータベースに依存しない答えです。私はSSIS / SSASを使用していません。このプロセスの一部を合理化するツールを利用できる場合がありますが、プレーンSQLでの記述はそれほど難しく/時間もかかりません。
これを行うには、データフロータスクを使用して、最後のパッケージ実行時以降の情報を一時ステージングテーブルにコピーし、キーに基づいてそれらのステージングテーブルのデータでアーカイブ/ウェアハウスを更新し、まだ存在しない行を挿入します。 。次回に備えてステージングテーブルを切り捨て、監査の負荷を追加します。仕事は終わりましたか?
スタースキーマではなく、オペレーショナルデータストアに対してキューブを作成することがよくあります。ほとんどの場合、スタースキーマを使用するとパフォーマンスが向上しますが、プロトタイピング/テストでは、必要なスタースキーマではなく、所有しているデータに対してキューブを開発することを恐れないでください。 。