匯入模型的資料減少技術

本文的目標是開發匯入模型的Power BI Desktop數據模型工具。 它描述不同的技術,以協助減少載入模型的數據。

匯入模型會以壓縮和優化的數據載入,然後由 VertiPaq 儲存引擎儲存至磁碟。 將源數據載入記憶體時,可能會看到 10 倍的壓縮,因此可以合理預期 10 GB 的源數據可以壓縮到大約 1 GB 的大小。 此外,當保存到磁碟時,可以達到額外的 20% 縮減。

儘管 VertiPaq 儲存引擎達到效率,但請務必努力將要載入模型的數據降到最低。 對於大型模型或您預期會隨著時間成長的模型,尤其如此。 四個令人信服的原因包括:

  • 您的容量可能不支援較大的模型大小。 共用容量可以裝載大小上限為 1 GB 的模型,而 進階版 容量可以根據 SKU 裝載較大的模型。 如需詳細資訊,請閱讀Power BI 進階版 支援大型語意模型一文。 (語意模型 先前稱為數據集
  • 較小的模型大小可減少容量資源的爭用,特別是記憶體。 它可讓更多模型同時載入較長的時間,進而降低收回率。
  • 較小的模型可達成更快的數據重新整理,進而降低延遲報告、較高的語意模型重新整理輸送量,以及降低來源系統和容量資源的壓力。
  • 較小的數據表數據列計數可能會導致更快速的計算評估,這可提供更佳的整體查詢效能。

重要

本文有時是指 Power BI 進階版 或其容量訂用帳戶(P SKU)。 請注意,Microsoft 目前正在合併購買選項,並淘汰每個容量 SKU 的 Power BI 進階版。 新的和現有的客戶應該考慮改為購買網狀架構容量訂用帳戶(F SKU)。

如需詳細資訊,請參閱 Power BI 進階版 授權Power BI 進階版 常見問題的重要更新。

本文涵蓋八種不同的數據縮減技術。 這些技術包括:

移除不必要的資料行

模型資料表資料列有兩個主要用途:

  • 報告,以達到適當篩選、分組和摘要模型數據的報表設計
  • 模型結構,支援模型關聯性、模型計算、安全性角色,甚至是數據色彩格式設定

可能無法移除不符合這些用途的數據行。 拿掉資料行稱為 垂直篩選

建議您根據已知的報告需求,使用正確的數據行數目來設計模型。 您的需求可能會隨著時間而變更,但請記住,稍後新增數據行會比稍後移除數據行更容易。 拿掉資料行可能會中斷報表或模型結構。

移除不必要的資料列

模型數據表應盡可能以最少的數據列載入。 您可以藉由將篩選的數據列集載入模型數據表,以達到此目的,原因有兩種:依實體或時間篩選。 拿掉資料列稱為 水平篩選

依實體 篩選牽涉到將源數據子集載入模型中。 例如,不要載入所有銷售區域的銷售事實,而是只載入單一區域的事實。 此設計方法會產生許多較小的模型,而且也可以消除定義數據列層級安全性的需求(但需要在 Power BI 服務 中授與特定的語意模型許可權,以及建立連線到每個語意模型的「重複」報表。 您可以使用 Power Query 參數和 Power BI 範本檔案來簡化管理和發行。 如需詳細資訊,請閱讀 深入探討查詢參數和 Power BI 範本 部落格文章

依時間篩選牽涉到限制載入事實類型數據表的數據歷程記錄(以及限制載入模型日期數據表的日期數據列)。 我們建議您不要自動載入所有可用的歷程記錄,除非它是已知的報告需求。 瞭解以時間為基礎的Power Query篩選可以參數化,甚至設定為使用相對時間週期(例如,過去五年的重新整理日期)很有説明。 此外,請記住,對時間篩選的回顧性變更不會中斷報告;它只會在報表中產生較少的(或更多)數據歷程記錄。

分組依據和摘要

降低模型大小的最有效技術可能是載入預先摘要的數據。 這項技術可以用來提高事實類型數據表的粒度。 然而,有一個明顯的取捨,導致細節損失。

例如,來源銷售事實數據表會為每個訂單行儲存一個數據列。 藉由匯總所有銷售計量、依日期、客戶和產品分組,即可達成大幅減少數據。 請考慮藉由依月份層級的日期分組,來達成更顯著的數據縮減。 它可以達到模型大小的可能降低 99%,但無法再於日層級或個別訂單層級進行報告。 決定摘要事實類型數據一律牽涉到取捨。 混合模型設計可以減輕取捨,而此選項會在切換至混合模式技術中說明。

優化數據行數據類型

VertiPaq 儲存引擎會針對每個數據行使用不同的數據結構。 根據設計,這些數據結構可達到數值數據行數據的最高優化,以使用值編碼。 不過,文字和其他非數值數據會使用哈希編碼。 它要求儲存引擎將數值標識碼指派給數據行中包含的每個唯一文字值。 其為數值標識符,然後儲存在數據結構中,需要在記憶體和查詢期間進行哈希查閱。

在某些特定情況下,您可以將源文字數據轉換成數值。 例如,銷售訂單號碼可能以文字值(例如“SO123456”)為前置詞。 可以移除前置詞,並將訂單編號值轉換成整數。 對於大型數據表,可能會導致大幅減少數據,特別是當數據行包含唯一或高基數值時。

在此範例中,我們建議您將數據行 [預設摘要] 屬性設定為 [不要摘要]。 這有助於將訂單號碼值的不適當摘要降到最低。

自訂數據行的喜好設定

VertiPaq 儲存引擎會儲存模型導出數據行(定義於 DAX 中),就像一般 Power Query 來源數據行一樣。 不過,數據結構會以稍微不同的方式儲存,而且通常可達到較不有效率的壓縮。 此外,這些數據表會在載入所有 Power Query 數據表之後建立,這可能會導致延伸的數據重新整理時間。 因此,將數據表數據行新增為 計算 結果列比 Power Query 計算數據 行(以 M 定義)的效率較低。

喜好設定應該在 Power Query 中建立自定義數據行。 當來源是資料庫時,您可以透過兩種方式達到更高的負載效率。 計算可以在 SQL 語句中定義(使用提供者的原生查詢語言),也可以具體化為數據源中的數據行。

不過,在某些情況下,模型導出數據行可能是較佳的選擇。 當公式牽涉到評估量值,或它只需要DAX函式中支援的特定模型化功能時,就可能是這種情況。 如需這類範例的相關信息,請參閱 DAX 文章中父子式階層的 Understanding 函式。

停用 Power Query 查詢載入

預期支援與其他查詢的數據整合的 Power Query 查詢不應該載入模型。 若要避免將查詢載入模型,請務必確保停用這些實例中的查詢載入。

Power Query 的螢幕快照,其中顯示 [啟用載入] 選項。

停用自動日期/時間

Power BI Desktop 包含稱為 [自動日期/時間] 的選項。 啟用時,它會為日期數據行建立隱藏的自動日期/時間數據表,以支援報表作者在設定行事曆時段的篩選、分組和向下切入動作時。 隱藏數據表實際上是將增加模型大小的計算數據表。 如需使用此選項的指引,請參閱 Power BI Desktop 中的自動日期/時間指引一文。

切換至混合模式

在 Power BI Desktop 中,混合模式設計會產生複合模型。 基本上,它可讓您判斷每個數據表的儲存模式。 因此,每個數據表都可以將其 儲存體 Mode 屬性設定為 Import 或 DirectQuery(雙重是另一個選項)。

有一項實用的技術可減少模型大小,那就是將較大型事實類型資料表的儲存模式屬性設為 DirectQuery。 請考慮此設計方法可與 Group 搭配運作良好 ,以及稍早引進的摘要 技術。 例如,摘要銷售數據可用來達成高效能「摘要」報告。 鑽研頁面可能會顯示特定 (和窄) 篩選內容的細微銷售,並顯示所有內容內銷售訂單。 在此範例中,鑽研頁面會包含以 DirectQuery 數據表為基礎的視覺效果,以擷取銷售訂單數據。

不過,與複合模型相關的許多安全性和效能影響。 如需詳細資訊,請參閱 在Power BI Desktop 中使用複合模型一文。

如需 Power BI 匯入模型設計的詳細資訊,請參閱下列文章: