考虑一个众筹体系,世界上任何人都可以投资项目。
我已经实现了规范化的数据库设计,现在我正在尝试创建一个数据仓库(OLAP)。
我想出了以下内容:
这已被非规范化,我选择投资作为事实表,因为我认为以下示例可能是有用的业务需求:
完成了一些阅读(数据仓库工具包:Ralph Kimball)后,我觉得我的架构并不合适。这本书说要宣布粮食(在我的情况下每个投资),然后在宣布的粮食的背景下添加事实。
我所包含的一些事实似乎与谷物不相符: TotalNumberOfInvestors,TotalAmountInvestedInProject,PercentOfProjectTarget。
但我觉得这些可能很有用,因为你可以看到投资时这些数额是多少。
这些事实看起来合适吗?最后, TotalNumberOfInvestors 事实是否隐含地引用了投资者维度?
答案 0 :(得分:3)
我认为“每项投资一排”是一个很好的候选人。
事实表设计的问题在于,您应该包含实际上应该在数据应用程序(olap cube)中进行计算的列。
TotalNumberOfInvestors 可以通过统计投资者来计算。
应该从事实表中删除TotalAmountInvestedInProject ,因为它实际上是一个带有假设的计算。尝试按项目分组,然后获取 InvestmentAmount 的总和,这是一种更自然的方法。
PercentOfProjectTarget 的计算方法是将 FactInvestment.InvestmentAmount 的总和除以 DimProject.TargetAmount 的总和。进行此计算工作的约束是在报表中至少包含DimProject的成员。
希望这有帮助,
标记。
答案 1 :(得分:0)
在报告工具中计算这些附加度量,或在基础上创建一组聚合事实表。它们的粒度较小,仅引用维度的子集。
项目似乎是一个很好的候选人。它将是一个累积的快照事实表,您还可以使用它来跟踪项目的生命周期。