事实表可以作为维度表吗?

时间:2018-02-22 08:24:46

标签: sql data-modeling data-warehouse business-intelligence

我正在通过Kimball's 'The data warehouse tooklit'进行探索,在那里我遇到了事实表充​​当维度的情况,但我对解释大多不满意,因为我不熟悉维度建模。

我的问题是

  1. 事实表可以作为维度表的实例/示例是什么? (要求提供一些简单的例子来理解)
  2. 这是一个好的设计吗?
  3. 我通过this tek-tips论坛阅读,但它对我没有帮助。

    原始来源:Kimball's article

    编辑

    除上述链接外,Kimball's aggregated facts还使我能够询问将聚合事实用作维度的情况。

2 个答案:

答案 0 :(得分:3)

Kimball并没有说"事实表充当维度"。他说数值有时可以建模为维度属性(维度表中的字段)或事实(事实表中的字段),或两者。

典型的例子是产品清单价格,例如MSRP(制造商建议零售价)。一些设计师会将其建模为事实(因为它是一个数字 - 即实际上是表" Sales")。其他人会把它建模成一个尺寸表格(即尺寸表"产品")。 Kimball所说的是你可以同时拥有两种模型。作为维度属性的MSRP可以用于过滤,而作为事实的MSRP可以用于进行计算(即,MSRP-销售价格=销售折扣)。

Sublte点是这些:

  • 如果您将产品价格定义为属性,则会使您的尺寸变为“慢慢变化的维度”,因为每次产品清单价格发生变化时,您都需要更改属性 - 这会增加您的负担ETL过程。
  • 如果您将产品价格建模为事实,如果事实表中有记录,您将只在星型模式中使用它。例如,如果某些产品在特定时期内没有销售,那么在您需要的情况下,您不会在系统中获得其定价。

在两个地方都有它可以为您提供最大的灵活性并简化模型的使用,但会增加ETL的工作量。所以,如果你需要这样的灵活性,它是一个很好的设计。如果您只打算以特定方式使用该值,则可以节省一些数据仓库工作。

答案 1 :(得分:2)

是的,它可以,有时也应该,取决于您要分析的内容以及如何分析。

当您分析销售机会时,通常会出现一个直接的例子。销售机会是维度的直接候选者,但如果从“分析销售渠道”的角度来看,特别是如果您将机会分解为“机会阶段”,则SalesOpportunity将用作维度对于“销售机会阶段”(这里的目标是分析特定销售机会如何通过阶段演变)以及作为事实(此场景中的业务问题是“有多少机会”)。

这篇文章对此有所了解: https://www.kimballgroup.com/2011/11/design-tip-140-is-it-a-dimension-a-fact-or-both/

有趣的是,Microsoft Analysis Services使您能够将表建模为维度,事实和“两者”。