Filter、Search 與 LookUp 函式

適用於: 畫布應用程式 桌面流程 模型導向應用程式 Power Platform CLI

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

觀看此影片瞭解如何使用 Filter、**Search 和 LookUp 函式:

注意

PAC CLI pac power-fx 命令不支援 Search 函式。

Description

Filter 函式會尋找資料表中符合公式的記錄。 使用 Filter 可尋找符合一或多個準則的一組記錄,並丟棄那些不符合的記錄。

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

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

目前處理中的記錄其各個欄位可供您在公式內使用。 使用 ThisRecord 運算子,,或只需依名稱參照欄位,就像任何其他的值一樣。 As 運算子也可以用來命名所處理的記錄,這有助於讓您的公式更易於了解並讓嵌套記錄可以存取。 如需更多資訊,請參閱下列範例以及 處理記錄範圍

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

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

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

委派

如果可行,Power Apps 將委派篩選、對資料來源作業進行排序並視需要逐頁瀏覽結果。 例如,當您啟動應用程式以顯示填有資料的組件庫控制項時,最初將只會向裝置提供第一組記錄。 隨著使用者進行捲動,將陸續從資料來源提供額外的資料。 如此可縮短應用程式的啟動時間並能夠存取龐大的資料集。

不過,委派不一定始終可行。 各種資料來源支援委派的函數與運算子皆不盡相同。 如果未能完整委派某個公式,製作環境會以警告標示無法委派的部分。 可行的情況下,請考慮更改公式以避開無法委派的函數和運算子。 委派清單詳列了可供委派的資料來源及作業。

如果無法進行委派,Power Apps 將僅提取少量的記錄以供本機使用。 篩選和排序函數將對一組有限的記錄執行運算。 組件庫提供的內容不一定是完整的全貌,可能會造成使用者困惑。

詳細資訊請參閱委派概觀

語法

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

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

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

  • Table – 必要。 要搜尋的資料表。
  • SearchString - 必要項目。 要搜尋的字串。 如果 空白 或空字串,會傳回所有記錄。
  • Column(s) - 必要項目。 要在 資料表 內搜尋的欄位名稱。 如果在這些欄位任何一個的資料內找到部分相符的 SearchString,則會傳回完整記錄。

注意

在 Power Apps 版本 3.24042 之前,Search 函式的欄名稱是透過使用雙引號的文字字串指定的,如果連接到資料來源,它們也需要是邏輯名稱。 例如,使用雙引號的邏輯名稱 "cr43e_name",而不是不含引號的顯示名稱 Name。 對於包含帶有空格的欄名稱的 SharePoint 和 Excel 資料來源,每個空格均以「_x0020_」指定,例如「欄名稱」「Column_x0020_Name」。 在此版本之後,所有應用程式都會自動更新為本文中所述的新語法。

LookUp(Table*, Formula [, *ReductionFormula* ] )

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

範例

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

IceCream 資料來源。

公式 描述 Result
Filter( IceCream, OnOrder > 0 ) 傳回 OnOrder 大於零的記錄。 依訂單篩選。
Filter( IceCream, Quantity + OnOrder > 225 ) 傳回 QuantityOnOrder 欄位總和大於 225 的記錄。 篩選數量和訂單。
Filter( IceCream, "chocolate" in Lower( Flavor ) ) 傳回 Flavor 名稱中出現 "巧克力" 文字的記錄,不區分大寫或小寫字母。 篩選較低。
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" 的記錄,結果有一個。 對於所找到的第一筆記錄,系統會傳回該記錄的 數量 100
LookUp( IceCream, Quantity > 150, Quantity + OnOrder ) 搜尋 Quantity 大於 150 的記錄,其中有多個。 對於所找到的第一筆記錄 (即 "Vanilla" Flavor),系統會傳回 QuantityOnOrder 欄位的總和。 250
LookUp( IceCream, Flavor = "Pistachio", OnOrder ) 搜尋 Flavor 等於 "Pistachio" 的記錄,其中沒有任何一個。 因為沒找到任何項目,查詢傳回空白 空白
LookUp( IceCream, Flavor = "Vanilla" ) 搜尋 Flavor 等於 "Vanilla" 的記錄,其中有一個。 因為未提供任何縮減公式,所以系統會傳回整筆記錄。 { Flavor: "Vanilla", Quantity: 200, OnOrder: 75 }

使用選項資料行篩選

下列範例使用 Microsoft Dataverse 中的客戶資料表格做為資料來源。 此範例說明如何根據所選 Combo box 控制項值來篩選客戶清單:

按步就班

  1. 打開空白應用程式。

  2. 選取新畫面選項以新增新畫面。

  3. 插入索引標籤上,選取Gallery,然後選取垂直

  4. 在右窗格的屬性索引標籤上,開啟資料來源然後選取客戶

  5. (選擇性) 在版面配置清單中,選取不同的選項。

  6. 插入索引標籤上,選取輸入,然後選取下拉式方塊。 重複該步驟以新增兩個以上的 Combo box 控制項。

  7. 對於每個 combo box 控制項,在右窗格的屬性索引標籤上,開啟資料來源然後選取客戶。 選取欄位選項旁的編輯,然後選取主要文字SearchField 值。 主要文字應該是要新增至下拉式方塊的選項資料行。 對其他兩個 combo box 控制項重複該步驟。

    設定下拉式方塊值。

  8. 現在選取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(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" }) )

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

使用搜尋輸入來搜尋。

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

搜尋「開頭為」。

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

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

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

公式 描述 結果
Filter(Customers, StartsWith(Name, SearchInput.Text) || StartsWith(Company, SearchInput.Text) ) 篩選 客戶 資料來源中,Name 欄位或 Company 資料來源欄位開頭為此搜尋字串 (例如,co) 的記錄。 若任一 StartsWith 函式為 true,則 ||運算子true 篩選客戶開頭為。
Filter(Customers, SearchInput.Text in Name || SearchInput. Text in Company) 篩選 客戶 資料來源中,Name 欄位或 Company 欄位內的任意處包含此搜尋字串 (例如,co) 的記錄。 篩選客戶搜尋輸入。
Search(Customers, SearchInput.Text, Name, Company) 類似於使用 in 運算子,Search 函式會搜尋 客戶 資料來源中,Name 欄位或 Company 欄位內的任意處包含此搜尋字串 (例如,co) 的記錄。 如果您想要指定多個欄位和多個 in 運算子,Search 函式會比 Filter 更容易理解和撰寫。 使用搜尋輸入搜尋客戶。