每当您设计事实表时,首先要问自己的问题是:
- 您正在分析的业务流程是什么?
- 相关事实是什么?
- 您想通过哪些维度来分析事实?
- 事实表中最低(最少聚合)的详细程度代表什么,即事实表的粒度是什么?
该过程似乎是人力资源(HR)。
您已经知道工作年限这一事实,您可以轻松计算:EndDate - StartDate
. 显而易见的维度是部门、员工、日期(开始和结束的两个角色扮演维度)。
在这种情况下,由于您正在寻找“平均工作年限”作为衡量标准,因此粒度似乎应该是按部门划分的单个员工(当员工转移时,您的交易数据可能会在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
. 对于给定的员工,这将告诉您该员工为公司工作了多长时间,但在一个部门中,它将告诉您该部门可用的总工日。只是一个单一事实如何变成多个衡量标准的例子。