6

SSIS/SSASにスタースキーマ/キューブを入力したい。

すべてのディメンションテーブルとファクトテーブル、主キーなどを準備しました。

ソースは「フラット」(アイテムレベル)テーブルであり、私の問題は、それを分割して1つからそれぞれのテーブルに取得する方法です。

私はかなりのグーグルをしましたが、問題に対する満足のいく解決策を見つけることができませんでした。これはBI開発でかなり一般的な問題/状況であると想像できますか?!

ありがとう、alexl

4

3 に答える 3

11

まず、単純な初期データ転送を実行するか、より高度なもの(インクリメンタルなど)を実行するかによって異なります。最初のデータ転送を行っていると仮定します。

アイテムテーブルに次のような列があるとします。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での記述はそれほど難しく/時間もかかりません。

于 2010-03-21T22:21:42.807 に答える
3

これを行うには、データフロータスクを使用して、最後のパッケージ実行時以降の情報を一時ステージングテーブルにコピーし、キーに基づいてそれらのステージングテーブルのデータでアーカイブ/ウェアハウスを更新し、まだ存在しない行を挿入します。 。次回に備えてステージングテーブルを切り捨て、監査の負荷を追加します。仕事は終わりましたか?

于 2010-03-24T16:32:16.570 に答える
0

スタースキーマではなく、オペレーショナルデータストアに対してキューブを作成することがよくあります。ほとんどの場合、スタースキーマを使用するとパフォーマンスが向上しますが、プロトタイピング/テストでは、必要なスタースキーマではなく、所有しているデータに対してキューブを開発することを恐れないでください。 。

于 2012-11-15T23:44:29.610 に答える