在多个事实表之间加入维度

时间:2014-01-13 06:10:28

标签: sql-server data-warehouse business-intelligence dimension dimensional-modeling

如果请求的报告需要有关相同维度的摘要信息(并且具有相同的粒度),但基础数据存储在单独的事实表中,那么数据仓库设计的好方法是什么?

例如,一份报告显示每个员工每年支付的工资总额和报告的总费用,当时工资和费用记录在不同的事实表中。或者一份报告,列出公司销售的每个SKU每月的总销售额和每月收到的库存,当销售来自一个事实表并且接收来自另一个事实表时。

天真地解决这个问题看起来很简单:只需并行查询和聚合两个事实表,然后将聚合结果拼接在数据仓库或客户端应用程序中。

但我也有兴趣考虑其他方法来解决这个问题。别人怎么解决了?我想知道数据仓库架构和设计,以及使客户端工具设计友好,以构建报告,如上面的例子。

此外,这个“维度三明治”用例是否在规范数据仓库术语中有名称?如果是,则可以更轻松地通过Google进行研究。

我们正在使用SQL Server,但此时我提出的问题有望与平台无关。

2 个答案:

答案 0 :(得分:5)

我今天了解到这种技术被称为 Drilling Across

  

钻取简单意味着针对两个或多个进行单独查询   更多事实表,其中每个查询的行标题包含   相同的属性。答案从两个查询中设置   通过对公共执行排序合并操作来对齐   维度属性行标题。 BI工具供应商参考这个   各种名称的功能,包括针脚和多遍查询。

听起来像上面的天真解决方案(并行查询多个事实表并将结果拼接在一起)也是建议的解决方案。

更多信息:

非常感谢@MarekGrzenkowicz指出我正确的方向找到我自己的答案!我在这里回答它,以防其他人正在寻找同样的事情。

答案 1 :(得分:2)

"天真的解决方案"你所描述的大部分时间都是首选的。

一个常见的例外是当您需要使用另一个事实表过滤一个事实的详细行时。例如,"显示我们今年未售出的文章的资本筹集(库存)" 。您不能简单地在一个查询中总结资本约束。在这种情况下,如果您能够在共同的粮食上表达这两种衡量标准,那么综合事实就可以成为一种解决方案。