Проектирование хранилища данных с несколькими таблицами фактов - PullRequest
16 голосов
/ 22 июля 2010

Я новичок в хранилищах данных.Во-первых, я хочу уточнить, чем находится моя копия набора инструментов хранилища данных на пути к моему почтовому ящику (обычная почта: P).Но я уже изучаю все это с тем, что нахожу в сети.

Что я не нахожу в сети, тем не менее, это то, что нужно делать, когда у вас больше, чем один фактDW.В моем случае (страхование) у меня есть возмещения, которые происходят нерегулярно.Один клиент не может иметь ни одного в течение 3 месяцев, а затем десять в те же месяцы.С другой стороны, у меня есть «абонентская плата» (я не уверен, что это правильный английский термин, но вы понимаете), которые происходят каждый месяц или каждые три месяца.Мне кажется, что это два разных факта.

Эти два типа слабо связаны некоторыми измерениями, такими как клиент или «страховой продукт».Теперь это два разных хранилища, на которых мне нужно создать два разных отчета, а затем соединить отчеты за пределами DW?Или есть способ спроектировать это, чтобы соответствовать одному спуску DW.Или я должен объединить эти два факта в одном?Я бы, вероятно, потерял бы детализацию при возврате денег.

В каком-то блоге, который я читал, говорилось, что у DW всегда есть одна таблица фактов.Другие упоминают этап разработки таблиц фактов с помощью S, но нет четкой инструкции о том, существует ли между ними связь или они являются просто отдельными компонентами одного и того же проекта DW.

Кто-нибудь знаетнекоторые ссылки на эту точную часть дизайна DW?

Ответы [ 3 ]

22 голосов
/ 10 октября 2014

Я понимаю, что отвечаю на старый пост, но меня не устраивает ни один из предоставленных ответов. Я чувствую, что ни один не ответил на вопрос.

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

Ответ, который вы ищете, заключается в том, что вам нужно «детализировать», что в основном означает, что вы запрашиваете каждую таблицу фактов (схему) отдельно и объединяете результаты. Это может происходить с использованием SQl или, предпочтительно, с помощью имеющегося у вас инструмента отчетности / аналитики, который ссылался на хранилище данных. Вместо того, чтобы дублировать ответы о том, как это сделать, я направлю всех к двум очень хорошим статьям:

Крис Адамсон: три способа бурения

и

Стоит со склада - бурение через Ральф Кимбалл

18 голосов
/ 23 июля 2010

Вы можете иметь столько таблиц фактов, сколько захотите. В вашем примере у вас может быть что-то вроде:

fact_ins_transaction

dimProduct перечисляет несколько продуктов, включая подписку. dimTransactionType будет перечислять возможные транзакции (покупка, возврат, плата за повторную подписку ...)

Теперь предположим, что вы заинтересованы в упрощенной отчетности по подписке, вы можете добавить factSubscription следующим образом:

fact_ins_subscription

10 голосов
/ 22 июля 2010

Отвечая на ваши вопросы задом наперед.

Хранилище данных может иметь более одной таблицы фактов. Однако вы хотите минимизировать объединения между таблицами фактов. Можно дублировать фактическую информацию в разных таблицах фактов.

Из упомянутых вами объектов:

Возврат является фактом. Отметка времени - это измерение факта возврата.

Абонентская плата является фактом. Отметка времени - это измерение факта платы за подписку.

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

Если вы знали, что может быть не более 3-х возмещений (в качестве примера), то вы исключили бы таблицу фактов возмещения клиента и поместили бы 3 столбца возмещения в таблице клиента.

Вы также упоминаете страхование. Клиент может иметь более одной политики. Итак, у нас есть третья таблица фактов.

Хранилище данных обычно проектируется с использованием звездообразной схемы . Схема «звезда» в основном представляет собой одну таблицу фактов, связанную с одной или несколькими таблицами измерений. Вероятно, у вас будет более одной звезды в хранилище данных, поскольку мы уже определили 3 таблицы фактов.

...