DAX从入门到精通

Powerbi小技巧,取消“启用加载”功能

2019-12-21  本文已影响0人  PowerBI入门到实践
image.png

在处理Powerbi模型性能问题上,可以考虑优化的地方有很多,主要就是围绕着CPU和RAM开销情况进行优化。最基本但是最重要的原则就是使得内存使用最小化。默认情况下,查询编辑器的所有查询都会加载到powerbi模型中。这篇文章中,将会介绍一些案例,演示如何禁止加载一些查询,特别是对于某些只是作为转换步骤的中间过程。当你模型数据量逐渐增大的时候,这是个非常基本且非常重要的操作。

Power Query的加载机制

默认情况下,Power Query的所有查询结果都会加载到模型中。对于这个功能,如果你的模型恰好是数据仓库中处理好的星形结构,那么通常情况下你不需要对数据再做修改。但是,如果你连接的是交易数据,或者一些文件,或者是web数据源,这用的原始的非星形结构的数据,就会遇到一些问题。这情况下,你需要对数据进行一些ETL的转换,行列数据处理,合并附加等操作。也许10个初始的数据源,最后只需要5个表格即可。当你处理好,点击关闭并应用的时候,所有的查询结果,无论对最后模型是否还有需要全部都加载到模型中。


image.png

每个加载进模型的查询都会消耗系统资源。内存资源是非常重要的,低开销可以使得模型的性能更好。许多人会把模型中不需要的数据表进行隐藏操作,但是这并不能提高性能,因为即使是隐藏的查询,也是消耗了资源。最佳的操作是禁止不再需要的查询加载到查询中。禁用加载,并不意味着数据不刷新,只是说不再加载到模型。当你点击了刷新按钮,标注了禁止加载的数据依旧会刷新并提供给需要它的查询,只是不再进去到模型而已。这个操作是非常基本的性能调优技巧,尤其当你模型越来越大的时候。下面我们通过案例来看看。


image.png

案例

这个案例中,我们从一个目录中获取一个列表。目录中两种CSV文件,Students和Course。它们结构上有些区别。目录中的其他类型文件我们不需要。


image.png

我们的目标是得到两个表格,分别包含了所有的students和courses的数据。我们不使用多次加载文件夹的方法,我们使用一个查询来获取数据,然后用引用的方式提供其他查询使用。这个引用的查询,并不需要加载到数据模型中。下面我们看下如何操作:

建立转换

从文件夹获取数据

image.png

输入文件夹的地址


image.png
image.png

使用筛选得到csv文件。这案例中,studens和courses文件都是csv文件。


image.png
因为两个文档的结构是不同的,所以我们需要对它们分别进行转换处理
image.png

处理Students表

因为我们设想只处理一个从文件夹获得数据的操作,所以这里使用“引用”来处理分流数据。


image.png

这个操作会新生成一个查询,这个查询不是源数据的复制,只是对其处理结果的一个引用。也就是,如果源数据进行了变化,这个引用的也会相应的改变。把新生成的重命名为student。过滤首字包含students的行。


image.png
使用文本筛选器的原因是,如果我们用搜索框的筛选,那么结果只会基于当期数据的结果,如果后期有新的数据进入,那么结果将不会包含它们。因此,这里我们使用文本筛选器,它是动态的过滤所有的数据,即使有新数据加入,也会把它们考虑在内。
image.png

现在我们会看到结果只包含students。


image.png
点击合并按钮,所有的结果会合并起来。
image.png
点击合并按钮后,系统会自动进行合并操作,并在转换步骤中显示对于的操作流程。
image.png
接着对行数据进行一些处理后,得到最后的结果:
image.png

处理course

处理方式同上面的student一样。最后会也会得到一个表格:


image.png

默认操作:启用加载

这里,我们看下问题,此时,我们不做任何操作,系统默认使用启用加载。选择关闭并应用。


image.png

系统提示加载刷新数据,有三个文件将要加载到模型中:student,course,csvs


image.png
三个文件中,csvs是我们不需要的,我们以及从它的数据中获取了数据,并提供给了student和course,其只是一个中间步骤。把它加载到模型中至少会导致两个问题:
1.额外的表,使得用户产生疑问

2.消耗了不必要的系统资源
其中消耗资源是更重要的问题,内存消耗大意味着可用资源减少,处理性能下降。案例中,csv的数据量很小,但是在实际生产环境中,中间表往往可能是非常巨大的表格。对于提升模型性能,你必须要去除不必要的性能开销。

在报表中隐藏是否可行?

对于上面说的第一个问题,在关系视图中,我们可以选择把它们隐藏。但是即使这样,该表依旧存在,依旧消耗资源!仅仅是隐藏而已。隐藏功能是用于那些作为关系中间表使用的,它们不能不隐藏,隐藏不影响它们的作用。


image.png

关闭“启用加载”功能以节约内存使用

回到查询编辑器,右键csv查询,可以看到默认情况下,是勾选“启用加载”的。


image.png

点击即可禁用该功能。会提示一个信息说这个操作会导致使用该表的可视化组件不能继续使用。这个放心,因为该表csv我们并没有使用。


image.png
点击继续,可以看到“启用加载”的勾选已经去除了,并且数据源的字体也变成了斜体,这说明该数据不会被加载到模型。注意下,当刷新的时候,数据还是会被刷新,并提供刷新后的数据给它的使用者,只是不再加载到数据模型而已。
image.png

在查询依赖项功能中,我们可以可以看到,csv不再加载到模型。


image.png
然后,我们关闭编辑器。可以发现csv数据源已经被排除了。关系视图中只剩下需要的两个表。
image.png

总结

可以看到这样一个简单的操作,就可以节约系统开销,提高性能。务必牢记,查询编辑器是一个ETL引擎,它可以进行一系列的转换合并操作,当它完成工作的时候,所有的数据都会默认加载到模型中,这时候,我们需要禁用那些再报表中不再需要的表,以提高模型性能。

上一篇下一篇

猜你喜欢

热点阅读