了解渐变维度类型 2
Understanding Slowly Changing Dimension Type 2
我很难理解如何在我的场景中使用缓慢变化的维度类型 2。
我浏览了不同的教程网站,但它们不适合。
我有一个员工维度 table 包含:
+-----+---------------+------------+------------+
| id | employee | designation| Location |
+-----+---------------+------------+------------+
| 1 | Ola | CEO | Newyork |
| 2 | Ahmed | DEVELOPER | California |
| 3 | Ola | Manager | California |
+----------+----------+------------+------------+
我有一个帐户资料table
+-------+----------+
|emp_id | Amount |
+-------+-----------
| 1 | 2000000 |
| 2 | 300000 |
+----------+-------+
现在我们看到维度发生了变化,因此为同一个 Ola 员工提供了一个新 ID。
我们将如何处理 table 的事实?
事实Table中找不到Ola的新ID。
所以如果我们实际上添加一个新行,使用 Ola 的新 ID,我们如何 link 他们是同一名员工,当他们被不同地识别时,'primary key'.
我们如何区分这名员工不是新员工,实际上位置/名称已经更改。
我相信有很多方法可以做到这一点,这里是一种方法 - 在您的维度 Table 中有一个 "employee_Key",这对员工来说是独一无二的。所以你的尺寸 table 看起来像这样 -
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 |
您可以使用员工的 "New" ID 继续加载事实 table。在这种情况下,您将为该员工提供 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。 我浏览了不同的教程网站,但它们不适合。
我有一个员工维度 table 包含:
+-----+---------------+------------+------------+
| id | employee | designation| Location |
+-----+---------------+------------+------------+
| 1 | Ola | CEO | Newyork |
| 2 | Ahmed | DEVELOPER | California |
| 3 | Ola | Manager | California |
+----------+----------+------------+------------+
我有一个帐户资料table
+-------+----------+
|emp_id | Amount |
+-------+-----------
| 1 | 2000000 |
| 2 | 300000 |
+----------+-------+
现在我们看到维度发生了变化,因此为同一个 Ola 员工提供了一个新 ID。 我们将如何处理 table 的事实?
事实Table中找不到Ola的新ID。
所以如果我们实际上添加一个新行,使用 Ola 的新 ID,我们如何 link 他们是同一名员工,当他们被不同地识别时,'primary key'.
我们如何区分这名员工不是新员工,实际上位置/名称已经更改。
我相信有很多方法可以做到这一点,这里是一种方法 - 在您的维度 Table 中有一个 "employee_Key",这对员工来说是独一无二的。所以你的尺寸 table 看起来像这样 -
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 |
您可以使用员工的 "New" ID 继续加载事实 table。在这种情况下,您将为该员工提供 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.