设计数据仓库/星型模式 - 选择事实

时间:2015-03-04 15:35:21

标签: data-warehouse dimensional-modeling star-schema

考虑一个众筹体系,世界上任何人都可以投资项目。

我已经实现了规范化的数据库设计,现在我正在尝试创建一个数据仓库(OLAP)。

我想出了以下内容:

Star Schema

这已被非规范化,我选择投资作为事实表,因为我认为以下示例可能是有用的业务需求:

  • 按项目类型查看投资
  • 按时间段投资,即每周投资总额等。

完成了一些阅读(数据仓库工具包:Ralph Kimball)后,我觉得我的架构并不合适。这本书说要宣布粮食(在我的情况下每个投资),然后在宣布的粮食的背景下添加事实。

我所包含的一些事实似乎与谷物不相符: TotalNumberOfInvestors,TotalAmountInvestedInProject,PercentOfProjectTarget。

但我觉得这些可能很有用,因为你可以看到投资时这些数额是多少。

这些事实看起来合适吗?最后, TotalNumberOfInvestors 事实是否隐含地引用了投资者维度?

2 个答案:

答案 0 :(得分:3)

我认为“每项投资一排”是一个很好的候选人。

事实表设计的问题在于,您应该包含实际上应该在数据应用程序(olap cube)中进行计算的列。

TotalNumberOfInvestors 可以通过统计投资者来计算。

应该从事实表中删除

TotalAmountInvestedInProject ,因为它实际上是一个带有假设的计算。尝试按项目分组,然后获取 InvestmentAmount 的总和,这是一种更自然的方法。

PercentOfProjectTarget 的计算方法是将 FactInvestment.InvestmentAmount 的总和除以 DimProject.TargetAmount 的总和。进行此计算工作的约束是在报表中至少包含DimProject的成员。

希望这有帮助,

标记。

答案 1 :(得分:0)

在报告工具中计算这些附加度量,或在基础上创建一组聚合事实表。它们的粒度较小,仅引用维度的子集。

项目似乎是一个很好的候选人。它将是一个累积的快照事实表,您还可以使用它来跟踪项目的生命周期。