PowerBI報表在開發(fā)的過程中荸哟,經(jīng)常會遇到數(shù)據(jù)量非常龐大的情況牍陌,在這種情況下,本機連接數(shù)據(jù)源如果不進行特殊處理的話伦吠,那么刷新數(shù)據(jù)的時候可能會發(fā)生數(shù)據(jù)刷新時間過長、數(shù)據(jù)加載內(nèi)存錯誤魂拦、開發(fā)過程中構建DAX卡頓等情況毛仪。
那么在實際開發(fā)中,我們應該如何處理呢晨另?其實潭千,在PowerQuery頁面谱姓,我們可以對查詢進行過濾處理的借尿。
在PowerQuery中進行過濾處理,我們需要區(qū)分兩種情況屉来,一種是可以在連接數(shù)據(jù)源時構建SQL語句的路翻,一種是不可以的,感興趣的小伙伴可以翻閱官方文檔關于查詢折疊[1]的相關內(nèi)容茄靠,這里就不贅述了茂契。
案例:可構建SQL語句
白茶在本機搭建了一個臨時的SQL Server數(shù)據(jù)庫,我們來連接該數(shù)據(jù)庫中的某張表慨绳。
結果如下:
在管理參數(shù)的面板下掉冶,我們需要創(chuàng)建如下參數(shù):
接下來真竖,我們來構建一個空查詢
:
將如下PQ代碼,通過高級編輯器
厌小,復制進去:
let Sources = if LimitValidity then " TOP " & "(" & Limit & ")" else "" in Sources
結果如下:
現(xiàn)在恢共,我們可以對之前的連接到的表進行過濾處理了,進入到高級編輯器
璧亚,修改其PQ代碼:
let
源 = Sql.Database(".", "CaseData", [Query="SELECT" & UseingFilter & " * FROM Fact_Sales "])
in
源
結果如下:
案例:不可構建SQL語句
因為環(huán)境的關系讨韭,白茶本地沒有相對應的數(shù)據(jù)庫,還是用SQL Server來給大家舉例癣蟋。
繼續(xù)連接到剛才的表:
我們重新創(chuàng)建一個空查詢透硝,將如下代碼粘貼進去:
(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
結果如下:
云端設置
當我們完成本地開發(fā)工作,將報表發(fā)布到云端后疯搅,還需要調(diào)整參數(shù)濒生,才能保證后續(xù)數(shù)據(jù)正常刷新。
在云端數(shù)據(jù)集設置中幔欧,找到參數(shù)設置甜攀,將LimitValidity參數(shù)修改為False
即可。
注意事項
在連接數(shù)據(jù)庫的時候琐馆,切忌
SELECT *
這種操作规阀,因為會查詢到一些無用列;表查詢調(diào)整后瘦麸,會出現(xiàn)
運行此本機數(shù)據(jù)庫查詢需要權限
這個提示谁撼,點擊編輯權限后,點擊運行即可滋饲;本地在刷新數(shù)據(jù)時厉碟,受限于
本機電腦的配置
以及登錄賬號
,量級較大的數(shù)據(jù)在本地無法刷新屠缭;云端根據(jù)
高級容量
的不同配置箍鼓,可以滿足不同場景下的大規(guī)模數(shù)據(jù)刷新;針對不同的數(shù)據(jù)庫呵曹,
查詢用語
也是不同的款咖,例如:SQL Server支持TOP函數(shù),而MySql則支持Limit函數(shù)奄喂,白茶這里僅是提供一種思路給到大家铐殃。
引用鏈接
[1]
查詢折疊: https://learn.microsoft.com/zh-cn/power-query/query-folding-basics