私は、「データ ウェアハウス ツールキット」で概説されているキンボール アプローチを使用して、人事データ マートの設計に取り組んでいます。
Kimball の設計に従って、(従業員の状態のポイント イン タイム分析をサポートするために) 従業員プロファイルの変更を追跡するためのタイム スタンプ付きのゆっくりと変化するディメンションと、測定をサポートするための人数の定期的なスナップショット ファクト テーブルを用意することを計画していました。新規採用、離職、取得休暇、給与支払いなど。
私が遭遇した問題は、場合によっては、従業員が複数の役割/仕事に割り当てられ、それぞれを個別に追跡する必要があることです (つまり、私の事実の粒度は、従業員レベルではなく、仕事レベルでなければなりません)。 .
従業員と役割/仕事がこのような階層を形成するシナリオに適合するように、Kimball の設計をどのように適合させることができますか? 理想的には、従業員が割り当てられている役割/仕事ごとに従業員プロファイル データ (住所、人口統計など) が重複しないようにしたいのですが、これはディメンションをスノーフレークする必要があるということですか?
私が検討しているオプションには以下が含まれます - これに関するコミュニティの考えや提案に興味があるので、すべての意見を歓迎します!
1) (添付のデザイン 1 を参照) 1 対多のリンク ロール テーブルを持つ従業員テーブルを使用したスノーフレーク スタイルのアプローチ。これには、ファクト テーブルとの 1 対多のリンクがあります。ここでの利点は、クリーンな従業員のディメンションですが、不要な複雑さを導入したくありません。両方のディメンションをファクト テーブルに直接リンクしてはならない理由はありますか? 私が見たスノーフレークのデザインは、これをしていないようです.
2) (添付のデザイン 2 を参照) 各従業員が割り当てられた役割ごとにレコードを持っているが、そのうちの 1 つだけが「主要な役割」としてフラグが立てられる、結合された従業員/役割ディメンション。ディメンションに対するポイント イン タイム クエリは、「プライマリ ロール」フラグを制約することで実行できます。