我每天都会在DimPerson维度表中跟踪员工更改,并在每个月末填写我的事实表并计算员工,退出和员工人数。 对于这个例子,让我们说我将填写4月30日月底的事实表。现在我遇到的问题是: 我在4月17日有一份员工记录,这是" Hire"动作,所以在那个时间点,我的DimPerson表读起来像这样:
+-------+-----------+----------+--------+--------------------+-------+
| EmpNo | Firstname | LastName | Action | EffectiveStartDate | isCur |
+-------+-----------+----------+--------+--------------------+-------+
| 4590 | John | Smith | Hire | 4/17/2017 | Y |
+-------+-----------+----------+--------+--------------------+-------+
现在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 |
+-------+-----------+----------+-----------------+--------------------+-------+
所以在月末,当我选择所有"当前"员工,我会错过这个人的雇佣捕获,因为他最近的记录只是经理变更和实际招聘发生在"月内"。 在进行定期快照时,您是否可以错过某些更改?在这种情况下,你建议我做什么来捕捉雇佣行动?
答案 0 :(得分:5)
听起来你需要以不同的方式填写你的事实表 - 你需要一个可靠的雇佣,退出和人数来源。您可以直接从源系统中选择这些事件(如果可用),或者从维度表中选择它们(如果它保证包含所有历史记录,而不仅仅是日终更改)。
源系统将是最佳解决方案,但如果维度表整体显示您需要的历史记录,那么您需要获取该期间的所有维度表记录,而不是选择isCur人员并查看其最近的操作。你是快照,并计算每种类型的行动。
但是,我不建议您使用维度表来捕获事务历史记录。维度上的SCD应该用于跟踪维度属性本身的更改,而不是跟踪人员操作的历史记录。理想情况下,您将创建一个事务事实表来记录这些操作。这样,您就有了记录所有操作的事务性事实,并且您可以使用该事实表在每个月末填充定期快照,并且维度表不需要担心它。将维度表视为人的记录,而不是人的行为。
答案 1 :(得分:-1)
如果您的事实是为了显示月末的组织变化,我会说它按设计工作。该员工在月底有一名经理,但在上个月末不存在。这意味着该员工在本月被录用。每月粮食不应该显示日常活动。
我们的员工维度包含雇用日期作为类型1属性。我们还在某些事实表中包含雇用日期,以允许与日期维度建立角色扮演关系。