Filter、Search 與 LookUp 函式
適用於: 畫布應用 桌面流 模型驅動應用 Power Pages Power Platform CLI
觀看此影片瞭解如何使用 Filter、**Search 和 LookUp 函式:
注意
PAC CLI pac power-fx 命令 不支援 搜尋 功能。
名描述
Filter 函式會尋找資料表中符合公式的記錄。 使用 Filter 可尋找符合一或多個準則的一組記錄,並丟棄那些不符合的記錄。
LookUp 函式會尋找資料表中第一筆符合公式的記錄。 使用 LookUp 可尋找符合一或多個準則的單一記錄。
在這兩個函數中,系統會針對資料表的每筆記錄評估公式。 產生 true 的記錄會納入結果中。 除了一般公式的運算子外,您還可以使用 in 和 exactin 運算子找到相符的子字串。
目前處理中的記錄其各個欄位可供您在公式內使用。 使用 ThisRecord 運算子,,或只需依名稱參照欄位,就像任何其他的值一樣。 As 運算子也可以用來命名所處理的記錄,這有助於讓您的公式更易於了解並讓嵌套記錄可以存取。 如需更多資訊,請參閱下列範例以及 處理記錄範圍。
Search 函式會尋找資料表中其欄位之一包含字串的記錄。 此字串可能出現在欄位內的任何位置,例如,如果搜尋 "rob" 或 "bert",就會在包含 "Robert" 的欄位中找到相符項目。 搜尋不區分大小寫。 不同於 Filter 和 LookUp,Search 函式會使用單一字串來進行比對,而不是使用公式。
Filter 和 Search 返回一個表,該表包含與原始表相同的列以及符合條件的記錄。 LookUp 在應用公式將記錄減少為單個值后,僅返回找到的第一條記錄。 如果找不到任何記錄,Filter 和 Search 會傳回 空白 資料表,LookUp 則會傳回 空白。
表格 是一個值, Power Apps就像字串或數字一樣。 資料表可以傳遞至函數,也可以從函數傳回。 Filter、 Search 和 LookUp 不會修改表。 相反地,它們會採用資料表來作為引數,並從中傳回資料表、記錄或單一值。 請參閱 使用資料表 以取得詳細資料。
委派
如果可行,Power Apps 將委派篩選、對資料來源作業進行排序並視需要逐頁瀏覽結果。 例如,當您啟動應用程式以顯示填有資料的組件庫控制項時,最初將只會向裝置提供第一組記錄。 隨著使用者進行捲動,將陸續從資料來源提供額外的資料。 如此可縮短應用程式的啟動時間並能夠存取龐大的資料集。
不過,委派不一定始終可行。 各種資料來源支援委派的函數與運算子皆不盡相同。 如果未能完整委派某個公式,製作環境會以警告標示無法委派的部分。 可行的情況下,請考慮更改公式以避開無法委派的函數和運算子。 委派清單詳列了可供委派的資料來源及作業。
如果無法進行委派,Power Apps 將僅提取少量的記錄以供本機使用。 篩選和排序函數將對一組有限的記錄執行運算。 組件庫提供的內容不一定是完整的全貌,可能會造成使用者困惑。
詳細資訊請參閱委派概觀。
語法
過濾器(表*, 公式 1 [,*公式 2*,... ])
- Table - 必需。 要搜尋的資料表。
- 公式 - 必需。 用來評估資料表之每筆記錄的公式。 此函式會傳回所有導致 true 的記錄。 您可以參考資料表內的欄位。 如果您提供多個公式,所有公式的結果會使用 And 函式來合併。
搜索(Table*, SearchString,Column1 [,*Column2*,... ])
- Table - 必需。 要搜尋的資料表。
- SearchString - 必需。 要搜尋的字串。 如果 空白 或空字串,會傳回所有記錄。
- Columns - 必需。 要在 資料表 內搜尋的欄位名稱。 如果在這些欄位任何一個的資料內找到部分相符的 SearchString,則會傳回完整記錄。
注意
在 Power Apps 版本 3.24042 之前,Search 函式的欄名稱是透過使用雙引號的文字字串指定的,如果連接到資料來源,它們也需要是邏輯名稱。 例如,使用雙引號的邏輯名稱 "cr43e_name",而不是不含引號的顯示名稱 Name。 對於包含帶有空格的欄名稱的 SharePoint 和 Excel 資料來源,每個空格均以「_x0020_」指定,例如「欄名稱」為「Column_x0020_Name」。 在此版本之後,所有應用程式都會自動更新為本文中所述的新語法。
LookUp(表*, 公式 [,減少公式])
- Table - 必需。 要搜尋的資料表。 在 UI 中,語法會在函式方塊上方顯示為 來源。
- 公式 - 必需。 用來評估資料表之每筆記錄的公式。 此函式會傳回導致 true 的第一筆記錄。 您可以參考資料表內的欄位。 在 UI 中,語法會在函式方塊上方顯示為 條件。
- ReductionFormula - 可選。 系統會針對所找到的記錄評估這個公式,然後將記錄縮減為單一值。 您可以參考資料表內的欄位。 如果您未使用此參數,則函數會傳回資料表中的完整記錄。 在 UI 中,語法會在函式方塊上方顯示為 結果。
範例
下列範例會使用 IceCream 資料來源:
公式 | 名描述 | Result |
---|---|---|
篩選條件(IceCream,OnOrder > 0) | 傳回 OnOrder 大於零的記錄。 | |
篩選條件(IceCream,數量 + OnOrder > 225) | 傳回 Quantity 和 OnOrder 欄位總和大於 225 的記錄。 | |
篩選 (IceCream,“chocolate”in Lower(flavor)) | 傳回 Flavor 名稱中出現 "巧克力" 文字的記錄,不區分大寫或小寫字母。 | |
過濾器(霜淇淋,數量 < 10 & OnOrder < 20) | 傳回 Quantity 小於 10 且 OnOrder 小於 20 的記錄。 沒有記錄符合這些準則,所以會傳回空白資料表。 | |
搜索(IceCream,“choc”,Flavor) | 傳回 Flavor 名稱中出現 "choc" 字串的記錄,不區分大寫或小寫字母。 | |
搜索(IceCream,“”,Flavor) | 因為搜尋字詞是空的,所以會傳回所有記錄。 | |
LookUp(IceCream,flavor =“chocolate”,數量) | 搜尋 Flavor 等於 "Chocolate" 的記錄,結果有一個。 對於所找到的第一筆記錄,系統會傳回該記錄的 數量。 | 100 |
LookUp(霜淇淋,數量 > 150,數量 + OnOrder) | 搜尋 Quantity 大於 150 的記錄,其中有多個。 對於所找到的第一筆記錄 (即 "Vanilla" Flavor),系統會傳回 Quantity 和 OnOrder 欄位的總和。 | 250 |
LookUp(IceCream,Flavor =“開心果”,OnOrder) | 搜尋 Flavor 等於 "Pistachio" 的記錄,其中沒有任何一個。 因為沒找到任何項目,查詢傳回空白。 | 空白 |
LookUp(IceCream,Flavor =“Vanilla”) | 搜尋 Flavor 等於 "Vanilla" 的記錄,其中有一個。 因為未提供任何縮減公式,所以系統會傳回整筆記錄。 | { Flavor: "Vanilla", Quantity: 200, OnOrder: 75 } |
使用選項資料行篩選
下列範例使用 Microsoft Dataverse 中的客戶資料表格做為資料來源。 此範例說明如何根據所選 Combo box 控制項值來篩選客戶清單:
按步就班
打開空白應用程式。
選取新畫面選項以新增新畫面。
在插入索引標籤上,選取Gallery,然後選取垂直。
在右窗格的屬性索引標籤上,開啟資料來源然後選取客戶。
(選擇性) 在版面配置清單中,選取不同的選項。
在插入索引標籤上,選取輸入,然後選取下拉式方塊。 重複該步驟以新增兩個以上的下拉式方塊控制項。
對於每個 combo box 控制項,在右窗格的屬性索引標籤上,開啟資料來源然後選取客戶。 選取欄位選項旁的編輯,然後選取主要文字 與 SearchField 值。 主要文字應該是要新增至下拉式方塊的選項資料行。 對其他兩個下拉式方塊控制項重複該步驟。
現在選取Gallery控制項,並將 Items 屬性設定為下列公式︰
Filter(Accounts, 'Industry' = ComboBox3.Selected.Industry Or IsBlank(ComboBox3.Selected.Industry), 'Relationship Type' = ComboBox2.Selected.'Relationship Type' Or IsBlank(ComboBox2.Selected.'Relationship Type'), 'Preferred Method of Contact' = ComboBox1.Selected.'Preferred Method of Contact' Or IsBlank(ComboBox1.Selected.'Preferred Method of Contact'))
搜尋使用者體驗
下列範例會使用 IceCream 資料來源:
在許多應用程式中,您可以在搜尋方塊中輸入一或多個字元,以篩選大型資料集內的記錄清單。 當您輸入時,此清單只會顯示符合搜尋條件的記錄。
本文其餘章節的範例會顯示搜尋名為客戶之清單的結果,該清單中包含此資料︰
若要將此資料來源建立為集合,請建立 Button 控制項,並將其 OnSelect 屬性設為以下公式︰
ClearCollect(客戶,表({ 名稱:“Fred Garcia”,公司:“Northwind Traders” }, { 名稱:“Cole Miller”,公司:“Contoso” }, { 名稱:“Glenda Johnson”,公司:“Contoso” }, { 名稱:“Mike Collins”,公司:“Adventure Works” }, { 名稱:“Colleen Jones”,公司:“Adventure Works”) }
和此範例一樣,您可以在畫面底部的 Gallery 控制項 中顯示記錄清單。 在靠近畫面頂端的地方,您可以新增名為 SearchInput 的 Text input 控制項,讓使用者可以指定其感興趣的記錄。
當使用者在 SearchInput 中輸入字元時,資源庫中的結果會自動經過篩選。 在此案例中,資源庫會設定為顯示客戶名稱 (而非公司名稱) 開頭為 SearchInput 中字元序列的記錄。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示下列結果︰
若要根據 名稱 欄位進行篩選,請將資源庫控制項的 Items 屬性設定為下列其中一個公式︰
公式 | 描述 | 結果 |
---|---|---|
篩選器 (客戶,StartsWith(名稱,SearchInput.Text)) | 篩選 客戶 資料來源中,Name 欄位開頭出現此搜尋字串的記錄。 此測試不區分大小寫。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示 Colleen Jones 和 Cole Miller。 資源庫不會顯示 Mike Collins,因為該筆記錄的 Name 欄位開頭不是此搜尋字串。 | |
Filter(Customers,SearchInput.Text in Name) | 篩選 客戶 資料來源中,Name 欄位任意處出現此搜尋字串的記錄。 此測試不區分大小寫。 如果使用者在搜尋方塊中輸入 co,資源庫會顯示 Colleen Jones、Cole Miller 和 Mike Collins,因為這些記錄的 Name 欄位某處皆出現此搜尋字串。 | |
搜尋(客戶、SearchInput.Text、名稱) | 類似於使用 in 運算子,Search 函式會搜尋每一筆記錄的 Name 欄位內任意處是否有相符項目。 您必須以雙引號括住資料行名稱。 |
您可以擴大搜尋,將公司資料行和名稱資料行納入其中︰
公式 | 描述 | 結果 |
---|---|---|
Filter(Customers,StartsWith(Name,SearchInput.Text)||StartsWith (公司,SearchInput.Text)) | 篩選 客戶 資料來源中,Name 欄位或 Company 資料來源欄位開頭為此搜尋字串 (例如,co) 的記錄。 若任一 StartsWith 函式為 true,則 ||運算子 為 true。 | |
Filter(customers,SearchInput.Text in Name ||SearchInput 的公司中的文字) | 篩選 客戶 資料來源中,Name 欄位或 Company 欄位內的任意處包含此搜尋字串 (例如,co) 的記錄。 | |
搜索(客戶、SearchInput.Text、姓名、公司) | 類似於使用 in 運算子,Search 函式會搜尋 客戶 資料來源中,Name 欄位或 Company 欄位內的任意處包含此搜尋字串 (例如,co) 的記錄。 如果您想要指定多個欄位和多個 in 運算子,Search 函式會比 Filter 更容易理解和撰寫。 |