為什麼我的查詢會執行多次?

在 Power Query 中重新整理時,在幕後做了許多工作,以嘗試提供順暢的用戶體驗,並有效率且安全地執行您的查詢。 不過,在某些情況下,您可能會注意到重新整理數據時,Power Query 會觸發多個數據源要求。 有時候這些要求是正常的,但其他時候可能會防止這些要求。

發生多個要求時

下列各節說明一些 Power Query 可以將多個要求傳送至數據源的實例。

連線 or 設計

連線 ors 可以基於各種原因對數據源進行多次呼叫,包括元數據、快取結果、分頁等等。 此行為正常,且設計為以這種方式運作。

參考單一數據源的多個查詢

如果多個查詢從該數據源提取,就可能發生對相同數據源的多個要求。 即使在只有一個查詢參考數據源的情況下,這些要求也會發生。 如果一或多個其他查詢參考該查詢,則會獨立評估每個查詢,以及它相依的所有查詢。

在桌面環境中,會使用單一共用快取來執行數據模型中所有數據表的單一重新整理。 快取可以降低對相同數據源的多個要求的可能性,因為一個查詢可以受益於已經針對不同查詢執行和快取的相同要求。 不過,即使在這裡,您還是可以取得多個要求,因為數據源未快取(例如本機 CSV 檔案),對數據源的要求與因為下游作業而快取的要求(可能會改變折疊)、快取太小(相對不太可能),或因為查詢是在大致相同的時間執行。

在雲端環境中,每個查詢都會使用自己的個別快取來重新整理,因此查詢無法受益於已針對不同查詢快取的相同要求。

摺疊

有時候,Power Query 的折迭層可能會根據正在下游執行的作業,對數據源產生多個要求。 在這種情況下,您可以使用 來避免多個要求 Table.Buffer。 詳細資訊: 緩衝處理您的數據表

載入至 Power BI Desktop 模型

在 Power BI Desktop 中,Analysis Services (AS) 會使用兩個評估來重新整理數據:一個是擷取架構,一個是透過要求零個數據列來擷取架構,另一個是擷取數據。 如果計算零數據列架構需要擷取數據,則可能會發生重複的數據源要求。

數據隱私權分析

數據隱私權會自行評估每個查詢,以判斷查詢是否安全地一起執行。 此評估有時可能會導致對數據源提出多個要求。 給定要求來自數據隱私權分析的指示符號是,它會有「前 1000 名」條件(雖然並非所有數據源都支援這類條件)。 一般而言,停用數據隱私權,假設這是可接受的,將會在重新整理期間消除「前 1000 名」或其他數據隱私權相關要求。 詳細資訊: 停用數據隱私權防火牆

背景資料下載(也稱為「背景分析」)

與針對數據隱私權執行的評估類似,Power Query 編輯器預設會下載每個查詢步驟前 1000 個數據列的預覽。 下載這些數據列有助於確保數據預覽可在選取步驟后立即顯示,但也可能會導致重複的數據源要求。 詳細資訊: 停用背景分析

其他 Power Query 編輯器背景工作

各種 Power Query 編輯器背景工作也可以觸發額外的數據源要求(例如,查詢折疊分析、數據行分析、Power Query 在載入結果至 Excel 之後觸發的 1000 個數據列預覽的自動重新整理等等)。

隔離多個查詢

您可以關閉查詢程式的特定部分來隔離多個查詢的實例,以隔離重複要求的來源。 例如,如果您啟動:

  • 在 Power Query 編輯器中
  • 停用防火牆
  • 停用背景分析
  • 停用 數據行分析 和其他任何背景工作
  • [選擇性]執行 Table.Buffer

在此範例中,您只會有單一 M 評估,當您重新整理 Power Query 編輯器預覽時會發生。 如果此時發生重複的要求,則查詢的撰寫方式會以某種方式固有。 如果沒有,而且如果您逐一啟用上述設定,則可以觀察重複要求開始發生的時間點。

下列各節會更詳細地說明這些步驟。

設定 Power Query 編輯器

您不需要重新連線或重新建立查詢,只要在Power Query 編輯器中開啟您想要測試的查詢即可。 如果您不想讓現有的查詢混亂,您可以在編輯器中複製查詢。

停用數據隱私權防火牆

下一個步驟是停用數據隱私權防火牆。 此步驟假設您並不擔心來源之間的數據外洩,因此您可以使用在 Excel 中設定 [快速合併] 選項中所述的 [一律忽略隱私權等級] 設定或使用 [忽略隱私權層級],並可能改善 Power BI Desktop 隱私權等級中所述的效能設定,來停用數據隱私權防火牆。

在繼續正常測試之前,請務必復原此步驟。

停用背景分析

下一個步驟是停用背景分析。 背景分析是由 [允許數據預覽] 在停用 Power BI 的 Power Query 背景重新整理中所述的背景設定中下載所控制。 您也可以在 Excel 中停用此選項。

顯示 Excel 中已停用背景分析之查詢選項的影像。

緩衝處理您的數據表

或者,您也可以使用 Table.Buffer 來強制讀取所有數據,以模擬載入期間發生的情況。 Table.Buffer若要在 Power Query 編輯器中使用:

  1. 在 Power Query 編輯器公式列中,選取 fx 按鈕以新增步驟。

    強調 fx 按鈕位置的影像。

  2. 在公式列中,使用 Table.Buffer 括住上一個步驟的名稱(<上一個步驟名稱會在這裡>)。 例如,如果上一個步驟命名 Source為 ,公式列就會顯示 = Source。 編輯公式列中的步驟,以說 = Table.Buffer(Source)

詳細資訊: Table.Buffer

執行測試

若要執行測試,請在Power Query 編輯器中執行重新整理。

強調重新整理按鈕位置的影像。