了解渐变维度类型 2

Posted

技术标签:

【中文标题】了解渐变维度类型 2【英文标题】:Understanding Slowly Changing Dimension Type 2 【发布时间】:2016-10-21 08:26:16 【问题描述】:

在我的场景中,我很难理解如何使用渐变维度类型 2。 我浏览了不同的教程网站,但它们不适合。

我有一个员工维度表,其中包含:

+-----+---------------+------------+------------+
| id  | employee      | designation| Location   |
+-----+---------------+------------+------------+
| 1   | Ola           |   CEO      | Newyork    |
| 2   | Ahmed         | DEVELOPER  | California |
| 3   | Ola           | Manager    | California |
+----------+----------+------------+------------+

我有一个帐户事实表

+-------+----------+
|emp_id | Amount   | 
+-------+-----------
| 1     | 2000000  |  
| 2     | 300000   | 
+----------+-------+

现在我们看到维度发生了变化,因此为同一 Ola 员工提供了一个新 ID。 我们将如何在事实表中进行管理?

Ola 的新 ID 不会在 Fact Table 中找到。

因此,如果我们实际上添加了一个新行,新 ID 为 Ola,当他们以不同的方式标识时,我们如何将他们关联为同一员工,“主键”。

我们如何区分该员工不是新员工,实际上位置/名称已更改。

【问题讨论】:

我发现这非常有帮助:datawarehouse4u.info/SCD-Slowly-Changing-Dimensions.html 尤其是描述 SCD 2 数据模型的部分。这也回答了区分部分。在事实表中,缺少一个日期来描述奥拉 5 月在纽约,但在 6 月他到达了加利福尼亚。也许您必须添加雪花表来描述独特的员工。 【参考方案1】:

我相信有很多方法可以做到这一点,这里有一种方法 - 在您的维度表中有一个“employee_Key”,这对于员工来说是唯一的。所以你的维度表看起来像这样 -

 id  | emp_key | employee   | designation| Location   |Valid From| Valid To |
-----|---------|------------|------------|------------|----------|----------|
 1   | EMP1    | Ola        |   CEO      | Newyork    |1/1/1900  |1/1/2016  |
 2   | EMP2    | Ahmed      | DEVELOPER  | California |1/1/1900  |NULL      |
 3   | EMP1    | Ola        | Manager    | California |1/2/2016  |NULL      |

您可以继续使用员工的“新”ID 加载事实表。在这种情况下,您将拥有该员工的 2 组不同的密钥。

+-------+----------+
|emp_id | Amount   | 
| 1     | 2000000  |  
| 2     | 300000   | 
| 3     | 100000   |
+----------+-------+

如果您想从一开始就为员工汇总(例如金额总和),您可以使用 ID 键和按 emp_key 分组来加入事实和维度。 所以,

select emp_key, sum(amount) from employee dim, account fact where dim.ID = fact.ID group by emp_key.

如果您想知道他成为经理后的金额,您只需在 ID 字段上进行汇总即可。

select dim.ID, sum(amount) from employee dim, account fact where dim.ID = fact.ID group by dim.ID.

或者这样 -

select fact.ID, sum(amount) from account fact group by fact.ID.

【讨论】:

谢谢。如果我为这种变化的属性取一个垃圾维度,那不是更好吗?你会推荐什么方法?

以上是关于了解渐变维度类型 2的主要内容,如果未能解决你的问题,请参考以下文章

渐变维度 (SCD) 类型 2 的不同场景

类型2 渐变维度和查询某个时间点的历史数据

检查渐变维度 2

需要帮助了解 SSIS 中 scd 的替代方案

PS基础教程[2]渐变工具的使用

大数据开发工程师需要了解的数仓中的维度设计