共用方式為


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

了解委派

當 Power Fx 查詢完全轉換為在資料來源上執行的等效查詢時,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 筆記錄),則可以使用任何資料來源和公式,因為如果無法委派公式,應用程式會在本機處理資料。

注意

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

可委派的資料來源

委派僅適用於某些資料表資料來源。 如果資料來源支援委派,其連接器文件會解釋該支援。 例如,這些流程行的資料表資料來源支援委派:

匯入的 Excel 工作簿 (使用將靜態資料新增至應用程式資料來源)、集合和儲存在上下文變數中的資料表不需要委派。 所有這些資料都已在記憶體中,因此您可以使用完整的 Power Apps 語言。

可委派的函數

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

篩選函式

可以委派篩選搜尋優先尋找

FilterLookUp 函數中,使用這些函數和資料表的資料欄來選擇適當的記錄:

  • And (包括 &&)、Or (包括 ||)、Not (包括 !)
  • > [!NOTE] 中

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

  • =<>>=<=><
  • +-
  • TrimEnds
  • IsBlank
  • StartsWithEndsWith
  • 在所有記錄都相同的常數值,例如控制屬性和全域和內容變數

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

先前的清單沒有包括這些值得注意的項目。

委派和集合

當您使用 WithUpdateContextSet 時,它們會在內部建立集合。 集合是記憶體中的靜態記錄清單,不參與委派。 您沒有看到委派警告。

查詢限制

尋找和擴展層級

Power Apps 可讓您使用最多兩個查閱層級。 Power Fx 查詢運算式最多可以包含兩個查閱函數以保持效能。 當查詢運算式包含查閱時,Power Apps 會先查詢基礎表,然後執行第二個查詢以使用查閱資訊擴展第一個表。 除此之外,還支援一個額外的層級作為最大值。 但對於離線情境,僅支援一級查閱擴充功能。

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

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

將要比較的實體的屬性放在方程式的左邊 (LHS)。 例如,在下列運算式中,實體屬性業務單位 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,則 Filter 不會考慮或傳回它。

彙總函數也可能令人困惑。 例如,如果您對同一百萬筆記錄資料來源中的某一資料欄使用 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 或更高,即使它符合條件。

另請參閱