最近、EDW テーブルから Dim テーブルを設定する必要があるプロジェクトに取り組んでいます。
EDW テーブルは、履歴データを保持するタイプ II です。ソースが複数の EDW テーブルである場合もあれば、(属性で) 複数レベルのピボットを備えた単一のテーブルである場合もある Dim テーブルをロードする場合。
つまり、10 個のレコードが存在することになります。Dim で単一の行を作成するために、domain_code でピボットする必要がある属性ごとに 1 つです。これらの 10 個のレコードのうち、domain_code は同じで sub_domain_code が異なる属性がいくつかあるため、サブドメイン コードをさらにピボットする必要があります。
元:
ドメイン コードを取得した場合: 01,02, 03 => これはドメイン コードのストレート ピボットです。また、ドメイン コード: 10、サブドメイン コード / バージョンを 2006,2007,2008,2009 とします。
つまり、上記の属性を持つソース テーブルを 2 つに分割する必要があります => 1 つはドメイン コード用、もう 1 つは domain_code + バージョン用です。
ここまでは順調ですね。
Dim テーブルをロードする場合:
ディメンションの設計仕様 (元々はサード パーティによって作成されたもの) によると、彼らが求めているのは次のとおりです。
EDW(属性)のすべての変更に対して、関連するすべてのレコード(そのNKの)をアセンブルする必要があります。つまり、現在の他の属性値を持つ新しいレコードを意味します=>それらを処理して、新しいdimレコードを作成し、挿入します。
つまり、1 つの抽出に更新された 100 レコード (NK ごとに 1 つ) が含まれている場合、100 + (100*9) レコードを集めて、dim テーブルを挿入/更新する必要があります。このアプローチの良さ。
私がやろうとした他の方法は、NKが最近のレコード(変更されていない属性)の値を取得し、それを挿入して現在のレコードを更新するために、dimテーブルを検索することです。
1 つの属性の変更に対してソース側でレコードを組み立てるか、dim テーブルの最近のレコードを調べて処理するより良いアプローチは何でしょうか。
これが意味をなさない場合は、さらに詳しく説明したいと思います。
ありがとう
テーブルのモデルはこちら