尋找資料表中的一或多筆記錄

說明

Filter 函式會尋找資料表中符合公式的記錄。 使用 Filter 可尋找符合一或多個準則的一組記錄,以及捨棄未符合者。

LookUp 函式會尋找資料表中第一筆符合公式的記錄。 使用 LookUp 可尋找符合一或多個準則的單一記錄。

在這兩個函式中,系統會針對資料表的每筆記錄評估公式。 產生 true 的記錄會納入結果中。 除了一般公式的運算子外,您還可以使用 inexactin 運算子來找到相符的子字串。

在公式內可使用目前處理之記錄的欄位。 您只要依名稱 (如同任何其他值) 來參考這些欄位。 您也可以參考整個應用程式中的控制項屬性和其他值。 如需詳細資訊,請參閱以下範例和處理記錄範圍

Search 函式會尋找資料表中其資料行之一包含字串的記錄。 此字串可能出現在資料行內的任何位置,例如,如果搜尋 "rob" 或 "bert",就會在包含 "Robert" 的資料行中找到相符項目。 搜尋不區分大小寫。 不同於 FilterLookUpSearch 函式會使用單一字串來進行比對,而不是使用公式。

FilterSearch 會傳回包含相同原始資料表資料行的資料表,以及符合準則的記錄。 LookUp 則只會傳回套用公式以將記錄縮減為單一值後,所找到的第一筆記錄。 如果找不到任何記錄,FilterSearch 會傳回空白資料表,LookUp 則會傳回「空白」。

資料表是 PowerApps 中的值,如同字串或數字。 資料表可以傳遞至函式,也可以從函式傳回。 FilterSearchLookUp 不會修改資料表。 相反地,它們會採用資料表來作為引數,並從中傳回資料表、記錄或單一值。 請參閱使用資料表以取得詳細資料。

委派

可能的話,PowerApps 會將篩選和排序作業委派給資料來源,並依照需求逐頁查看結果。 例如,當您啟動可顯示已填入資料之資源庫控制項的應用程式時,一開始只會將第一組記錄傳送到裝置。 當使用者進行捲動時,會從資料來源取得其他資料。 結果是應用程式的啟動時間更快,並可存取非常大型的資料集。

不過,委派不一定永遠可行。 資料來源會因其透過委派支援的函式和運算子而有所不同。 如果不可能完整委派公式,編寫環境會以警告標記無法委派的部分。 可能的話,請考慮變更公式,以免無法委派函式和運算子。 委派清單詳述可以委派哪些資料來源和作業。

如果委派不可行,PowerApps 只會取下一小組記錄以在本機處理。 篩選和排序功能會作用於一組縮減的記錄。 資源庫中可用的項目可能不太完整,這可能會造成使用者混淆。

如需詳細資訊,請參閱委派概觀

語法

Filter( Table, Formula1 [, Formula2, ... ] )

  • Table - 必要項目。 要搜尋的資料表。
  • Formula(s) - 必要項目。 用來評估資料表之每筆記錄的公式。 此函式會傳回所有導致 true 的記錄。 您可以參考資料表內的資料行。 如果您提供多個公式,所有公式的結果會使用 And 函式來合併。

Search( Table, SearchString, Column1 [, Column2, ... ] )

  • Table - 必要項目。 要搜尋的資料表。
  • SearchString - 必要項目。 要搜尋的字串。 如果「空白」或是空字串,則會傳回所有記錄。
  • Column(s) - 必要項目。 要在*資料表*內搜尋的資料行名稱。 要搜尋的資料行必須包含文字。 資料行名稱必須是字串,並以雙引號括住。 不過,資料行名稱必須是靜態的,而不能使用公式來計算。 如果在這些資料行任何一個的資料內找到部分相符的 *SearchString*,則會傳回完整記錄。

LookUp( Table, Formula [, ReductionFormula ] )

  • Table - 必要項目。 要搜尋的資料表。 在 UI 中,語法會在函式方塊上方顯示為「來源」。
  • Formula - 必要項目。 用來評估資料表之每筆記錄的公式。 此函式會傳回導致 true 的第一筆記錄。 您可以參考資料表內的資料行。 在 UI 中,語法會在函式方塊上方顯示為「條件」。
  • ReductionFormula - 選擇性項目。 系統會針對所找到的記錄評估這個公式,然後將記錄縮減為單一值。 您可以參考資料表內的資料行。 如果您未使用此參數,則函式會傳回資料表中的完整記錄。 在 UI 中,語法會在函式方塊上方顯示為「結果」。

範例

下列範例會使用 IceCream 資料來源

公式 說明 結果
Filter( IceCream, OnOrder > 0 ) 傳回 OnOrder 大於零的記錄。
Filter( IceCream, Quantity + OnOrder > 225 ) 傳回 QuantityOnOrder 資料行總和大於 225 的記錄。
Filter( IceCream, "chocolate" in Lower( Flavor ) ) 傳回 Flavor 名稱中出現 "chocolate" 這個字的記錄,不區分大寫或小寫字母。
Filter( IceCream, Quantity < 10 && OnOrder < 20 ) 傳回 Quantity 小於 10 且 OnOrder 小於 20 的記錄。 沒有記錄符合這些準則,所以會傳回空白資料表。
Search( IceCream, "choc", "Flavor" ) 傳回 Flavor 名稱中出現 "choc" 字串的記錄,不區分大寫或小寫字母。
Search( IceCream, "", "Flavor" ) 因為搜尋字詞是空的,所以會傳回所有記錄。
LookUp( IceCream, Flavor = "Chocolate", Quantity ) 搜尋 Flavor 等於 "Chocolate" 的記錄,其中有一個。 對於所找到的第一筆記錄,系統會傳回該記錄的 Quantity 100
LookUp( IceCream, Quantity > 150, Quantity + OnOrder ) 搜尋 Quantity 大於 100 的記錄,其中有多個。 對於所找到的第一筆記錄 (即 "Vanilla" Flavor),系統會傳回 QuantityOnOrder 資料行的總和。 250
LookUp( IceCream, Flavor = "Pistachio", OnOrder ) 搜尋 Flavor 等於 "Pistachio" 的記錄,其中沒有任何一個。 因為沒找到任何項目,Lookup 會傳回「空白」。 空白
LookUp( IceCream, Flavor = "Vanilla" ) 搜尋 Flavor 等於 "Vanilla" 的記錄,其中有一個。 因為未提供任何縮減公式,所以系統會傳回整筆記錄。 { Flavor: "Vanilla", Quantity: 200, OnOrder: 75 }

搜尋使用者體驗

在許多應用程式中,您可以在搜尋方塊中輸入一或多個字元,以篩選大型資料集內的記錄清單。 當您輸入時,此清單只會顯示符合搜尋條件的記錄。

本主題其餘部分的範例會顯示搜尋名為客戶之清單的結果,該清單中包含此資料︰

若要將此資料來源建立為集合,請建立按鈕控制項,並將其 OnSelect 屬性設定為下列公式︰

ClearCollect( Customers, Table( { Name: "Fred Garcia", Company: "Northwind Traders" }, { Name: "Cole Miller", Company: "Contoso" }, { Name: "Glenda Johnson", Company: "Contoso" }, { Name: "Mike Collins", Company: "Adventure Works" }, { Name: "Colleen Jones", Company: "Adventure Works" } ) )

和此範例一樣,您可以在畫面底部的資源庫控制項中顯示記錄清單。 在靠近畫面頂端的地方,您可以新增名為 SearchInput文字輸入控制項,讓使用者可以指定其感興趣的記錄。

當使用者在 SearchInput 中輸入字元時,資源庫中的結果會自動經過篩選。 在此案例中,資源庫會設定為顯示客戶名稱 (而非公司名稱) 開頭為 SearchInput 中字元序列的記錄。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示下列結果︰

若要根據名稱資料行進行篩選,請將資源庫控制項的 Items 屬性設定為下列其中一個公式︰

公式 說明 結果
Filter( Customers, StartsWith( Name, SearchInput.Text ) ) 篩選客戶資料來源中,名稱資料行開頭出現此搜尋字串的記錄。 此測試不區分大小寫。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示 Colleen JonesCole Miller。 資源庫不會顯示 Mike Collins,因為該筆記錄的名稱資料行開頭不是此搜尋字串。
Filter( Customers, SearchInput.Text in Name ) 篩選客戶資料來源中,名稱資料行任意處出現此搜尋字串的記錄。 此測試不區分大小寫。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示 Colleen JonesCole MillerMike Collins,因為這些記錄的名稱資料行某處皆出現此搜尋字串。
Search( Customers, SearchInput.Text, "Name" ) 類似於使用 in 運算子,Search 函式會搜尋每一筆記錄的名稱資料行內任意處是否有相符項目。 請注意,您必須以雙引號括住資料行名稱。

您可以擴大搜尋,將公司資料行以及名稱資料行納入其中︰

公式 說明 結果
Filter( Customers, StartsWith( Name, SearchInput.Text ) || StartsWith( Company, SearchInput.Text ) ) 篩選客戶資料來源中,名稱資料行或公司資料行開頭為此搜尋字串 (例如,co) 的記錄。 若任一 StartsWith 函式為 *true*,則 || 運算子為 *true*。
Filter( Customers, SearchInput.Text in Name || SearchInput.Text in Company ) 篩選客戶資料來源中,名稱資料行或公司資料行內的任意處包含此搜尋字串 (例如,co) 的記錄。
Search( Customers, SearchInput.Text, "Name", "Company" ) 類似於使用 in 運算子,Search 函式會搜尋客戶資料來源中,名稱資料行或公司資料行內的任意處包含此搜尋字串 (例如,co) 的記錄。 如果您想要指定多個資料行和多個 in 運算子,Search 函式會比 Filter 更容易理解和撰寫。 請注意,您必須以雙引號括住資料行名稱。