Как создать таблицу фактов истории?

У меня есть несколько объектов в моем хранилище данных:

  1. Person - с атрибутами personId, dateFrom, dateTo и другими, которые могут быть изменены, например, фамилия, дата рождения и т. Д. - медленно меняющееся измерение

  2. Document - идентификатор документа, номер, тип

  3. Address - addressId, город, улица, дом, квартира

Отношения (Персона и Документ) - "Один ко многим", а (Персона и Адрес) - "Многие ко многим".

Моя цель - создать таблицу фактов истории, которая может ответить на следующие вопросы:

  1. Какие лица с какими документами проживали по указанному адресу на определенную дату?

2. Какая история резидентов имеет определенный адрес в определенный интервал времени?

Это не только для того, для чего разработан DW, но я думаю, что это самая сложная вещь в дизайне DW.

Например, мисс Браун с personId=1, документы с documentId=1 и documentId=2 жили по адресу с addressId=1 с 01.01.2005 по 02.02.2010, а затем перемещались в addressId=2, где был проживает с 03/03/2010 по настоящее время (NULL?). Но она поменяла фамилию на миссис Грин с 04/05/2006 и ее первый документ с documentId=1 на documentId=3 с 06/07/2007. Мистер Блэк с personId=2, documentId=4 проживал по адресу addressId=1 с 02/03/2010 по настоящее время.

Ожидаемый результат по нашему запросу для вопроса 2, где addressId=1 и интервал времени с 01.01.2000 г. по настоящее время, должен быть таким:

Ряды:

last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006

last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007

last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010

last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL

У меня была идея создать таблицу фактов с составным ключом (personId, documentId, addressId, dateFrom), но я понятия не имею, как загрузить эту таблицу и затем получить ожидаемый результат с этой структурой.

Буду рад любой помощи!

1 ответ

Решение

Интересный вопрос @Argnist!

Итак, чтобы создать общий язык для моего примера, вы хотите

  • DimPerson (PK=kcPerson, ключ suggorate для уникальных Persons=kPerson, тип 2 dim)
  • DimDocument (PK = kcDocument, суггоратный ключ для уникальных документов =kDocument, тип 2 dim)
  • DimAddress (PK = kcAddress, ключ suggorate для уникальных адресов =kAddress, тип 2 dim)

Коллега написал короткий блог об использовании двух суррогатных ключей, чтобы объяснить вышеперечисленные пункты " Использование двух суррогатных ключей в измерениях".

Я всегда добавлял бы DimDate с PK в форме yyyymmdd в любое хранилище данных с дополнительными столбцами атрибутов.

Тогда вы будете иметь свою таблицу фактов как

  • FactHistory (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDate) плюс любые дополнительные меры.

Затем, присоединившись к "kc", вы можете показать информацию о текущем измерении Person/Document/Address. Если вы присоединились к "k", вы можете отобразить историческую информацию об измерениях "Человек / Документ / Адрес".

Недостатком этого является то, что эта таблица фактов нуждается в одной строке для каждой комбинации человек / документ / адрес / дата. Но на самом деле это очень узкая таблица, так как в таблице просто есть несколько внешних ключей.

Преимущество этого в том, что вы можете легко задавать вопросы, которые вы задавали.

В качестве альтернативы вы могли бы иметь свою таблицу фактов как

  • История фактов (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDateFrom, kDateTo) плюс любые дополнительные меры.

Это, очевидно, намного более компактно, но запрос становится более сложным. Вы также можете просмотреть таблицу Fact, чтобы упростить запрос!

Выбор решения зависит от частоты изменения данных. Я подозреваю, что это не изменится так быстро, поэтому альтернативный дизайн таблицы фактов может быть лучше.

Надеюсь, это поможет.

Другие вопросы по тегам