我正在构建一个多维数据仓库,并学习如何从仓库中的源系统对各种业务流程进行建模。
我目前正在将数据仓库中源系统中的“投标”(工作投标)建模为包含以下信息的事实表:
- 投标金额
- 预计收入
- 销售人员
- 投标状态(有效、待定、拒绝等)
- 等等
问题是投标(或我试图建模的大多数其他过程)可以经历各种状态并在源系统中的任何给定时刻更新其信息。根据 Ralph Kimball 的说法,事实表只有在被认为是“累积快照”时才应该更新,而且我确信并非所有这些过程都会被以下定义视为“累积快照”。
根据 Kimball 小组的建议,这些类型的流程应该如何在数据仓库中建模?此外,哪种类型的事实表适用于投标(鉴于我上面概述的事实)?
摘自http://www.kimballgroup.com/2008/11/fact-tables/
交易粒度对应于在单个瞬间进行的测量。杂货店哔哔声是一种交易谷物。测量的事实仅对那个瞬间和那个事件有效。下一个测量事件可能会晚一毫秒或下个月发生,或者永远不会发生。因此,事务粒度事实表是不可预测的稀疏或密集。我们不能保证所有可能的外键都会被表示。事务粒度事实表可能非常庞大,其中最大的包含数十亿条记录。
周期性快照粒度对应于预定义的时间跨度,通常是财务报告期。图 1 显示了每月帐户定期快照。测量的事实总结了时间跨度期间或结束时的活动。定期快照粒度提供了强有力的保证,即使没有活动,所有报告实体(例如图 1 中的银行账户)都将出现在每个快照中。周期性快照是可预见的密集的,应用程序可以依赖始终存在的键组合。定期快照事实表也会变大。一家拥有 2000 万个账户和 10 年历史的银行在每月账户定期快照中将有 24 亿条记录!
累积快照事实表对应于具有明确定义的开始和结束的可预测过程。订单处理、索赔处理、服务呼叫解决和大学录取是典型的候选人。例如,用于订单处理的累积快照的粒度通常是订单上的行项目。请注意,在图 1 中,有多个日期表示订单经历的标准场景。随着流程从头到尾逐步进行,累积的快照记录会被重新访问和覆盖。由于这种覆盖策略,累积快照事实表通常比其他两种类型小得多。