PowerApps 包含一組強大的函式,可用來篩選、排序與形塑資料表格:FilterSortAddColumns 函式等,不一一列舉。 透過這些函式,您可以讓使用者專注存取他們所需的資訊。 對於具有資料庫背景的使用者而言,使用這些函式就等同於撰寫資料庫查詢。

要建立有效率的應用程式,關鍵在於盡可能減少必須帶入裝置的資料量。 或許在數百萬筆記錄中只需要少許記錄,或是一個彙總值就可以代表成千上萬筆記錄。 又或者系統只會擷取第一組記錄,並在使用者以手勢表示需要更多記錄時帶入其餘的記錄。 專注於所需的資訊可大幅減少您應用程式所需的處理電力、記憶體及網路頻寬,讓您的使用者更快速得到回應,即使是使用透過行動數據網路連接的電話。

「委派」會透過以 PowerApps 公式表示的方式,來滿足減少在網路上移動資料的需求。 簡單地說,這表示 PowerApps 會將資料的處理委派給資料來源,而非將資料移至應用程式以供在本機處理。

但複雜的是,並非每一件可用 PowerApps 公式表示的項目都能委派給每個資料來源,這也是本文之所以存在的原因。 PowerApps 語言會模擬 Excel 的公式語言,其設計能夠完整且立即存取記憶體中的完整活頁簿,以及各種數字和文字操作函式。 因此,PowerApps 語言遠比大部分資料來源可以支援的語言豐富,包括如 SQL Server 等強大的資料庫引擎。

處理大型資料集需使用可委派的資料來源與公式。 它是讓您的應用程式正常執行,並確保使用者可以存取所有所需資訊的唯一方法。 請注意藍點建議會將無法委派的位置加上旗標。 如果您正在處理小型資料集 (小於 500 筆記錄),您可以使用任何資料來源與公式,因為如果公式無法委派,便會在本機完成處理。

可委派的資料來源

請參閱委派清單,以取得哪些資料來源支援委派及支援程度的完整清單。

我們將持續對現有資料來源新增委派支援,並新增更多資料來源。

儲存在內容變數中的已匯入 Excel 活頁簿 (使用「新增靜態資料到您的應用程式」資料來源)、集合及表格不需要委派。 此資料已全部在記憶體中,且可套用完整的 PowerApps 語言。

可委派的函式

下一個步驟是僅使用可委派的公式。 以下提供可委派的公式元素。 不過,每個資料來源都不同,而且並非所有的資料來源都支援以下所有的公式元素。 請檢查您特定公式中的藍點建議。

這些清單會隨著時間改變。 我們會持續努力以支援更多具有委派功能的函式和運算子。

篩選函式

FilterSearchLookUp 可以委派。

FilterLookUp 函式內,可將下列項目搭配資料表的資料行使用,以選取適當的記錄:

也可以使用公式中為所有記錄評估常數值的部分。 例如,Left( Language(), 2 ) 不依賴記錄的任何資料行,因此會為所有記錄傳回相同的值。 它實際上是常數。 內容變數、集合及訊號的使用不是常數,因此會防止委派 FilterLookUp

上述清單中遺漏某些值得注意的項目︰

排序函式

SortSortByColumns 可以委派。

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

其他函式

所有其他函式皆不支援委派,包括以下值得注意的函式︰

常見的模式是使用 AddColumnsLookUp 將某個資料表的資訊合併到另一個資料表,在資料庫用語中,這通常稱為「聯結」。 例如:

  • AddColumns( Products, "Supplier Name", LookUp( Suppliers, Suppliers.ID = Product.SupplierID ).Name )

即使 ProductsSuppliers 是可委派的資料來源,且 LookUp 是可委派的函式,但 AddColumns 函式是不可委派的。 整個公式的結果將受限為 Products 資料來源的第一個部分。

由於 LookUp 及其資料來源是可委派的,因此即使資料來源很大,仍可在資料來源中隨處發現 Suppliers 的符合項目。 可能的缺點是 LookUp 將為 Products 中的這些第一筆記錄分別呼叫該資料來源,造成網路上有太多的通訊。 如果 Suppliers 夠小且不常變更,您可以在應用程式開始時 (使用開啟畫面上的 OnVisible) 透過 Collect 呼叫快取您應用程式中的資料來源,並改為對它進行 LookUp

非可委派限制

無法委派的公式將會在本機處理。 如此便能使用到 PowerApps 公式語言的完整範圍。 但會花費高代價:所有的資料必須先帶入裝置,這會涉及在網路上擷取大量的資料。 這需要一些時間,因此會讓人留下您的應用程式速度慢或可能沒有反應的印象。

為避免此狀況發生,PowerApps 對可在本機處理的資料量設下限制:500 筆記錄。 我們選擇的這個數字讓您仍能完整存取小型資料集,並能夠看到部分的結果以精簡使用大型資料集。

使用此工具時務必格外小心,因為它會對使用者造成混淆。 例如,請思考一下無法委派含選擇公式的 Filter 函式,且有超過一百萬筆記錄資料來源。 由於篩選將在本機完成,因此只會掃描該百萬筆記錄的前 500 筆記錄。 如果所需的記錄為記錄 501 或 500,001,則 Filter 不會考慮或傳回該記錄。

會造成混淆的另一個地方就是彙總函式。 對同一個百萬筆記錄資料來源採用 Average。 由於 Average 尚無法委派,因此將只平均前 500 筆記錄。 您必須謹慎小心,否則會將部分回答誤解為您應用程式使用者的完整回答。

藍點建議

為了讓您更容易知道何者可委派,何者不可委派,作者以自身經驗提供當公式包含無法委派之項目時的藍點建議。

藍點只會顯示在於可委派資料來源上操作的公式上。 如果您看不到藍點,且認為您的公式未被正確委派,請對照上述的可委派資料來源清單來檢查資料來源類型。

範例

在此範例中,我們將使用包含一些產品 (尤其是水果) 的 SQL Server 資料表,並命名為 [dbo].[Products]。 在 [新增] 畫面中,PowerApps 會建立一個與此資料來源連線的基本三畫面應用程式:

請注意資源庫之 Items 屬性的公式。 它使用 SortByColumnsSearch 函式,這兩種函式都可以委派。

讓我們在搜尋文字輸入控制項中輸入 "Apple"。 如果我們的觀察力很敏銳,當系統處理新搜尋中的新項目時,我們會在畫面頂端看到很快就消失的進行中小點。 進行中小點代表我們正在與 SQL Server 通訊:

由於全部可委派,因此即使 [dbo].[Products] 資料表包含數百萬筆記錄,我們仍能在使用者捲動結果時逐頁翻閱資源庫中的記錄來找到所有的記錄。

您會發現到我們正在看的這筆記錄同時符合 "Apple" 與 "Pineapple"。 Search 函式將會在文字資料行中的每一處尋找搜尋字詞。 但如果相反地,假設我們只想要尋找在水果名稱開頭的搜尋字詞。 我們會使用另一個可委派函式 Filter,以及更複雜的搜尋字詞 (為求簡化,我們將移除 SortByColumns 呼叫):

這似乎是可運作的,目前只有 "Apples" 會正確顯示,"Pineapple" 則不會。 不過,在資源庫旁會顯示藍點,在公式部分下方則會有藍色波浪線。 在畫面縮圖中甚至會出現藍點。 如果我們將游標停留在資源庫旁的藍點上,我們看到下列內容︰

雖然我們使用可委派的函式 Filter,且使用的 SQL Server 為可委派的資料來源,但我們在 Filter 內使用的公式非可委派。 MidLen 無法委派給任何資料來源。

但是它能運作,不是嗎? 沒錯! 這也是為何顯示的是藍點,而非黃色的危險圖示與代表錯誤的紅色波浪。 如果 [dbo].[Products] 資料表包含不到 500 筆的記錄,則沒錯,這能夠完美地執行。 所有的記錄皆已帶入裝置,並已在本機套用 Filter

但如果相反地,此資料表包含超過 500 筆記錄,則在資源庫中將只顯示資料表前 500 筆記錄中開頭為 "Apple" 的水果。 如果 "Apple, Fuji" 在記錄 501 或 500,001 中顯示為名稱,則將找不到它。