Power BI中将度量作为维度进行建模的优缺点

​小伙伴们对于建模或是星型模型在Power BI中想必都非常熟悉:在星型模型中,我们至少要有一个事实表,在事实表中,我们将有两种主要类型的列:维键(将事实表链接到维表)和度量(用于存储所需的数据)汇总和分析。下面就和大家分析个例子:这是一个名为Sales的事实表的简单示例,其中包含三个维键列(产品、商店、顾客)和三个度量列(销售额、税金、销售量):

 

 

不过,我们经常会看到有人是这样来对事实表进行建模:不取消数据透视的每个度量的单独列,而是在事实表中为每个度量值创建一行,使用一个列来存储所有度量值并创建一个新维度,以允许用户选择所需的度量值。这是另一个事实表的示例,称为Sales Unpivot,显示了如何使用此技术来重构来自上面Sales事实表的数据:

 

 

在此事实表中,维键保持不变,但是列将度量的所有数据存储在原始表中,并且“measure name”列告诉你在任何给定的行中存储哪种类型的度量值。我们将此方法称为“度量维度”方法:

 

使用“度量维度”方法构建事实表有一些优点,例如:

  • 你可以在报告中使用切片器来选择显示在视觉对象中的度量;

  • 你可以轻松添加新度量,而不必在事实表中添加新列;

  • 你可以使用行级安全性来控制用户可以访问哪些度量;

     

     

但尽管如此,任何时候只要偏离常规维度建模,都可能会在以后遇到问题,这个方法也不例外。怎么会这么说呢,接下来就让我们一起看看将度量作为维度进行建模的一些缺点。

 

格式设置

 

首先值得我们注意的是,Sales fact表中的“Sales”和“Tax” 度量列是货币值,“Volume Sold”列包含小数点后四位的值。当每个度量值都是单独的列时,很容易为不同的度量值设置不同的格式:

 

 

但是,当所有值都存储在一列中时(如“度量维度”示例中所示),格式化就不是那么简单了。我们也许可以对所有数据使用一种通用格式:

 

 

但这并不理想,当然,我们可以新建DAX度量并对其进行适当的格式化,但是随后我们会发现这将失去这种方法的灵活性。

 

压缩

 

更严重的是,与使用“度量维度”方法相比,Power BI在存储和压缩常规事实表中的数据方面做得更加高效,这对查询性能产生了影响。使用DAX Studio中的“查看指标”按钮可以查看每个表的数据存储方式的详细信息。以下是一些精选的亮点:

 

 

首先,请注意Sales Unpivot表(使用度量维度方法)比Sales表大66%。还请注意,在Sales表中,“Sales”和“Tax” 度量列(包含货币值)可以使用通用数据类型(此处显示为Decimal,十进制),这意味着它们可以使用值编码;只有“Volume Sold”列需要使用十进位(制)数据类型(在这里显示为Double)存储,并且必须使用哈希编码。由于Sales表中存储的所有数值都是用十进制编码列存储的。正如本文所解释的,值编码可以给你带来很多性能上的好处。

 

计算复杂度

 

当我们开始构建更复杂的DAX计算时,度量维度方法的缺点变得更加明显。假设我们希望报表中有一个显示“Sales”、“Tax”和从销售额中减去税款的指标,称为税后销售额:

 

 

注:在大多数情况下,我们会为度量维度创建一个单独的维度表,但是为了使事情变得简单,没有必要这样做。

 

如果我们希望其他人在我们的数据集上建立度量,那么这样的做法又会增加计算的复杂度,因为计算功能并不是一个简单且合适的方式。

 

计算性能

 

最后,在度量维度中还需要承受一些对性能不好的影响。以上述中的税后销售为例,以下是DAX Studio中的“Server Timings”选项卡为与可视化显示Sales、Tax和Sales After Tax相关联的查询显示的内容:

 

 

顺便提醒下只有一个存储引擎查询:DAX fusion已启用,因此可以在同一扫描中检索所需的Sales和Tax值。

 

但是,这是使用“度量维”方法为同一视觉显示的“Server Timings”选项卡,以及使用上面显示的“Sales Unpivot”表为第二组度量显示的视觉效果:

 

 

此查询不仅速度较慢,而且现在有两个存储引擎查询:一个用于获取Sales数据,另一个用于获取Tax数据。由于需要单独的检测来获取每个度量值,所以在可视化中的度量值越多,或者计算所需的度量值越多,就需要进行更多的检测。这很快就会造成一个很大的性能问题,尤其是每次检测都比较慢的情况下,这种情况更有可能发生,因为度量维度方法意味着Power BI无法有效压缩数据。

 

结论

 

虽然使用它确实有一些优点,但其还是弊大于利。感兴趣的小伙伴也可以通过使用DAX Studio查看一下性能的影响。

 

推荐阅读

 

【2020】Power BI 8月产品功能更新

商业数据分析大师进阶之路

报表迁移 | 如何在多个工作区之间迁移Power BI报表

了解LOOKUPVALUE

为什么Power BI运行两次我的SQL查询?

 

技术交流

1.Power BI免费下载:http://www.yeacer.com/

    Microsoft Power BI Desktop中文最新版:下载地址

2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。 

   Power Data技术交流群:702966126 (验证注明:博客园Power BI) 

   更多精彩内容请关注微信公众号:悦策PowerBI          


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载。
posted @ 2020-09-09 17:47  PowerBI365  阅读(1272)  评论(0编辑  收藏  举报