Я пытаюсь спроектировать хранилище данных для поставщика лицензий, который продает лицензии для электронной коммерции и других мест. Они хотят отслеживать продажи, жизненный цикл продукта и активность. Это означает, что существуют различные типы продаж (например, новая покупка, рекламная покупка, продление) и разные события / состояния лицензии, например, - лицензия может быть установлена, обновлена, активирована, зарегистрирована. Лицензия может быть продлена много раз (в разные даты).
Так что я думал, что мои измерения будут очень простыми - дата, продукт, источник, тип продажи и событие / состояние. У меня было бы две таблицы фактов; один предназначен для продаж, а другой - для событий, оба имеют внешние ключи для таблиц измерений. Мои таблицы фактов были бы таблицей фактов, где каждое событие добавляло бы новую строку - следовательно, лицензии можно повторять. Однако в требованиях говорится, что они могут перекрестно ссылаться на эти два факта, а также на параметры типа продажи и события. Например, если кто-то видит, что продукт «А» имеет 100 продаж в американском интернет-магазине типа «новая покупка», то он хочет увидеть, сколько из «этих» 100 лицензий также было активировано ... и тогда, возможно, они будут хотите увидеть, из числа активированных людей, сколько зарегистрировалось ... и затем (обратно к типу продажи), сколько из тех, кто зарегистрировался, сколько из них "обновили". И я не могу действительно определить иерархию, потому что у вас может быть множество таких комбинаций ...
Как я могу это сделать? Пока я читаю, я обнаружил, что нет никакого способа связать два факта на основе самой лицензии (что мне и нужно сделать).
Кроме того, я также подумал, что, возможно, у меня может быть 1 таблица фактов, и я могу «технически» объединить тип продажи и тип события в большое измерение типа события. Таким образом, в таблице фактов будет большая таблица фактов транзакции, которая будет иметь четный внешний ключ к измерению событий. Но, тем не менее, теперь у меня есть таблица фактов со строкой для каждого события, которое происходит с лицензией. Лицензия повторяется, и одно событие может появиться для события более одного раза (в разные даты). Итак, если я решу просмотреть итоги по событию, как я могу узнать, сколько из этих лицензий также существует для другого события?
Мне нужно предоставить все эти цифры в качестве меры, чтобы бизнес-пользователь мог видеть их на лету (используя любой браузер OLAP, который они хотят использовать)
примечание: я использую службы анализа SQL-сервера и SQL-сервер 2008 r2
Просто для справки, вот что у меня сейчас:
- DimProducts (PK: ProductID и другие атрибуты)
- DimDate (PK: DateKey и другие атрибуты)
DimEvent (PK: EventID и другие атрибуты)
FactLicenses (FK: ProductID; FK: DateKey; FK: EventID и поле лицензии (varchar))
Итак, у меня повторяется лицензия с событием, которое происходит каждый раз, когда с лицензией что-то происходит (установлено, активировано, обновлено, отменено, обновлено (снова). Возможно, есть одна лицензия с тем же идентификатором события, но никогда тот же DateKey. Первичным ключом таблицы является DateKey + EventID + License
EDIT:
Итак, я читал во многих местах, что таблица фактов в такой ситуации должна быть таблицей накопления фактов, в которой есть несколько столбцов, указывающих на один и тот же (тип) измерения - (т.е. дату), и что я должен создать ролевое измерение для каждого из них. Но как вы учитываете тот факт, что лицензия может быть продлена несколько раз, и может быть установлена несколько раз, и т. Д ...?