Совет №50. Бесфактовая таблица фактов? Звучит как «китовая креветка»?
Бесфактовая таблица фактов кажется оксюмороном, как китовая креветка. Как у вас может быть таблица фактов, которая не содержит ни одного факта? Мы обсуждали основы бесфактовых таблиц фактов несколько раз в наших книгах и статьях. В этом совете разработчику мы используем бесфактовую таблицу фактов для дополнения наших стратегий медленно меняющихся измерений.
Как вы возможно помните, бесфактовая таблица фактов фиксирует связи многие-ко-многим между измерениями, но не содержит численных или текстовых фактов. Они часто используются для записи событий и дополнительной информации. Типичные примеры бесфактовых таблиц фактов включают:
- Выявление акций продвижения продукта (для определения продвигаемых продуктов которые не продаются)
- Ведение посещаемости студентов или событий регистрации
- Ведение страховых случаев
- Определение перечней строений, услуг, оборудования для госпиталя или университета
За дополнительной информацией о бесфактовых таблицах фактов обратитесь к ранним статьям Ральфа What Didn’t Happen и Factless Fact Tables.
В сегодняшнем совете разработчику, представьте, что мы разрабатываем схему для крупной компании потребительского сектора (выберите вашу любимую потребительскую отрасль – авиаперевозки, страхование, кредитные карты, банковская, коммуникации или интернет-магазин). Компания ведет бизнес с десятками миллионов клиентов. В дополнение к типичным требованиям в виде транзакционной схемы для отслеживания поведения клиента и периодического снимка для определения тенденций, нашим бизнес-партнерам необходима возможность просмотреть точный профиль клиента (включающий десятки атрибутов) в любой момент времени. Постоянные читатели могут помнить рассуждения Ральфа о похожей ситуации в совете №13. Он наметил технику, кода измерение само фиксирует события изменения профиля как медленно меняющееся измерение Тип 2 (SCD2), вместо того чтобы создавать таблицу фактов для захвата транзакций по профилю. Как бы ни было, мы не сможем использовать технику совета №13 для текущего сценария, дающего большие объемы данных (миллионы клиентских строк) и потенциально высокую изменчивость (десятков атрибутов).
Давайте представим, что мы разрабатываем основное клиентское измерение (с атрибутами SCD2 как минимум) вместе с четырьмя «мини» измерениями для ведения изменений кредитных атрибутов клиента, его предпочтений, маркетинговой сегментации/предрасположенностей и клиентской географии. Пять внешних ключей входят таблицу фактов уровня транзакции, так же как и в месячный снимок. Эти внешние ключи представляют «состояние» клиента, когда строка факта загружена. Пока все неплохо, но нам по-прежнему нужно поддерживать отображение профиля клиента в произвольный момент времени. Мы рассматриваем использование другой таблицы фактов периодического снимка, загружаемой ежедневно для каждого клиента, фиксирующая в момент времени связи между клиентским измерением и связанными мини-измерениями. Это приводит к загрузке десятков миллионов снимков каждую ночь, за несколько лет исторических данных. Мы быстро делаем расчеты и предпочитаем рассмотреть другие варианты.
В этот момент вы думаете: «Это отлично, но как насчет китовой креветки?». Мы можем использовать бесфактовую таблицу фактов для фиксации во времени связей между клиентским измерением и мини-измерениями. Мы загружаем строку факта в бесфактовую таблицу каждый раз, когда происходит изменение Типа 2 в базовом клиентском измерении или меняется связь между базовым измерением и мини-измерениями. Эта бесфактовая таблица фактов содержит внешние ключи к базовому клиентскому измерению и каждому из четырех мини-измерений для загруженной строки. Затем мы украсим эту конструкцию двумя датами, начала и окончания, для определения профиля клиента в произвольный момент времени. Мы также можем добавить простое измерение для обозначения текущего профиля клиента, в дополнение к измерению «причина изменения» для указания причины, приведшей к загрузке новой строки в бесфактовую таблицу фактов.
Материал опубликован с разрешения компании Ralph Kimball Associates
Автор оригинала: Bob Becker
Перевод на русский язык: Антон Задорожный
Оригинальный документ располагается здесь
Для удобства отслеживания новых публикаций рекомендуем подписаться на рассылку или на канал RSS.