Совет №50
Бесфактовая таблица фактов? Звучит как «китовая креветка»?
Материал опубликован с разрешения компании Ralph Kimball Associates
Автор оригинала: Bob Becker (все
статьи)
Перевод на русский язык: Антон Задорожный
Оригинальный документ располагается здесь.
Бесфактовая таблица фактов кажется оксюмороном, как китовая креветка.
Как у вас может быть таблица фактов, которая не содержит ни одного
факта? Мы обсуждали основы бесфактовых таблиц фактов несколько раз
в наших книгах и статьях. В этом совете разработчику мы используем
бесфактовую таблицу фактов для дополнения наших стратегий медленно
меняющихся измерений.
Как вы возможно помните, бесфактовая таблица фактов фиксирует связи
многие-ко-многим между измерениями, но не содержит численных или
текстовых фактов. Они часто используются для записи событий и дополнительной
информации. Типичные примеры бесфактовых таблиц фактов включают:
Выявление акций продвижения продукта (для определения продвигаемых
продуктов которые не продаются)
Ведение посещаемости студентов или событий регистрации
Ведение страховых случаев
Определение перечней строений, услуг, оборудования для госпиталя
или университета
В сегодняшнем совете разработчику, представьте, что мы разрабатываем
схему для крупной компании потребительского сектора (выберите вашу
любимую потребительскую отрасль – авиаперевозки, страхование, кредитные
карты, банковская, коммуникации или интернет-магазин). Компания
ведет бизнес с десятками миллионов клиентов. В дополнение к типичным
требованиям в виде транзакционной схемы для отслеживания поведения
клиента и периодического снимка для определения тенденций, нашим
бизнес-партнерам необходима возможность просмотреть точный профиль
клиента (включающий десятки атрибутов) в любой момент времени. Постоянные
читатели могут помнить рассуждения Ральфа о похожей ситуации в 13-ом
совете. Он наметил технику, кода измерение само фиксирует события
изменения профиля как медленно меняющееся измерение Тип 2 (SCD Type
2), вместо того чтобы создавать таблицу фактов для захвата транзакций
по профилю. Как бы ни было, мы не сможем использовать технику совета
№13 для текущего сценария, дающего большие объемы данных (миллионы
клиентских строк) и потенциально высокую изменчивость (десятков
атрибутов).
Давайте представим, что мы разрабатываем основное клиентское измерение
(с атрибутами SCD Type 2 как минимум) вместе с четырьмя «мини» измерениями
для ведения изменений кредитных атрибутов клиента, его предпочтений,
маркетинговой сегментации/предрасположенностей и клиентской географии.
Пять внешних ключей входят таблицу фактов уровня транзакции, так
же как и в месячный снимок. Эти внешние ключи представляют «состояние»
клиента, когда строка факта загружена. Пока все неплохо, но нам
по-прежнему нужно поддерживать отображение профиля клиента в произвольный
момент времени. Мы рассматриваем использование другой таблицы фактов
периодического снимка, загружаемой ежедневно для каждого клиента,
фиксирующая в момент времени связи между клиентским измерением и
связанными мини-измерениями. Это приводит к загрузке десятков миллионов
снимков каждую ночь, за несколько лет исторических данных. Мы быстро
делаем расчеты и предпочитаем рассмотреть другие варианты.
В этот момент вы думаете: «Это отлично, но как насчет китовой креветки?».
Мы можем использовать бесфактовую таблицу фактов для фиксации во
времени связей между клиентским измерением и мини-измерениями. Мы
загружаем строку факта в бесфактовую таблицу каждый раз, когда происходит
изменение Типа 2 в базовом клиентском измерении или меняется связь
между базовым измерением и мини-измерениями. Эта бесфактовая таблица
фактов содержит внешние ключи к базовому клиентскому измерению и
каждому из четырех мини-измерений для загруженной строки. Затем
мы украсим эту конструкцию двумя датами, начала и окончания, для
определения профиля клиента в произвольный момент времени. Мы также
можем добавить простое измерение для обозначения текущего профиля
клиента, в дополнение к измерению «причина изменения» для указания
причины, приведшей к загрузке новой строки в бесфактовую таблицу
фактов.
Если вы нашли в сети интересные ссылки на ресурсы по технологиям
хранилищ данных, OLAP, CRM или data mining, и хотите поделиться
ими с другими, присылайте их.
Я с удовольствием размещу их на этом сайте.