Ali*_*air 0 mysql data-warehouse fact-table dimensional-modeling
我每天在DimPerson维度表中跟踪员工更改,并在每个月末填写我的事实表并计算员工,退出和员工人数.对于这个例子,假设我将填写4月30日月底的事实表.现在这就是我面临的问题:我在4月17日有一个员工记录,这是一个"雇佣"行动,所以在那个时候,我的DimPerson表读起来像这样:
+-------+-----------+----------+--------+--------------------+-------+
| EmpNo | Firstname | LastName | Action | EffectiveStartDate | isCur |
+-------+-----------+----------+--------+--------------------+-------+
| 4590 | John | Smith | Hire | 4/17/2017 | Y |
+-------+-----------+----------+--------+--------------------+-------+
Run Code Online (Sandbox Code Playgroud)
现在2天后,我看到同一个员工,但是有一个动作"经理改变",所以现在我的DimPerson表变为:
+-------+-----------+----------+-----------------+--------------------+-------+
| EmpNo | Firstname | LastName | Action | EffectiveStartDate | isCur |
+-------+-----------+----------+-----------------+--------------------+-------+
| 4590 | John | Smith | Hire | 4/17/2017 | N |
| 4590 | John | Smith | Manager Change | 4/19/2017 | Y |
+-------+-----------+----------+-----------------+--------------------+-------+
Run Code Online (Sandbox Code Playgroud)
因此,在月末,当我选择所有"当前"员工时,我会错过这个人的雇佣捕获,因为他最近的记录只是经理变更而实际招聘发生在"月内".在进行定期快照时,您是否可以错过某些更改?在这种情况下,你建议我做什么来捕捉雇佣行动?
听起来你需要以不同的方式填写你的事实表 - 你需要一个可靠的雇佣,退出和人数来源.您可以直接从源系统中选择这些事件(如果可用),或者从维度表中选择它们(如果它保证包含所有历史记录,而不仅仅是日终更改).
源系统将是最佳解决方案,但如果维度表整体显示您需要的历史记录,那么您需要获取正在快照的期间的所有维度表记录,而不是选择isCur人员并查看其最近的操作. ,并计算每种类型的行动.
但是,我不建议您使用维度表来捕获事务历史记录.维度上的SCD应该用于跟踪维度属性本身的更改,而不是跟踪人员操作的历史记录.理想情况下,您将创建一个事务事实表来记录这些操作.这样,您就有了记录所有操作的事务性事实,并且您可以使用该事实表在每个月末填充定期快照,并且维度表不需要担心它.将维度表视为人员的记录,而不是人员的行为记录.