:)
如果我对 DW 进行建模,我总是会遇到这样的情况:我不知道该怎么办。
让我们举个例子来更容易理解:
我们有一个带有事实表订单的星型模式。谷物是每个客户每个订单的订购产品。事实表有一个称为“价格”的衡量标准,它是产品的支付价格。
我们有昏暗的桌子 命令 顾客 状态(已订购、已发货、已交付) 产品
因此事实表中的一行是来自客户的一份订单的一种产品的价格(当然还有外键)。
那么,我们如何处理订单的状态更新呢?随着从订购到发货再到交付的时间的推移,这显然会发生变化。我心中有一些解决方案,但总有一些问题困扰着我。有人知道最常用的答案是什么吗?
我们是否只需向事实表添加一行并带有时间戳?那么最后一个订购的产品会有 3 行(如果我们只考虑状态的变化)?时间戳会是一种测量还是一个附加维度?因为据我所知,事实表只有这两件事。另外,根据定义,该表仍然是可总结的(流程)吗?
使用缓慢变化的尺寸。但是,我们需要事实表中的每个条目在维度表中都有一个条目,据我所知,这似乎不是维度表的意义。
只需更改缓慢变化维度中条目状态的外键(覆盖事实中的状态ID)。但据我所知,更改事实表中的条目是不允许/常见的?
创建一个累积事实表,其中使用时间戳跟踪状态。但是我该如何处理产品的支付价格呢?这是我的主要测量,我想要测量的东西。我可以简单地将其添加到累积事实表中吗?
给你加油!! :)
您的思考方式是错误的 - 维度模型旨在满足您的报告要求,而不是反映源系统中可能发生的情况。
因此询问当源系统中的状态发生变化时会发生什么是错误的问题。正确的问题是询问状态的变化如何影响我的报告要求。一旦你回答了这个问题,你的维度模型的设计就会变得容易得多。
例如,您可能只想知道事实生成事件发生时的状态;或者您可能希望事实显示当前状态,无论事实何时创建;或者您可能想跟踪订单状态更改以及每次更改发生的日期。
所有这些场景都需要不同的维度建模设计