1. 程式人生 > >Power BI 資料集和資料重新整理

Power BI 資料集和資料重新整理

PowerBI報表是基於資料分析的引擎,資料真正的來源(Data Source)是資料庫,檔案等資料儲存媒介,PowerBI支援的資料來源型別多種多樣。PowerBI Service(雲端)有時不直接訪問Data Source,而是直接從PowerBI Service建立的資料集(Dataset)中獲取資料,資料集中儲存的內容主要分為三部分:Data Source的資料(Data)、連線資料來源的憑證(Credentials)、以及資料來源的架構(Table Schema)等元資料(metadata)。PowerBI Service分析資料時,直接訪問Dataset獲取資料,執行聚合計算,以響應使用者的查詢請求。使用Dataset的好處是:PowerBI只需要維護統一的Data Store,不需要從眾多不同的DataSource中讀取資料,所需要的資料都能從單一的資料結構(Dataset)中讀取。

PowerBI Service為每個釋出的Report自動建立一個Dataset,每一個Dataset的大小的上限是1GB。在匯入(Import)連線模式下,PowerBI把多個Data Source的資料匯入到Dataset中,也就是說,Dataset儲存的是多個數據源(Data Source)的快照。是否把資料來源匯入到Dataset,是由資料連線(Data Connection Model)決定的。

我的PowerBI開發系列的文章目錄:PowerBI開發

一,資料連線模式

當使用“Get Data”連線到Data Source時,PowerBI 自動建立Dataset,把資料從多個Data Source載入到一個Dataset中,Dataset還包含連線Data Source的憑證(Credentials),以及資料的架構等元資料。PowerBI Service直接從Dataset中引用資料,而不是直接從Data Source中。PowerBI支援的連線模式有兩種,分別是:Import,Live/DirectQuery。匯入(Import)模式把Data Source的資料匯入到PowerBI Service的Dataset中,而直接查詢(DirectQuery)模式建立Data Source 和Dataset之間的直接連線。

1,匯入(Import)模式

對於匯入(Import)模式,雲端的Dataset中儲存的資料來源於內網(On-Premises)資料的副本,一旦載入資料來源,查詢定義的所有資料都會被載入到Dataset中。PowerBI從高度優化的Dataset中查詢資料,查詢效能高,能夠快速響應使用者的互動式查詢。由於匯入模式是把資料來源快照複製到Dataset中,因此,底層資料來源的改動不會實時更新到Dataset,這使得Dataset儲存的資料是過時的,使用者需要手動重新整理或設定排程重新整理,否則,Dataset的資料不會更新。資料的重新整理是全量更新,而非增量。

匯入模式的限制是:Dataset的最大Size是1GB。

2,直接查詢(DirectQuery)模式

對於DirectQuery模式,PowerBI直接訪問底層的資料來源,因此資料始終是最新的。一旦載入資料,PowerBI Service不會向Dataset中載入任何資料(Data),這意味著,Dataset不儲存任何資料(Data),但是,Dataset仍然會儲存連線Data Source的憑證,以及資料來源的元資料,用於訪問底層資料來源。在執行查詢請求時,PowerBI Service直接把查詢請求傳送到原始的Data Source中去獲取所需的資料。直接查詢採用主動獲取資料的方式,這意味著,底層資料的任何更新,不會立即反應到現有的報表展示中,使用者需要重新整理(Refresh)資料,但是,新的查詢請求,都會使用最新的資料。

直接查詢模式需要使用本地資料網管(On-Premises Data Gateway),PowerBI Service能夠從雲端向本地資料來源(on-premises data sources)傳送查詢請求。當產生資料互動行為時,查詢直接傳送到資料庫,Excel,Azure SQL DB/DW等,由於PowerBI和Data Source之間是直接連線,因此,不需要排程資料PowerBI Service的資料集(Dataset)。

Live/DirectQuery – This means there is a live connection between Power BI and the data source.

DirectQuery連線模式的好處是:

  • 能夠訪問更大Size的Dataset:由於不需要把資料載入到Dataset中,DirectQuery模式能夠從海量的資料來源中載入資料;
  • 直接訪問資料來源:在DirectQuery模式下,PowerBI使用的是最新的資料。

DirectQuery連線模式的調優:

在使用DirectQuery連線模式時,如果查詢資料來源的速度非常慢,以至於需要等待一段時間才能從基礎資料表獲得響應,那麼可以在報表中設定Query reduction選項,向資料來源傳送更少的查詢,使查詢互動更快。

為了設定Query reduction選項,你需要點選 File 主選單,點選選單的路徑是:File > Options and settings > Options,然後在CURRENT FILE目錄下,選擇 Query reduction 選項卡:

禁用預設的交叉高亮:在整個Report上禁用預設的交叉高亮顯示,所謂交叉高亮,是指當用戶點選Visualization上的某一行資料時,其他Visualization相關聯的相關資料行也會高亮顯示。在禁用交叉高亮之後,使用者可以通過Visual interactions功能,手動為特定的Visual啟用交叉高亮,預設情況下,是禁用交叉高亮。

在Slicer或Filer上顯示一個Apply按鈕:使用者可以選中相應的選項,但是,只有在點選Apply按鈕之後,使用者選中的Slicer或Filer才會用於過濾資料。

二,資料重新整理(Data Refresh)

PowerBI Service從Dataset中獲取資料,用於資料分析和展示,使用者可以通過"SCHEDULE REFRESH"和"REFRESH NOW"重新整理Dataset的資料,把Dataset的資料更新到最新。使用者重新整理Dataset之前,必須配置內網資料閘道器(On-Premises Data Gateway),詳細資訊,請參考我的博文《PowerBI開發 第六章:資料網管》。PowerBI Service對資料Dataset的重新整理是完整資料重新整理,而不是增量資料重新整理。

When you refresh data, you are updating the data in the dataset that is stored in Power BI from your data source. This refresh is a full refresh and not incremental.

當使用Import連線模式時,所有的資料都會從Data Source匯入到PowerBI Service的快取中,PowerBI的視覺化控制元件都是從快取中查詢資料。一旦PowerBI檔案釋出到PowerBI Service中,PowerBI 將會建立一個Dataset,用於儲存被匯入的資料。設定排程,定時重新整理Dataset,使得PowerBI呈現最新的分析資料,對於做出正確的決策是非常重要的。

三,連線模式的效能

推薦使用匯入(Import)連線模式,這是因為PowerBI 使用記憶體的列式資料庫 VertiPaq,用於對已釋出的資料集(Dataset)進行資料壓縮和快速處理,能夠使PowerBI報表執行離線訪問,面向列的處理,高度優化對1:N關係的處理效能。匯入模式非常適合聚合查詢,特別是,當存在大量的關係時,PowerBI能夠快速執行聚合運算。匯入模式的缺點是Dataset的Size最大是1GB,需要排程重新整理才能訪問最新的資料。

直接查詢(DirectQuery)模式,建立PowerBI和Data Source之間的直接連線,訪問的資料始終是最新的,並且資料來源的大小是無限制的。在直接查詢模式下,PowerBI直接傳送查詢到Datasource中,以獲取所需要的資料。當Data Source是關係型資料庫時,PowerBI直接傳送SQL查詢語句到資料庫中。直接查詢模式的最大缺點是效能問題。

在直接查詢模式下,所有的直接查詢請求都直接傳送到源資料庫中,後端資料來源響應查詢請求的速度決定了直接查詢的效能。雖然PowerBI儘可能的優化生成的SQL命令,但是,通過監控發現,PowerBI最終生成的SQL命令是非常低效的,特別是在查詢海量的資料來源時,後端(Back-end)資料來源需要執行很長時間,才能返回結果。等待的時間超過30s,使用者體檢就很不理想了。當匯入模式不能滿足業務需求時,再考慮直接查詢模式。

四,資料載入(並行和序列)

在設計PowerBI 報表時,我們使用兩種方式來重新整理資料,可以手動逐個地重新整理Query,也可以點選Refresh按鈕同時重新整理所有的Query。當點選重新整理全部(Refresh All)時,由於系統記憶體的限制,重新整理操作可能會失敗。PowerBI Desktop載入資料的方式可以是序列的,也可以是並行的,預設是並行的,以序列方式載入資料,不需要很大的記憶體就可以完成。當PowerBI需要重新整理很多Query時,重新整理全部可能會使PowerBI佔用過多的系統記憶體而發生錯誤,此時,可以設定PowerBI,使其以序列的方式載入資料以解決這個問題。

設定序列載入資料的步驟是:點選File->Opions & Settings->Options,如下圖所示,在CURRENT FILE選項卡中,開啟"Data Load"分組,勾選“Enable parallel loading of tables”,啟用PowerBI的序列載入資料模式。

然而,這種模式只是以序列的方式把資料載入到PowerBI的快取中,當在資料模型中建立連線時發生異常,或者在等待資料來源返回資料集時出現異常,

資料重新整理仍然會失敗。PowerBI的重新整理全部資料(Refresh All)的工作流程類似於事務,只有當全部的資料集都重新整理成功時,資料重新整理才是成功的;只要有一個數據集重新整理失敗,整個重新整理操作就失敗。

當需要查詢的資料集較多時,使用者體驗非常差。如果PowerBI不能解決大量資料集的重新整理問題,那麼其功能是不完善的,期待PowerBI 團隊後續的更新會修復這個異常。