私はファクトテーブルと従業員の "階層"テーブルを持っています。緩やかに変化するディメンションテーブル -SQL Server - ゆっくり変化するディメンションの結合
だから、ファクトテーブルにはみかん
employee_id call date
Mark 1 1-1-2017
Mark 2 1-2-2017
John 3 1-2-2017
のように見えるそして、「階層レベル」のデータ構造が必要です。私はこれを単純にしておきたい - 私はこのテーブルの構造を何にでも変えることができるが、今のところそれを作成した。
employee_id tier1_start ... tier2_start ... tier3_start
Mark 5-1-2016
John 6-1-2016 8-1-2016
Lucy 6-1-2016 10-1-2016
2つの重要な注意点。この表は、昇進が一度しか起こらないという仮定の下で動作します - 別に降格も再保証も起こりません。また、階層1から階層3にジャンプすることも可能です。
私は、ファクトテーブルに対して「階層」ディメンション(非正規化)を考え出すための最良のクエリを考え出していました。
たとえば、2月のTier 1指標、または2月のTier 2指標を確認したいとします。明らかに、歴史的に変化するティアディメンションはリンクされていなければなりません。
ここで私が考えることのできるもっともなやり方は、単純にemployee_idを使用している層表のファクト表を結合することです。その後
、でもclumsier case文をやって:
case
when isnull(tier3_start,'0') < date then 'T3'
when isnull(tier2_start, '0') < date then 'T2'
when isnull(tier1_start, '0') < date then 'T1'
else 'other'
end as tier_level
はい、あなたは、これは非常に不器用で見ることができるように。 私はおそらく私はこれの少しの構造を変更する必要があると思っています。
3つ以上の層はありますか?あなたは、タイプ2のSCD(行ではなく列が追加されている)https://en.wikipedia.org/wiki/Slowly_changing_dimensionによってより良くサービスされるかもしれないタイプ3のSCDについて説明しました。これにより、変化する属性を取り込むことができます –
ファクトデータとディメンションデータを実際に結合するための実際の簡素化された一貫性のあるクエリの質問には答えません。例えば、10月3日、またはいつでも電話がかけられました。この段階はどの段階にありますか?タイプ3は有効ではありませんが、実際には有効な有効日が破棄されます。これは多くのSCDの議論の問題です。誰もがディメンションテーブルの作成について語ります。誰もREALリフトを行うクエリについては実際には語っていません。私が実際に持っているのは、タイプ2のSCDテーブルです。書き込みに最も効率的です。私はそれをタイプ6に変換する必要があります。事実テーブル・ジョインで最も効率的です。 – user45867
あなたの次元は状態変化ごとに行を追加しないので、タイプ2ではありません.DwはETLを複雑にすることによってクエリを単純化します。あなたはすでにこのすべてを知っているようです。私は本当にその質問がここにあるのかどうかは分かりません。 –