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

Pra*_*t G 1 sql data-modeling data-warehouse business-intelligence

我正在通过Kimball 的“数据仓库 takelit”进行探索,在那里我遇到了事实表充​​当维度的场景,但我主要对解释不太满意,因为我是维度建模的新手。

我的问题是

  1. 事实表可以充当维度表的实例/示例是什么?(要求举一些简单的例子来理解)
  2. 这是一个好的设计吗?

我通读了这个 tek-tips论坛,但它并没有很好地帮助我。

原始来源:Kimball 的文章

编辑:

除了上面的链接,Kimball 的汇总事实还使我能够询问将汇总事实用作维度的场景。

RAD*_*ADO 5

Kimball 并不是说​​“事实表充当维度”。他说数值有时可以建模为维度属性(维度表中的字段)或事实(事实表中的字段),或两者兼而有之。

一个典型的例子是产品标价,例如 MSRP(制造商建议零售价)。一些设计者会将其建模为事实(因为它是一个数字——即实际上表“销售额”)。其他人会将其建模为维度属性(即,在维度表“产品”中)。Kimball 所说的是,您可以在同一模型中同时拥有两者。MSRP 作为维度属性可用于过滤,而 MSRP 作为事实可用于计算(即,MSRP - 销售价格 = 销售折扣)。

微妙的点是这些:

  • 如果您将产品价格建模为一个属性,它将使您的维度成为“缓慢变化的维度”,因为每次产品标价更改时,您都需要更改该属性 - 这会增加您的 ETL 过程的负担。
  • 如果您将产品价格建模为事实,则只有在事实表中有记录时,才会在星型模式中使用它。例如,如果某些产品在特定时期内没有销售,那么您将不会在系统中看到它们的标价,以备不时之需。

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