很多伙伴问起,如何查看 Power BI 数据模型到底会占用多少内存,这的确是个问题。本文对此做出简单说明。
大家都知道 Power BI 会对数据进行类似压缩的存放,这就导致数据模型占用内存的空间其实是动态的。本文先来揭示这个过程,再给出查看内存占用的方法。
PowerBI 的 PBIX 文件大小表示了存放在硬盘上的所有内容,因此,它并不能真实反应数据模型的大小。
在我们加载数据进入 Power BI Desktop 以后,数据会被编码(类似高度压缩)重新存放,这会降低实际数据大小,一般是在硬盘上保存大小的十分之一,甚至压缩程度更甚。
但是在进行某些操作的时候,被压缩了的数据可能会重新解开压缩释放出来。这就好比是编排好的书,放在书架上,如下:
现在的问题是,如果你要找某几句话,你就需要把书架的书重新摊开,再找,如下:
很显然,把书全部铺开的话,会占用很大很大的桌子。
Power BI 是这样工作的:
这个过程容易理解。那么问题来了:
什么操作会导致解开压缩,也就是展开堆放整齐的书呢?
以下操作将导致解压缩或者部分解压缩:
在 Power BI 的 DAX 引擎中,将压缩整齐如书架的数据重新摊开数据放在桌面上再进行操作的这一解开压缩的过程称为:物化
。
什么时候会发生物化呢?如何判断什么样的计算列或者度量值会导致物化的发生呢?
这需要一定的 DAX 高级知识。但显然,我们在这里会为业务伙伴给出一个简单的判断方法:
如果某个计算涉及到复杂的逻辑,那么很有可能会出现物化的过程。
我知道你想问:什么算是复杂?
有两个方法:
对大部分伙伴,尤其是业务伙伴,罗叔推荐后者。
经验 作为一种经验,对数据进行直接的聚合运算,如:SUM,MAX 等,是不会出现物化的;而要进行你都觉得很复杂的逻辑转换,那很有可能会出现物化的情况。
因此,对于 IT 人员来说,通常会将复杂计算列的构建,放在数据源的阶段进行,而不能推迟到数据模型里,否则,就会遇到 DAX 引擎的错误:等内存更多时再进行本操作。
我们已经理解了数据模型的大小可能随着某些操作,导致动态变化,我们将如下状态的数据模型称为静态数据模型,如下:
一般我们以这个标准来查看数据模型的大小,并应该保证内存至少是这个大小的 2 倍左右。
我们可以通过 DAX Studio 来解决这个问题。在 DAX Studio 的高级部分,点击View Metrics
,如下:
这就是数据模型的大小了,当然还可以查看不同表和列的大小细节。这些内容我们可以后续介绍。
本文解释了 Power BI 数据模型动态压缩的情况,并给出了查看静态大小的方法。