1

我有一个关于创建维度模型和处理不同粒度级别的问题。

我想知道这两种方法中哪一种最好,为什么。或者,如果有另一种更好的方法。

我使用的场景很简单:我有 2 个维度,Region 和 Customer 以及 1 个事实,Sales。

这变成了两个维度表,一个用于区域,另一个用于客户,其中包含销售的事实表如下所示:

在此处输入图像描述

现在我想按地区汇总销售额。但我不确定哪个是最好的方法。

我是否应该按地区汇总销售额,然后将数据加入事实表中,以便模型如下所示:

在此处输入图像描述

或者我应该创建一个新表来保存聚合值,其中键连接到事实和区域维度表,如下所示:

在此处输入图像描述

还是有另一种方法可以胜过这两种方法?

感谢您的智慧和投入。

谢谢

4

1 回答 1

5

您的第一个图表允许您查询按区域聚合的事实,但我假设您出于性能原因正在寻找预聚合区域级结果。

聚合事实的标准技术是在您需要的级别创建一个单独的事实表,以补充主要事实。理想情况下,您应该有一个查询工具,该工具知道您何时可以从使用聚合事实中受益。

聚合的事实将只有 RegionKey 和 Sales in(即区域维度的外键)。这与您的第二个解决方案类似,但与汇总数据的事实没有任何联系。没有必要:您已经可以从主要事实本身看到哪些详细事实构成了聚合。

您的第一个解决方案“混合了事实”,不推荐使用。事实表应该有一个明确说明的粒度,以便您知道每一行代表什么,例如对客户的销售量度。如果您包含汇总数字,则这不适用于一位客户的销售(或仅一位 customerkey),如果您在查询时不理解,您可能会重复计算。事实上,理想情况下,衡量标准应该是跨所有维度的“加法”:您无法将 RegionSales 汇总数字与除地区以外的任何内容相加。

然而,现代 BI 工具和数据库系统的特性具有大大减少对聚合事实的需求的性能特性。列式数据库(或 SQL Server 等关系数据库上的列存储索引)、内存关系数据模型(如 Power BI 中的那些)都有助于这种查询在没有特殊聚合表的情况下快速运行。这很重要,因为让您的聚合表保持最新并与您的基本事实同步可能会很痛苦。

于 2018-04-20T12:01:11.113 回答