PowerBI数据模型优化,从导入数据开始

2022-04-11 19:02:05 浏览数 (1)

最近,不少朋友在群里提到,打开Power BI文件、刷新数据、做报表等过程中,经常出现运行比较慢的情况。

虽然说,PBI运行慢的原因很多,可能跟硬件、系统资源占用、软件版本、软件冲突、数据源类型(数据库还是Excel文件等)、数据量大小、数据模型(包含数据处理步骤和算法复杂度等)的构建方法等等……等等……等等……都有关系。

但大多数情况下,我们更多的只能从数据模型的方面入手,后续我将从多个角度,通过一些数据模型优化的例子,为大家提供一些参考。

首先,我们讲一下影响模型数据压缩比及运行效率的核心因素之一,列基数,即一个列中非重复值的个数。

比如一个列里的数据是“1/2/2/3/4/4/4/4”等8个数,那非重复值是“1/2/3/4”的4个数,列的基数即为4。

从我们应用的角度,可以简单地理解为,Power BI将数据导入模型后,会将这列数据压缩成4个进行储存,这样,数据的量其实就差不多压缩了一半。

所以,数据模型优化的第1条:将数据导入Power BI时,非必要的列,尽量不要导入,尤其是那些列基数很大的列,比如说:很多数据库的表会带一些Key(非重复的键值)列,很多Key列还是用的GUID(很长的一段不可能重复的文本,不了解而又有兴趣的朋友可以搜索了解一下)!

对于数据分析来说,这些键值列,往往是不需要的,此时,不导入这些列,将明显缩减PowerBI模型大小,从而提升运行效率。

以我实际工作中的一个表为例,一个数据库表中带有用GUID作为键值的无重复数据列(ID列),同时大家注意另一个存在大量重复值的列“TM_JY”:

数据全部导入后,Power BI文件的大小为3.7M:

添加“删除ID列”的步骤:

保存后,Power BI文件直接缩减为415K,压缩了85%的空间:

我们再多删除一个列,即前面我们提到的存在大量重复值的列“TM_JY”:

再保存,文件几乎没有变化:

继续删除其他一个列“DATE”,这个列里非重复值和重复值比例约5:3,如图所示:

删除该列后,文件大小进一步缩减为235k:

从上面的例子可以看出,尽可能只导入必要的列,减少不必要的列,尤其是非重复值较多(列基数较大)的列!

此外,从这个例子也可以看到,数据模型的大小主要与最后加载的数据相关,而与中间处理过程的步骤关系不是很大,因此,可以先导入所有列,然后增加选择列步骤进行选择(删除),前面导入所有列的中间步骤,并不会明显影响文件大小及模型效率。

因此,完全没有必要一开始就因为怕后面分析可能要用到,而将所有列一股脑儿地加载,而是在后续做分析真需要时,再回到PQ中将需要的列放出来就是了。

0 人点赞