Как и многое в нашей жизни, перемены неизбежны в атрибутах измерения. Большинство читателей Советов Разработчику хорошо знакомы с тремя базовыми техниками медленно меняющихся измерений (SCD):

Тип 1: Переписать атрибут заново.

Тип 2: Добавить еще одну запись в измерение

Тип 3: Добавить еще один атрибут

Если это для вас это в новинку, обратите внимание на колонку Ральфа от 22 апреля 2003 года в журнале Intelligent Enterprise,  “Soul of the Data Warehouse Part 3: Handling Time”.

Когда изменяются атрибуты измерения нам часто необходимо сохранить исторически точные значения, а также обеспечить возможность накопления исторических фактов на базе текущих характеристик. Потребность в этой возможности растет вместе с развитием аналитического сообщества. Двадцать лет назад аналитикам хватало таблиц с измерениями, которые обновлялись (переписывались) ежедневно, с использованием текущих атрибутов. Потом маятник качнулся в сторону точной и полной фиксации всех изменений с помощью SCD Тип 2. Теперь все больше людей хотят не только приготовить пирог (или стейк), а также и съесть его.

Несколько лет назад мы обсуждали комбинированный подход поддержки такой функциональности в Совете №15. Комбинирование приёмов обработки медленно изменяющихся измерений. В том Совете мы создавали строки Типа 2 для сохранения изменений исторического атрибута, в сочетании с одним или более дополнительными «текущими» атрибутами Типа 3 в каждой строке. Атрибут Типа 3 переписывается (как в случае Типа 1) для текущей и всех предыдущих строк Типа 2, так что аналитики могут выполнять запросы как к исторически точным атрибутам, так и к текущим значениям. Большая гибкость обеспечивается комбинированным подходом к SCD, хотя и ценой дополнительной сложности.

Физически, эти техника может быть реализована созданием таблицы измерений с двумя колонками (исторической «как было» и текущей) для каждого атрибута, требующего такой гибкости. В качестве альтернативного варианта, вы можете держать текущие значения всех атрибутов в отдельной таблице, соединяемой по естественному ключу с измерением (например Employee ID), вместо суррогатного ключа измерения. Отдельная таблица содержит всего одну строку текущих данных для каждого естественного ключа таблицы измерения; значения переписываются при каждом изменении. Наверняка тот же естественный ключ возникнет в строках измерения Типа 2 с уникальными суррогатными ключами. Для легкости использования основное измерение и отдельная таблица текущих значений могут быть объединены в представлении, в случае если это не несет серьезного ущерба производительности.

Если вам необходимо обеспечить фиксацию сотен текущих и исторических атрибутов в большой таблице измерения, техника описанная выше будет трудноприменима. В такой ситуации вам лучше рассмотреть включение в таблицу фактов естественного ключа измерения в качестве дополнительного внешнего ключа. Теперь у вас есть две схожие, но довольно различные таблицы измерения, ассоциированные с таблицей фактов. Во-первых, суррогатный ключ измерения соединяется с обычным измерением с исторически точными данными Типа 2. Эти атрибуты фильтруют или группируют факты по значениям атрибута в момент загрузки данных факта. Во-вторых, естественный ключ измерения (или статическая ссылка) соединяется с таблицей измерения только с текущими значениями Типа 1. Чтобы снизить риск введение пользователя в заблуждение, имена колонок в этой таблице должны начинаться с “current” (текущий). Эти атрибуты измерения используются для агрегации или фильтрации фактов по текущим значениям, независимо от значений в момент загрузки строки факта.

Вот всех ситуациях, описанных в этом Совете Разработчику, результаты запроса могут значительно отличаться в зависимости от того, какая таблица измерения использовалась для ограничения или группировки. Разные результаты допустимы, так как задавались разные вопросы. Как бы то ни было, эта возможность, допускающая ошибку или неверную интерпретацию, часто предоставляется только пользователям, понимающим описанную разницу.

 

Материал опубликован с разрешения компании Ralph Kimball Associates
Автор оригинала: Margy Ross
Перевод на русский язык: Антон Задорожный
Оригинальный документ располагается здесь


Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.

Читайте также: