ディメンション階層のレベル間の変更をキャプチャする最もクリーンな方法は何ですか?
[Area]> [Region]> [Location]というディメンション階層があります。AreaはRegionの親で、RegionはLocationの親です。場所は階層の最下位レベルであり、ファクトテーブルに関連付けられています。
ビジネスルールは次のとおりです。ロケーションは、ビジネスニーズに基づいて、割り当てられているリージョンを変更できます。さらに、リージョンは割り当てられているエリアを変更できます。
これらの変更をキャプチャして、履歴分析を行うときに、ロケーションがそのリージョンを変更する前後と、リージョンがそのエリアを変更する前後にビジネス指標を比較できるようにします。
これを行う最良の方法は何ですか?
私が思いついた4つの方法には、大きな欠点があるようです。
これらのどれも私にはきれいに見えません。
もっと良い方法はありますか?
どうもありがとう
ブリッジテーブルの最初のオプションを強くお勧めします。うまくいく3つのテーブルすべての履歴上の変更を確実にキャプチャすると、JOINが問題になることに同意します。 (JOIN句で)DateInsertedとValidTillがファクトテーブルにあるものと一致することを確認してください。 こちらのブリッジテーブルの詳細-キンボール大学
代わりに:ファクトテーブルでは、3つの次元すべて(領域、地域、場所)への参照を保持します。とにかくファクトテーブルに日付を設定する必要があるため、変更を簡単にマッピングできます。また、先ほど述べたように、場所は1つのトランザクションではA、別のトランザクションではBになる可能性があるため、この方法でグループ化した方がよいでしょう。 BYと傾向と変化を見る。欠点は、ファクトテーブルが太くなることです。
SSASを使用している(またはデータモデリングに使用するつもりである)場合は、エンドユーザーに実装する方法を説明する非常に良い 多対多革命 をお勧めします。
3つのテーブルの履歴変更をキャプチャする場合は、変更階層テーブル(つまり、[Area]
、[Region]
)をディメンションテーブルのサブディメンションに変換します(つまり、[Location]
)effective_date
およびexpire_date
(3つのテーブルで)緩やかに変化するディメンション(SCD)の手法を使用して、履歴データをレポートするためにディメンションとサブディメンションの属性の変化を追跡できます。