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)
inUseingTop
結果如下:
云端設置
當我們完成本地開發工作,將報表發布到云端后,還需要調整參數,才能保證后續數據正常刷新。
在云端數據集設置中,找到參數設置,將LimitValidity參數修改為False
即可。
注意事項
-
在連接數據庫的時候,切忌
SELECT *
這種操作,因為會查詢到一些無用列; -
表查詢調整后,會出現
運行此本機數據庫查詢需要權限
這個提示,點擊編輯權限后,點擊運行即可; -
本地在刷新數據時,受限于
本機電腦的配置
以及登錄賬號
,量級較大的數據在本地無法刷新; -
云端根據
高級容量
的不同配置,可以滿足不同場景下的大規模數據刷新; -
針對不同的數據庫,
查詢用語
也是不同的,例如:SQL Server支持TOP函數,而MySql則支持Limit函數,白茶這里僅是提供一種思路給到大家。
引用鏈接
[1]
查詢折疊: https://learn.microsoft.com/zh-cn/power-query/query-folding-basics