Понимание медленно меняющегося типоразмера 2
Мне трудно понять, как использовать медленно меняющийся тип измерения 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. Как бы мы справились в таблице фактов?
Новый идентификатор Олы не будет найден в таблице фактов.
поэтому, если мы добавим новую строку фактически с новым идентификатором Ola, как мы можем связать, что они являются одним и тем же сотрудником, если они идентифицированы по-разному, "первичным ключом".
Как бы мы ни различали, этот сотрудник не является новым сотрудником, и фактически местоположение / назначение изменилось.
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 |
Вы можете продолжить загрузку таблицы фактов с помощью "Нового" идентификатора сотрудника. В этом случае у вас будет 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.