0

在我的场景中,我很难理解如何使用缓慢变化的维度类型 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。我们将如何在事实表中进行管理?

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

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

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

4

1 回答 1

4

我相信有很多方法可以做到这一点,这是一种方法 - 在您的维度表中有一个“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.
于 2016-10-22T06:25:08.140 回答