ファクト テーブルを設計するときはいつでも、最初に自問する一連の質問は次のとおりです。
- 分析しているビジネス プロセスは何ですか?
- 関連する事実とは何ですか?
- 事実をどの次元で分析したいですか?
- ファクト テーブルの最も低い (最も集約されていない) 詳細レベルは何を表しているか、つまり、ファクト テーブルの粒度は何か?
プロセスは人事(HR)のようです。
簡単に計算できる雇用期間という事実をすでに知っていますEndDate - StartDate
。明らかなディメンションは、Department、Employee、Date (Start と End の 2 つのロールプレイング ディメンション) です。
今回は「平均勤続年数」を目安にしているので、粒度は部署ごとの社員数であると思われます(取引データでは、社員が異動した場合EmployeeID
は別の項目に同じものがリストされている場合がありますDeptID
)。
スター スキーマは次のようになります。
Fact_HR
DeptKey EmployeeKey StartDateKey EndDateKey EmploymentLengthInDays
-------------------------------------------------------------------------
10001 000321 20100101 20120101 730
10001 000421 20100505 20130101 972
Dim_Department
DeptKey DeptID Name ... (other suitable columns)
------------------------- ...
10001 001 Sales ...
Dim_Employee
EmployeeKey EmployeeID FirstName LastName ... (other suitable columns)
---------------------------------------------- ...
000321 123 Alison Smith ...
000421 124 Anakin Skywalker ...
Dim_Date
DateKey DateValue Year Quarter Month Day ... (other suitable columns)
00000000 N/A 0 0 0 0 ...
20100101 2010-01-01 2010 1 1 1 ...
20100102 2010-01-02 2010 1 1 2 ...
... ... ... ... ... ...
(so on for every date you want to represent)
で終わるすべての列Key
は代理キーです。あなたが興味を持っているという事実はEmploymentLengthInDays
、メジャーを導き出すことができ、Avg. Employment Length
すべてのディメンションの平均を使用して集計することです。
次のような質問をすることができます。
- 部門別の平均勤続年数。
- 2011 年から 2010 年 9 月までの従業員の平均雇用期間。
- 特定の従業員の平均雇用期間 (従業員が勤務した各部門全体)。
ボーナス: 同じ列を使用する別のメジャーをキューブに追加することもできますが、代わりに SUM アグリゲーターがあり、これは と呼ばれる場合がありますTotal Employment Length
。特定の従業員については、従業員が会社で働いた期間がわかりますが、部門全体では、その部門で利用できた工数の合計がわかります。1 つのファクトが複数のメジャーになる方法の単なる例です。