Проектирование хранилища данных / звездообразной схемы - выбор фактов

Рассмотрим систему краудфандинга, при которой любой человек в мире может инвестировать в проект.

У меня есть нормализованный дизайн базы данных, и теперь я пытаюсь создать его хранилище данных (OLAP).

Я придумал следующее:

Схема звездочки

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

  • Посмотрите на инвестиции по типу проекта
  • Инвестиции по временным периодам, т.е. общая сумма вложений за неделю и т. Д.

Прочитав (Набор инструментов хранилища данных: Ральф Кимбалл), я чувствую, что моя схема не совсем правильная. В книге говорится, что нужно декларировать зерно (в моем случае каждое Инвестиции), а затем добавлять факты в контексте заявленного зерна.

Некоторые факты, которые я привел, похоже, не соответствуют зерну: TotalNumberOfInvestors, TotalAmountInvestedInProject, PercentOfProjectTarget.

Но я считаю, что они могут быть полезны, поскольку вы могли видеть, каковы эти суммы на момент инвестирования.

Эти факты кажутся уместными? Наконец, неявно ли сделан факт TotalNumberOfInvestors со ссылкой на измерение "Инвестор"?


person Jack    schedule 04.03.2015    source источник


Ответы (2)


Я думаю, что «по одной строке на каждую инвестицию» - хороший кандидат.

Проблема с дизайном вашей таблицы фактов заключается в том, что вы включаете столбцы, которые на самом деле должны быть вычислениями в вашем приложении данных (кубе ​​olap).

TotalNumberOfInvestors можно рассчитать путем отдельного подсчета инвесторов.

TotalAmountInvestedInProject следует удалить из таблицы фактов, поскольку на самом деле это расчет с предположениями. Попробуйте сгруппировать по проектам, а затем взять сумму InvestmentAmount, что является более естественным подходом.

PercentOfProjectTarget рассчитывается путем деления суммы FactInvestment.InvestmentAmount на сумму DimProject.TargetAmount. Ограничением для выполнения этих расчетов является наличие в вашем отчете хотя бы одного члена DimProject.

Надеюсь это поможет,

Отметка.

person Mark Heuckeroth    schedule 18.03.2015

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

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

person Marek Grzenkowicz    schedule 04.03.2015