2017-03-17 9 views
0

私はファクトテーブルと従業員の "階層"テーブルを持っています。緩やかに変化するディメンションテーブル -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 

はい、あなたは、これは非常に不器用で見ることができるように。 私はおそらく私はこれの少しの構造を変更する必要があると思っています。

+0

3つ以上の層はありますか?あなたは、タイプ2のSCD(行ではなく列が追加されている)https://en.wikipedia.org/wiki/Slowly_changing_dimensionによってより良くサービスされるかもしれないタイプ3のSCDについて説明しました。これにより、変化する属性を取り込むことができます –

+0

ファクトデータとディメンションデータを実際に結合するための実際の簡素化された一貫性のあるクエリの質問には答えません。例えば、10月3日、またはいつでも電話がかけられました。この段階はどの段階にありますか?タイプ3は有効ではありませんが、実際には有効な有効日が破棄されます。これは多くのSCDの議論の問題です。誰もがディメンションテーブルの作成について語ります。誰もREALリフトを行うクエリについては実際には語っていません。私が実際に持っているのは、タイプ2のSCDテーブルです。書き込みに最も効率的です。私はそれをタイプ6に変換する必要があります。事実テーブル・ジョインで最も効率的です。 – user45867

+0

あなたの次元は状態変化ごとに行を追加しないので、タイプ2ではありません.DwはETLを複雑にすることによってクエリを単純化します。あなたはすでにこのすべてを知っているようです。私は本当にその質問がここにあるのかどうかは分かりません。 –

答えて

0

おそらく、階層表を2つに分割するほうがよいでしょう。

したがって、このような層のテーブルがあります。

TierID Tier 
------------------ 
1   Tier 1 
2   Tier 2 
3   Tier 3 

そしてEmployeeTierテーブル:

ID EmpID TierID TierDate 
--------------------------------------- 
1  1  1   Jun 1, 2016 
2  1  3   Oct 2, 2016 
3  2  1   Jul 10, 2016 
4  2  2   Nov 11, 2016 

は今、あなたはあなたが探しているTierIDにEmployeeTierテーブルやフィルタを照会することができます。

これにより、複数回昇格/降格することもできます。従業員をフィルタリングし、日付でソートするだけで、現在の層を見つけることができます。

+0

これは問題ありませんが、クエリを簡素化するという基本的な問題には答えません。ファクトテーブルをあなたの採用テーブルにどのように結び付けますか? (現在のディメンション表を忘れてください)。あなたはどのように参加しますか?複数の結果が得られるので、実際の日付>階層を単純に持つことはできません! – user45867

+0

クエリで何をしたいですか?特定の期間のティアごとのコール数を取得するような何か? – PhillipXT

関連する問題