共用方式為


查詢限制:委派和查詢限制

當 Power Fx 查詢可完全轉譯為可在資料來源上執行的等效查詢時,Power Apps 搭配後端資料來源效果最佳。 Power Apps 會傳送一個資料來源能理解的查詢給資料來源,資料來源執行該查詢,然後 Power Apps 取得結果。 例如,資料來源篩選資料,只傳回符合篩選條件的資料列。 當這個過程發生時,Power Apps 會將查詢委派 給資料來源。

但 Power Fx 查詢並非總能轉譯為每個資料來源上的等效查詢。 例如,Dataverse 支援的查詢功能比 Excel 更多。 Dataverse 支援「in」(成員) 查詢運算子,但 Excel 不支援。 如果查詢使用資料來源不支援的功能,則查詢是 不可委派的 。 如果查詢運算式的任何部分無法委派,Power Apps 將不會委派查詢的任何部分。

當查詢無法委派時,Power Apps 會從資料來源擷取前 500 筆記錄,然後在這些資料上執行查詢中的動作。 您可以將此限制增加到 2,000 筆記錄。 更改限制Power Apps 將結果大小限制為 500 筆,以確保應用程式良好的效能。 較大的結果集可能會影響你的應用程式及 Power Apps 的效能。

但這種限制可能會帶來問題,因為如果資料來源有超過 500 或 2,000 筆記錄,查詢可能會傳回不正確的結果。 例如,如果您的資料來源有 1000 萬筆記錄,並且您的查詢需要處理資料的最後部分 (例如以「Z」開頭的姓氏),並且您的查詢使用不可委託的運算子 (例如 distinct),那麼您只能獲得前 500 條或 2,000 條記錄。 所以,你會得到不正確的結果。

請使用資料來源的可委派資料表來建立 Power Fx 查詢。 僅使用可委派的查詢功能。 這是讓您的應用程式保持良好效能並確保使用者獲得所需所有資訊的唯一方法。

注意委派警告,其中顯示了無法進行委派的情況。 如果您使用小型資料集 (少於 500 筆記錄),則可以使用任何資料來源和公式,因為如果公式未委派,應用程式會在本機處理資料。

Note

委派警告可協助您管理應用程式,以便它能傳回正確的結果。 如果資料來源中的資料超過 500 筆記錄,且函數未委派,Power Fx 會以藍色底線標示公式。

可委派的資料來源

委派僅適用於某些表格式資料來源。 如果資料來源支援委派,其連接器文件會解釋該支援。 這些熱門的表格型數據來源支援委派功能:

匯入的 Excel 工作簿(透過「 將靜態資料加入你的應用程式 資料來源」)、集合以及存放在上下文變數中的表格則不需要委派。 此資料已在記憶體中,因此您可以使用完整的 Power Apps 語言。

可委派的函數

僅使用可委派的公式。 本文列出了可以委派的公式元素。 每個資料來源都不同,且並非所有資料來源都支援所有這些元素。 檢查公式中的委派警告。

篩選函式

你可以委派篩選、搜尋優先查詢。

篩選查詢 函式中,使用這些函式與表格欄位來選擇適當的紀錄:

  • And (包含 &&), Or (包含 ||), Not (包含 !)
  • > [!註]

    In 只會針對基礎資料來源上的欄位進行委派。 例如,如果資料來源是帳戶表,則 Filter(Accounts, Name in ["name1", "name2"]) 會委派給資料來源進行評估。 但不會委派 Filter(Accounts, PrimaryContact.Fullname in ["name1", "name2"]),因為完整名稱欄與帳戶位於不同的資料表 (PrimaryContact) 上。 運算式是在本機進行計算。

  • =<>>=<=><
  • +-
  • TrimEnds
  • IsBlank
  • 開頭結束
  • 所有記錄中相同的常數值,例如控制項屬性,以及 全域和內容變數

您也可以使用公式的各個部分來計算所有記錄的常數值。 例如,Left( Language(), 2 )Date( 2019, 3, 31 )Today() 不依賴記錄的任何資料欄,因此它們對所有記錄都傳回相同的值。 這些值會作為常數傳送到資料來源,並且不會阻止委派。

上一個列表不包括以下值得注意的項目:

委派和集合

當您使用 WithUpdateContextSet時,這些函數會在內部建立集合。 集合是靜態的記憶體內記錄清單,無法參與委派。 您沒有看到委派警告。

查詢限制

尋找和擴展層級

Power Apps 允許您使用最多兩層的查閱 (lookup)。 Power Fx 查詢運算式中最多可包含兩個查閱函式,以維持效能。 當查詢運算式包含查閱時,Power Apps 會先查詢基礎資料表,然後執行第二次查詢以擴展第一個資料表的查閱資訊。 除此之外,還支援一個額外的層級作為最大值。 在離線情境中,只支援一層查閱擴展。

你可以在一次查詢中展開或合併最多 20 個實體。 如果您需要在一個查詢中連接超過 20 個表,請嘗試在資料伺服器上建立檢視 (如果可能)。

運算式評估 - 實體的屬性必須位於方程式運算子的左側「LHS」

將要比較的實體的屬性放在方程式的左邊 (LHS)。 例如,在下列運算式中,實體屬性「Business unit ID".Name」位於左側 (LHS),此運算式可正常運作:

Filter(
        Budgets,
        'Business unit ID'.Name = LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name,
        DataCardValue37.Selected.'Date Range String'='Date Range String'
    )

然而,這個表達式不起作用:

 Filter(
        Budgets,
        LookUp(
            Users,
            'Primary Email' = User().Email,
            'Business Unit'
        ).Name = 'Business unit ID'.Name,
        'Date Range String'=DataCardValue37.Selected.'Date Range String'
    )

排序函數

SortSortByColumns 可以被委派。

排序中,公式只能是單一資料欄的名稱,不包含其他運算子或函數。

彙總函數

一些彙總函數可以根據後端支援進行委派。 可以委派 SumAverageMinMax 等函式。 計數函數 (例如 CountRowsCount) 也可以委派。 不過, RemoveIfUpdateIf 有委派限制。 只有有限數量的資料來源支援這些功能的委派。 如需進一步了解,請參閱委派清單

不可委派的職能

所有其他功能都無法委派。 值得注意的功能包括:

不可委派的限制

無法委派的公式將在本機處理。 本機處理可讓您使用完整的 Power Apps 公式語言。 但有一個權衡:所有數據都會先到達設備,這可能意味著通過網絡獲取大量數據。 此過程可能需要一些時間,並且會使您的應用程式看起來緩慢或無回應。

為避免此問題,Power Apps 預設限制本地可處理的資料量為 500 筆。 此限制可讓您完全使用小型資料集,並透過查看部分結果來處理大型資料集。

使用此功能時要小心,因為它可能會讓使用者感到困惑。 例如,如果您使用具有選擇公式的 Filter 函數,而公式無法委派給具有一百萬筆記錄的資料來源,則只會掃描前 500 筆記錄。 如果您想要的記錄是記錄 501 或 500,001,則 篩選 器不會尋找或傳回它。

彙總函數也可能令人困惑。 例如,如果您對同一百萬筆記錄資料來源中的某一資料欄使用 Average,則無法委派 Average,因為運算式未委派 (請參閱前面的說明)。 僅對前 500 筆記錄進行平均。 如果您不小心,使用者可能會認為部分答案是完整答案。

變更限制

預設記錄數為 500 筆,但您可以變更應用程式的此數目:

  1. 選取設定
  2. 一般下,將資料列限制設定從 1 變更為 2000。

在某些情況下,2,000、1,000 或 1,500 筆記錄就足以滿足您的案例。 您可以增加此數字以滿足您的需求,但這樣做會導致應用程式的效能下降,尤其是對於具有多資料欄的寬資料表。 最好的方法還是盡可能地委派任務。

為確保應用程式可擴展至大型資料集,請將此值設為 1。 任何無法委派的事情都會傳回一筆記錄,這在測試應用程式時很容易偵測到。 這可以幫助您避免在將概念驗證應用程式投入生產時出現意外。

委派警告

當您建立無法委派的公式時,Power Apps 會顯示警告 (黃色三角形)。 更容易知道哪些是委派的,哪些是未委派的。

委派警告只會出現在使用可委派資料來源的公式上。 如果您沒有看到警告,但認為您的公式未被委派,請根據本文前面的可委派資料來源清單檢查您的資料來源類型。

範例

在此範例中,您將基於名為 [dbo].[Fruit] 的 SQL Server 表自動產生三螢幕應用程式。 若要了解如何產生應用程式,可將 Dataverse 相關文章中的類似原則套用至 SQL Server。

三個畫面的應用程式。

資源庫的 Items 屬性使用具有 SortByColumnsSearch 函數的公式,這兩個函數都可以委派。

在搜尋框中輸入 Apple

當應用程式與 SQL Server 通訊以處理搜尋請求時,行進點會短暫地出現在螢幕頂端附近。 將顯示所有符合搜尋條件的記錄,即使資料來源有數百萬筆記錄。

搜尋文字輸入控制項。

搜尋結果包括 "Apples""Pineapple",因為 Search 函數會查看文字資料行中的每個位置。 若要只尋找在水果名稱開頭包含搜尋字詞的記錄,請使用另一個可委派函數 Filter 和更具體的搜尋字詞。 為了簡單起見,刪除 SortByColumns 呼叫。

移除 SortByColumns 呼叫。

新的結果會包括 "Apples",但未包括 "Pineapple"。 如果左側瀏覽列顯示縮圖,則資源庫旁邊和螢幕縮圖中會出現一個黃色三角形。 公式的一部分下方出現一條藍色波浪線。 這些項目中每一個都會發出警告。 當您將滑鼠懸停在資源庫旁的黃色三角形上時,會出現以下訊息:

將滑鼠指標停留在委派警告上方。

SQL Server是一個可委派的資料來源,Filter 是一個可委派的函數。 但是,MidLen 不能委派給任何資料來源。

但它確實有效,不是嗎? 有點兒。 這就是為什麼這是一個警告,而不是一個紅色的波浪線。

  • 如果表中的記錄少於 500 條,則公式可以完美運作。 所有記錄都被帶到裝置,並在本機套用篩選器
  • 如果表中有超過 500 筆記錄,則公式不會傳回記錄 501 或更高,即使它符合條件。

請參閱