在 Power BI Desktop 中使用 DirectQuery

當您使用 Power BI Desktop 連線到任何數據源時,您可以匯入數據的複本。 針對某些數據源,您也可以直接連線到數據源,而不需使用 DirectQuery 匯入數據。

若要判斷數據源是否支援 DirectQuery,請檢視 Power Query 中 連線 or 一文中找到之可用數據源的完整清單,這也適用於 Power BI,請從支援的連接器清單中選取描述您感興趣的數據源的文章,然後參閱該連接器文章中標題為 [功能支援] 的文章。 如果數據源一文中未列出 DirectQuery,該數據連接器不支援 DirectQuery。

以下是使用匯入和 DirectQuery 連線模式之間的差異:

  • 入:所選數據表和數據行的數據複本會匯入 Power BI Desktop。 當您建立或與視覺效果互動時,Power BI Desktop 會使用匯入的數據。 若要查看初始匯入或最近重新整理之後的基礎數據變更,您必須再次匯入完整的語意模型,才能重新整理數據。

  • DirectQuery:不會將數據匯入 Power BI Desktop。 針對關係型來源,您可以選取要出現在Power BI Desktop 欄位 清單中的數據表和數據行。 對於 SAP Business Warehouse (SAP BW) 等多維度來源,所選 Cube 的維度和量值會出現在 [字段 ] 清單中。 當您建立或與視覺效果互動時,Power BI Desktop 會查詢基礎數據源,因此您一律會檢視目前的數據。

使用 DirectQuery 時,當您建立或與視覺效果互動時,您必須查詢基礎來源。 重新整理視覺效果所需的時間取決於基礎數據源的效能。 如果最近要求服務要求所需的數據,Power BI Desktop 會使用最近的數據來減少顯示視覺效果所需的時間。 從 [首頁] 功能區選取 [重新整理] 會以目前數據重新整理所有視覺效果。

使用 DirectQuery 時,有許多數據模型化和數據轉換可供使用,但有一些以效能為基礎的限制。 如需 DirectQuery 優點、限制和建議的詳細資訊,請參閱 Power BI 中的 DirectQuery。

DirectQuery 優點

使用 DirectQuery 的一些優點包括:

  • DirectQuery 可讓您透過非常大的語意模型來建置視覺效果,而無法透過預先匯總匯入所有數據。

  • DirectQuery 報表一律使用目前的數據。 查看基礎數據變更需要您重新整理數據,並重新匯入大型語意模型以重新整理數據可能不可行。

  • 1 GB 語意模型限制不適用於 DirectQuery。

使用 DirectQuery 連線

若要使用 DirectQuery 連線至數據源:

  1. Power BI Desktop 功能區的 [首頁 ] 群組中,選取 [取得數據],然後選取 DirectQuery 支持的數據源,例如 SQL Server

  2. 在連線的對話框中,於 [數據連線模式] 底下,選取 [DirectQuery]。

Import and DirectQuery options, SQL Server Database dialog, Power BI Desktop

發佈到 Power BI 服務

您可以將 DirectQuery 報表發佈至 Power BI 服務,但您必須採取額外的步驟,讓 Power BI 服務 開啟報表。

  • 若要將 Power BI 服務 連線到 Azure SQL 資料庫 以外的 DirectQuery 數據源,Azure Synapse Analytics(先前稱為 SQL 數據倉儲)、Amazon Redshift 和 Snowflake 數據倉儲、安裝內部部署數據網關並註冊數據源。

  • 如果您使用 DirectQuery 搭配 Azure SQL 資料庫、Azure Synapse、Amazon Redshift 或 Snowflake 數據倉儲等雲端來源,則不需要內部部署數據閘道。 您仍然必須提供 Power BI 服務 認證,才能開啟已發佈的報表。 如果沒有認證,當您嘗試開啟已發佈的報表或探索使用 DirectQuery 連線建立的語意模型時,就會發生錯誤。

若要提供開啟報表並重新整理資料的認證:

  1. 在 Power BI 服務 中,選取右上角的齒輪圖示,然後選擇 [設定]。

    Screenshot of the Power BI service Settings dropdown menu.

  2. [設定] 頁面上,選取 [語意模型] 索引卷標,然後選擇使用 DirectQuery 的語意模型。

  3. 在 [數據源連線] 底下,提供認證以連線至數據源。

注意

如果您使用 DirectQuery 搭配具有私人 IP 位址的 Azure SQL 資料庫,則必須使用內部部署閘道。

考量與限制

DirectQuery 模式不支援某些 Power BI Desktop 功能,或有限制。 Power BI 服務 中的某些功能,例如快速見解,也不適用於使用 DirectQuery 的語意模型。 當您決定是否要使用 DirectQuery 時,請考慮這些功能限制。 也請考慮下列因素:

效能和負載考慮

DirectQuery 會將所有要求傳送至源資料庫,因此視覺效果所需的重新整理時間取決於基礎來源傳回結果所需的時間。 建議使用五秒以下的回應時間,接收視覺效果的要求數據。 重新整理時間超過 30 秒,對於取用報表的用戶來說,會產生無法接受的不良體驗。 在 Power BI 服務 中花費超過四分鐘的查詢,且使用者收到錯誤。

源資料庫的負載也取決於取用已發行報表的 Power BI 用戶數目,特別是當報表使用數據列層級安全性 (RLS) 時。 多個用戶共用的非 RLS 儀錶板磚重新整理會將單一查詢傳送至資料庫,但重新整理使用 RLS 的儀錶板磚需要每個使用者一個查詢。 增加的查詢會大幅增加負載,並可能會影響效能。

一百萬個數據列限制

DirectQuery 會針對從雲端數據源傳回的數據定義一百萬個數據列限制,這些數據是非內部部署的任何數據源。 內部部署來源受限於每個數據列約 4 MB 的已定義承載,視專屬壓縮演算法而定,或整個視覺效果的 16 MB。 進階版 容量可以設定不同的最大數據列限制,如部落格文章所述Power BI 進階版 新的容量設定

Power BI 會建立盡可能有效率的查詢,但某些產生的查詢可能會從基礎數據源擷取太多數據列。 例如,這種情況可能會發生於包含高基數數據行且匯總選項設定為 [不要摘要] 的簡單圖表。 視覺效果必須只有基數低於1百萬的數據行,或必須套用適當的篩選。

數據列限制不適用於用來選取語意模型 DirectQuery 傳回的匯總或計算,僅適用於傳回的數據列。 例如,在數據源上執行的查詢可以匯總 1000 萬個數據列。 只要傳回至 Power BI 的數據少於 1 百萬個數據列,查詢就可以準確地傳回結果。 如果數據超過 100 萬個數據列,Power BI 會顯示錯誤,但 進階版 具有不同系統管理員設定限制的容量除外。 錯誤狀態: 對外部數據源的查詢結果集已超過 『10000000』 個數據列允許的大小上限。

安全性考量

根據預設,在 Power BI 服務 取用已發佈報表的所有用戶,都會使用發行后輸入的認證來連線到基礎數據源。 這種情況與匯入的數據相同。 所有用戶都會看到相同的數據,不論基礎來源所定義的任何安全性規則為何。

如果您需要使用 DirectQuery 來源實作的每個使用者安全性,請使用 RLS 或針對來源設定 Kerberos 限制驗證。 Kerberos 不適用於所有來源。 如需詳細資訊,請參閱使用Power BI的數據列層級安全性 (RLS),以及設定從 Power BI 服務 到內部部署數據源的 Kerberos 型 SSO。

其他 DirectQuery 限制

使用 DirectQuery 的其他一些限制包括:

  • 如果 Power Query 編輯器 查詢過於複雜,就會發生錯誤。 若要修正錯誤,您必須刪除 Power Query 編輯器 中有問題的步驟,或切換至匯入模式。 SAP BW 之類的多維度來源無法使用 Power Query 編輯器。

  • DirectQuery 中無法使用自動日期/時間階層。 DirectQuery 模式不支援依年份、季、月或日向下鑽研日期數據行。

  • 針對數據表或矩陣視覺效果,從 DirectQuery 來源傳回超過 500 個數據列的結果會有 125 個數據行的限制。 這些結果會顯示數據表或矩陣中的滾動條,讓您擷取更多數據。 在此情況下,數據表或矩陣中的數據行數目上限為 125。 如果您必須在單一數據表或矩陣中包含超過125個數據行,請考慮建立使用 MINMAXFIRSTLAST的量值,因為它們不會計入此最大值。

  • 您無法從匯入變更為 DirectQuery 模式。 如果您匯入所有必要的數據,則可以從 DirectQuery 模式切換到匯入模式。 無法切換回 ,主要是因為 DirectQuery 不支援的功能集。 透過多維度來源的 DirectQuery 模型,例如 SAP BW,無法從 DirectQuery 切換到匯入模式,因為外部量值的不同處理方式。

  • Power BI 服務 不支援從具有單一登錄 (SSO) 驗證的數據源參考 DirectQuery 數據表的匯出數據表和匯出數據行。