在事实表中包括平均值

时间:2014-11-04 05:18:06

标签: data-warehouse

这是关于数据仓库的问题,我听说过,你不允许在事实表中包含Average,我不知道为什么,谁能告诉我为什么,一个例子会很好,谢谢。

1 个答案:

答案 0 :(得分:0)

采用以下事实表设计:

date_id, quantity_sold, amount_sold, avg_price

其中avg_price定义为amount_sold / quantity_sold,即每个产品的平均价格。

现在,想象一下这种情况:

  • 在第1日,您销售1单位产品1,价格100和99单位产品2,价格1;
  • 在第2天,您销售10件产品1,而不销售产品2。

您可以获得下表:

date_id, quantity_sold, amount_sold, avg_price
1, 100, 199, 1.99
1, 10, 1000, 100

你无法聚合avg_price来为你提供有意义的东西。平均值(100,1.99)不是两天的平均价格;没有办法汇总这两个数字并得到实际的平均价格。

从该事实表中获取实际avg_price的唯一方法是获取两个主要元素的总和并将它们分开,

sum( amount_sold) / sum( quantity_sold),

返回1199/110 = 10.9。

因此,该事实表上的平均值是无意义的数字。

以不同的方式表达:除非你也知道每个子集的大小,否则不可能将一个集合的平均值表示为不同子集的平均值的函数。