Хранилище данных - моделирование измерений - PullRequest
1 голос
/ 14 апреля 2011

Я новичок в BI / Datawarehousing, и после создания нескольких простых примеров мне нужно построить более сложную структуру. Мой проект изначально включал лицензии на продукты, и я измерял, сколько продано, по месяцам / годам и по программам, и просто подсчитывал количество лицензий.

Теперь необходимо ввести перепрыжки из этих метрик. Например, когда вы приходите к определенной группе лицензий, они хотят видеть совершенно разные их показатели. Например, если в марте 2011 года было продано 100 лицензий, сколько из них установило, активировало и отменило продукт. (мы отслеживаем эту информацию, но не в DW). Итак, я ищу лучший способ сделать это ... Я предполагаю, что первое, что я должен сделать, это добавить три измерения для установленных, активированных и отмененных - и иметь три таблицы фактов? Или есть одна таблица фактов с каждой лицензией, и есть строка для отмены, установки или активации? (поэтому одна лицензия может быть повторена). Или есть одна таблица фактов с различными полями для установки, отмены, активации? Кроме того, как вы связываете одну таблицу фактов с другой? Это через измерения, или они могут быть связаны каким-то другим образом?

Любая помощь будет высоко ценится!

EDIT:

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

Но они хотят видеть с указанием сроков, сколько было куплено, а из них сколько установлено. например, если таймфрейм - март, и 100 были проданы в марте, из этих 100 - сколько было установлено - даже если бы они могли быть установлены намного позже марта, и, следовательно, дата строки была бы не в том таймфрейме, который они ищут на .... это общая проблема? как это решается?

1 Ответ

4 голосов
/ 14 апреля 2011

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

Не совсем.Продажа лицензии - это факт.У него есть цена.

Продажа лицензии имеет такие измерения, как дата, продукт, клиент и программа.

«Установка» или «активация» - это событие изменения состояния лицензии.У вас есть «события» для каждой лицензии (продажа, установка, активация и т. Д.)

Таким образом, у лицензии есть факт «продажи», факт «установки» и факт «активации».Каждый из которых (минимально) связан со временем.

Или есть одна таблица фактов с каждой лицензией и строка для отмены, установки или активации?(поэтому одна лицензия может быть повторена).

Это дает наибольшую гибкость, поскольку каждое событие может быть богато несколькими измерениями.Затем можно организовать последовательность событий для предоставления истории лицензии.

Это работает очень хорошо.

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

Требуется, чтобы они могличтобы увидеть связанный факт.

Верно.Вы объединяете несколько строк из таблицы фактов вместе.Строка, в которой было продано событие, внешний соединен со строкой, в которой было установлено событие, внешний соединен со строкой, в которой событие было активировано, и т. Д. Это просто внешние соединения среди фактов.

Итак.Подсчет продаж в марте очень прост.Событие = "Продажа".Время - это все строки, где time.month = "march".Легко.

Количество продаж в марте, которые стали установить.Те же «продажи в марте», где пункт external объединился со всеми событиями «install» для этих лицензий.Количество «продаж» соответствует количеству (*).Количество установок может быть меньше, поскольку внешнее объединение вводит несколько нулей.

Количество продаж в марте, которые стали активациями.«Марш продаж», где пункт external объединился со всеми событиями «активации».Обратите внимание, что активация не имеет ограничения по дате.

Или есть одна таблица фактов с разными полями для установки, отмены, активации?

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

Сказав, что это не сработает "также", это означает, что он не дает максимальной гибкости.В некоторых случаях вам не нужна максимальная гибкость.В некоторых случаях отрасль (или нормативные акты) могут определять структуру, которая является достаточно фиксированной.

Кроме того, как вы связываете одну таблицу фактов с другой?Это через измерения, или они могут быть связаны каким-то другим образом?

Размеры по определению.В таблице фактов есть только две вещи - измерения и FK по размерам.

Некоторые измерения (например, «экземпляр лицензии») вырождены, потому что измерение может не иметь почти никаких используемых атрибутов, кроме PK.

Таким образом, у вас есть «проданный» факт, связанный с лицензией.необязательный факт «установлен», который связан с лицензией, и необязательный факт «активация», который связан с лицензией.Лицензия - это идентификатор объекта (суррогатный ключ базы данных) и, возможно, сам идентификатор лицензии (может быть, серийный номер лицензии или что-то вне базы данных).

Пожалуйста, воспользуйтесь инструментарием хранилища данных Ральфа Кимбалла, прежде чем делать что-либо еще.

...