mysql - 定期快照事实表 - 可能缺少一些捕获

标签 mysql data-warehouse dimensional-modeling fact-table

我每天在 DimPerson 维度表中跟踪员工变化,并在每个月末填写我的事实表并计算雇用、离职和人数。 对于这个例子,假设我将在 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 操作?

最佳答案

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

源系统是最好的解决方案,但是如果维表整体显示你需要的历史,那么与其选择isCur人并查看他们最近的 Action ,你需要获取该时期的所有维表记录您正在快照,并计算每种类型的操作。

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

关于mysql - 定期快照事实表 - 可能缺少一些捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43675176/

相关文章:

databricks - 为什么我不使用 Databricks 作为我的数据集市?

database-design - PostgreSQL 9 中的日历表

mysql - 如何连续监控 mysql 数据库表中的新条目,并在发现新条目后立即使用 cron 作业触发批处理文件

Mysql - Concat - 过程执行失败

sql-server - 在 Azure Synapse 中,如何检查表的分布方式

data-warehouse - 通过示例了解缓慢变化的维度 (SCD) 类型 5 和 7

hbase - 将数据仓库星型模式映射到 HBASE

powerbi - 维度建模 - 模棱两可的关系

mysql - 如何对这样的 MySQL 表进行透视和计数?

php - fatal error : [] operator not supported for strings multiple delete using PDO