8

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

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

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

但我也对思考这个问题的其他方式感兴趣。其他人是如何解决的?我想知道数据仓库模式和设计,以及使该设计对客户端工具友好,以构建像上面的示例一样的报告。

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

我们正在使用 SQL Server,但我现在遇到的问题希望与平台无关。

4

2 回答 2

9

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

钻取只是意味着对两个或多个事实表进行单独的查询,其中每个查询的行标题由相同的符合属性组成。通过对公共维度属性行标题执行排序合并操作来对齐来自两个查询的答案集。BI 工具供应商通过各种名称引用此功能,包括拼接和多通道查询。

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

更多信息:

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

于 2014-01-13T22:23:10.407 回答
4

您描述的“幼稚解决方案”大多数时候是首选解决方案。

一个常见的例外是当您需要使用另一个事实表过滤一个事实的详细行时。例如,“显示我们今年未售出的商品的资本金(库存)”。您不能在一个查询中简单地总结资本占用。在这种情况下,如果您能够在一个共同的粒度上表达这两种度量,那么一个合并的事实可能是一个解决方案。

于 2014-01-17T16:41:59.110 回答