在我的场景中,我很难理解如何使用缓慢变化的维度类型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。
因此,如果我们实际添加一个新行,并使用新的ID Ola,那么当它们被识别为不同时,我们如何链接它们是同一个员工,'主键'。
我们如何区分这名员工不是新员工,实际上位置/名称已经改变。
答案 0 :(得分:3)
我确信有很多方法可以做到这一点,这是一种方式 - 在维度表中有一个“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.