事实 table 可以充当维度 table 吗?

Can a fact table act as dimension table?

我正在探索 Kimball's 'The data warehouse tooklit',在那里我遇到了事实 table 作为维度的场景,但我对解释不是很满意,因为我是维度建模的新手.

我的问题是

  1. 事实 table 可以充当维度 table 的 instances/examples 是什么? (要求举一些容易理解的例子)
  2. 设计的好吗?

我通读了 this tek-tips 论坛,但对我帮助不大。

原始来源:Kimball's article

编辑:

除了上述 link,Kimball's aggregated facts 还让我能够询问将聚合事实用作维度的场景。

Kimball 并没有说 "fact table is acting as dimensions"。他说数值有时可以建模为维度属性(维度 table 中的字段)或事实(事实 table 中的字段),或两者兼而有之。

一个典型的例子是产品标价,例如 MSRP(制造商建议零售价)。一些设计师会将其建模为事实(因为它是一个数字 - 即事实上 table "Sales")。其他人会将其建模为维度属性(即维度 table "Product")。 Kimball 的意思是您可以在同一个模型中同时拥有两者。 MSRP 作为维度属性可用于过滤,而 MSRP 作为事实可用于计算(即 MSRP - Sale Price = Sale Discount)。

要点是这些:

  • 如果您将产品价格建模为属性,它会使您的维度成为 "slowly changing dimension",因为每次产品标价发生变化时,您都需要更改属性 - 这会增加 ETL 过程的负担。
  • 如果您将产品价格建模为事实,那么只有在事实 table 中有记录时,您才会在星型模式中拥有它。例如,如果某些产品在特定时期没有销售,那么您将不会在系统中获得它们的标价以备不时之需。

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

是的,它可以,有时它应该,这取决于您要分析的内容以及分析方式。

当您分析销售机会时,经常会出现一个直接的例子。销售机会是维度的直接候选者,但如果您从 "analyze the sales pipeline" 的角度来看它,尤其是如果您将机会分解为 "opportunity stages",则销售机会将用作维度对于 "Sales Opportunity Stage"(这里的目标是分析特定销售机会如何通过阶段演变)以及事实(此场景中的业务问题是 "how many opportunities")。

这篇文章阐明了它: https://www.kimballgroup.com/2011/11/design-tip-140-is-it-a-dimension-a-fact-or-both/

有趣的是,Microsoft Analysis Services 使您能够将表建模为维度、事实和 "both"。