1

我每天在 DimPerson 维度表中跟踪员工变化,并在每个月底填写我的事实表并计算 Hires、Exits 和 Headcount。对于此示例,假设我将在 4 月 30 日月底填充事实表。现在这是我面临的问题:我在 4 月 17 日有一个员工记录,这是一个“雇用”操作,所以当时我的 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     |
+-------+-----------+----------+-----------------+--------------------+-------+

因此,在月底,当我选择所有“当前”员工时,我会错过此人的招聘捕获,因为他最近的记录只是经理变更,而实际招聘发生在“当月”。在进行定期快照时,您可能会错过某些更改,这是否正常?在这种情况下,您建议我做什么来捕获 Hire 操作?

4

2 回答 2

5

听起来您需要以不同的方式填写事实表——您需要可靠的招聘、离职和员工人数来源。如果可用,您可以直接从源系统中提取这些事件,或者从维度表中提取它们(如果保证包含所有历史记录,而不仅仅是一天结束的更改)。

源系统将是最好的解决方案,但如果维度表整体显示了您需要的历史记录,那么您需要获取快照期间的所有维度表记录,而不是选择 isCur 人员并查看他们最近的操作,并计算每种类型的动作。

但是,我完全不建议您使用维度表来捕获交易历史记录。维度上的 SCD 应该用于跟踪维度属性本身的变化,而不是跟踪对人的操作历史。理想情况下,您将创建一个事务事实表来记录这些操作。这样,您就有了一个记录所有操作的事务事实,并且您可以使用该事实表在每个月底填充您的定期快照,而您的维度表不需要担心它。将您的维度表视为人员的记录,而不是对人员的操作。

于 2017-04-28T08:30:42.527 回答
-1

如果您的事实旨在显示月底的组织变化,我会说它正在按设计工作。员工在月底有经理,但在上个月月底不存在。这意味着该员工在当月被雇用。对于每月的粮食,不应期望显示每日活动。

我们的员工维度包含作为类型 1 属性的雇用日期。我们还在某些事实表中包含雇用日期,以允许与日期维度建立角色扮演关系。

于 2017-05-01T18:29:09.110 回答