PowerBI报表在开发的过程中,经常会遇到数据量非常庞大的情况,在这种情况下,本机连接数据源如果不进行特殊处理的话,那么刷新数据的时候可能会发生数据刷新时间过长、数据加载内存错误、开发过程中构建DAX卡顿等情况。
那么在实际开发中,我们应该如何处理呢?其实,在PowerQuery页面,我们可以对查询进行过滤处理的。
在PowerQuery中进行过滤处理,我们需要区分两种情况,一种是可以在连接数据源时构建SQL语句的,一种是不可以的,感兴趣的小伙伴可以翻阅官方文档关于查询折叠[1]的相关内容,这里就不赘述了。
案例:可构建SQL语句
白茶在本机搭建了一个临时的SQL Server数据库,我们来连接该数据库中的某张表。
结果如下:
在管理参数的面板下,我们需要创建如下参数:
接下来,我们来构建一个空查询
:
将如下PQ代码,通过高级编辑器
,复制进去:
let Sources = if LimitValidity then " TOP " & "(" & Limit & ")" else "" in Sources
结果如下:
现在,我们可以对之前的连接到的表进行过滤处理了,进入到高级编辑器
,修改其PQ代码:
let
源 = Sql.Database(".", "CaseData", [Query="SELECT" & UseingFilter & " * FROM Fact_Sales "])
in
源
结果如下:
案例:不可构建SQL语句
因为环境的关系,白茶本地没有相对应的数据库,还是用SQL Server来给大家举例。
继续连接到刚才的表:
我们重新创建一个空查询,将如下代码粘贴进去:
(x) => let Sources = if LimitValidity then Table.FirstN(x, Number.From(Limit)) else x in Sources
修改FactSales的PQ代码:
let
源 = Sql.Databases("."),
CaseData = 源{[Name="CaseData"]}[Data],
dbo_Fact_Sales = CaseData{[Schema="dbo",Item="Fact_Sales"]}[Data],
UseingTop = UseingTop(dbo_Fact_Sales)
in
UseingTop
结果如下:
云端设置
当我们完成本地开发工作,将报表发布到云端后,还需要调整参数,才能保证后续数据正常刷新。
在云端数据集设置中,找到参数设置,将LimitValidity参数修改为False
即可。
注意事项
- 在连接数据库的时候,切忌
SELECT *
这种操作,因为会查询到一些无用列; - 表查询调整后,会出现
运行此本机数据库查询需要权限
这个提示,点击编辑权限后,点击运行即可; - 本地在刷新数据时,受限于
本机电脑的配置
以及登录账号
,量级较大的数据在本地无法刷新; - 云端根据
高级容量
的不同配置,可以满足不同场景下的大规模数据刷新; - 针对不同的数据库,
查询用语
也是不同的,例如:SQL Server支持TOP函数,而MySql则支持Limit函数,白茶这里仅是提供一种思路给到大家。
引用链接
[1]
查询折叠: https://learn.microsoft.com/zh-cn/power-query/query-folding-basics