共用方式為


匯入模型的資料減少技術

本文的目標對象是那些在 Power BI Desktop 中開發及發佈 Power BI 語義模型的資料建模師。 具體來說,它會描述各種技術,以協助減少載入 匯入模型的數據

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

儘管 VertiPaq 儲存引擎達到效率,但您應該努力將載入模型的數據降到最低。 對於大型模型或您預期會隨著時間成長的模型,這尤其如此。 四個吸引人的理由包括:

  • 您的容量可能不支援較大的模型大小。 共用容量可裝載最大 1 GB 的模型,而 Premium 容量可以根據 SKU 裝載較大的模型。 如需詳細資訊,請參閱在Power BI Premium中 大型語意模型。
  • 較小模型可以減少在容量資源上的競爭,特別是記憶體。 在一個容量中,許多較小的模型可以被同時載入而維持更長時間,因此降低了驅逐率。
  • 較小的模型大小可以加快數據重新整理的速度,從而降低報告延遲,提高語意模型重新整理的吞吐量,並減少對來源系統和容量資源的壓力。
  • 較小的數據表數據列計數可能會導致更快速的計算評估,進而提升整體查詢效能。

重要

此文章有時會提及 Power BI Premium 或其容量訂用帳戶 (P SKU)。 請注意,Microsoft 目前正在整合購買選項,並按容量 SKU 淘汰 Power BI Premium。 新客戶和現有客戶應考慮改為購買 Fabric 容量訂用帳戶 (F SKU)。

如需詳細資訊,請參閱 即將推出的 Power BI Premium 授權重要更新 (英文) 和 Power BI Premium 常見問題集 (部分機器翻譯)。

移除不必要的資料行

模型資料表資料行的主要用途有兩種:

  • 報告,以實現適當篩選、分組和匯總模型數據的報告設計。
  • 模型結構,藉由支援模型關係、模型計算、安全角色,甚至是數據色彩格式。

您可以移除任何不符合這兩個目的的欄位。 從資料表中移除資料列有時稱為 垂直篩選

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

移除不必要的資料列

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

  • 根據時間篩選 涉及限制載入到 事實數據表數據歷程記錄 的數量(並且限制載入到模型日期數據表的日期數據列)。 我們建議您不要預設載入所有可用的歷程記錄,除非它是已知的報告需求。 您可以使用參數來實作以時間為基礎的 Power Query 篩選,甚至將它們設定為使用相對時間週期(相對於重新整理日期,例如,過去五年)。 此外,請記住,對時間篩選的回顧性變更不會中斷報告;它只會在報表中產生較少的(或更多)數據歷程記錄。
  • 依據實體進行篩選會涉及將來源資料的子集載入模型。 例如只載入單一區域的事實,而非載入所有銷售區域的銷售事實。 此設計方法會產生許多較小的模型,而且也可以消除定義 數據列層級安全性 (RLS)的需求,但它需要在Power BI服務中授與特定的語意模型許可權,以及建立連接到每個語意模型的重複報表。 您可以使用 Power Query 參數和 Power BI 範本檔案來簡化管理和發行。 如需詳細資訊,請參閱 在 Power BI Desktop 中建立和使用報表範本

分組依據及摘要

也許減少資料模型最有效的技術便是載入預先經過摘要的資料。 您可以使用這項技術來提升事實數據表的粒度。 但是這項技術一項明顯的取捨便是會遺失詳細資料。

請考慮一個範例,其中來源銷售事實數據表會為每個訂單行儲存一個數據列。 藉由匯總所有銷售計量、依日期、客戶和產品分組,即可達成大幅減少數據。 藉由依月份層級的日期 分組,,即可達成更顯著的數據縮減。 雖然它可以將模型大小可能縮減 99%,但無法再以天為單位或逐個訂單行進行報告。 決定要摘要事實資料總是牽涉取捨。 在 DirectQuery 儲存模式中包含一些數據表的模型設計可以減輕取捨,本文稍後 所述。

最佳化資料行資料類型

VertiPaq 儲存引擎會針對每個數據行使用不同的內部數據結構。 根據設計,這些資料結構能夠實現數值欄位資料的最佳優化,並使用 進行值編碼。 不過,文字和其他非數值數據會使用 哈希編碼。 哈希編碼需要儲存引擎將數值標識符指派給數據行中包含的每個唯一值。 其為儲存在資料結構中的數值識別碼,需要在存儲和查詢過程中進行哈希查閱。

在某些特定案例中,您可以將來源文字資料轉換成數值。 例如,銷售訂單號碼可能會有一個文字值(例如 SO123456)作為前綴。 在此情況下,可以移除前置詞 SO,並將訂單編號值轉換成整數。 對於大型數據表,這項修改可能會導致大幅減少數據,特別是當數據行包含唯一或高基數值時。

在這裡範例中,建議您將資料行預設摘要屬性設定為 Do Not Summarize。 這有助於避免訂單編號值的不當彙總。

自訂資料行的喜好設定

VertiPaq 儲存引擎會將計算欄位(定義於 DAX 中)和普通 Power Query 來源的欄位一樣儲存在模型 中。 不過,內部數據結構會以稍微不同的方式儲存,而且通常達到較不有效率的壓縮。 此外,數據結構會在載入所有 Power Query 數據表之後建立,這可能會導致數據重新整理時間延長。 因此將資料表資料行作為「計算」結果欄新增的效率,會比 Power Query「運算」資料行 (定義在 M 中) 的效率更低。

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

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

停用 Power Query 查詢載入

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

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

停用自動日期/時間

Power BI Desktop 包含一個稱為「自動日期/時間」的選項。 啟用時,它會為模型中每個日期數據行建立隱藏的自動日期/時間數據表。 此選項支援報表作者在設定行事曆時段的篩選、分組和向下切入動作時。 隱藏數據表實際上是增加模型大小的計算數據表。

如需詳細資訊,請參閱 Power BI Desktop中的 自動日期/時間指引。

使用 DirectQuery 儲存模式

DirectQuery 儲存模式是匯入儲存模式的替代方案。 DirectQuery 模型數據表不會匯入數據。 相反地,它們只包含定義數據表結構的元數據。 查詢數據表時,會使用原生查詢從基礎數據源擷取數據。 當您在單一模型中結合 Import 和 DirectQuery 儲存模式資料表時,稱為 複合模型

減少模型大小的有效技巧是將較大型事實數據表的儲存模式設定為 DirectQuery。 請考慮此設計方法通常與 Group 搭配運作良好,並摘要說明稍早引進的 技術。 例如,摘要銷售數據可用來達成高效能摘要報告。 深入分析頁面可以顯示特定(且狹窄)篩選條件下的細緻銷售數據,並展示所有相關的銷售訂單。 在此範例中,鑽取頁面可能包含基於 DirectQuery 模型表的視覺效果,以提取銷售訂單數據。

不過,DirectQuery 儲存模式和複合模型與許多安全性和效能問題相關聯。 如需詳細資訊,請參閱 在 Power BI Desktop 中使用複合模型

如需本文的詳細資訊,請參閱下列文章: