Функции Filter, Search и LookUp

Применимо к: приложениям на основе холста классическим потокам приложениям на основе модели интерфейсу командной строки Power Platform

Эти функции выполняют поиск записей в таблице.

Посмотрите это видео, чтобы узнать, как использовать функции Filter, **Search и LookUp:

Заметка

Команды PAC CLI pac power-fx не поддерживают функцию Search.

Description

Функция 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 будет извлекать только небольшой набор записей для локальной работы. Функции фильтрования и сортировки будут работать с уменьшенным набором записей. Сведения, доступные в коллекции, могут не представлять полную картину, что может запутать пользователей.

Дополнительные сведения см. в обзоре делегирования.

Синтаксис

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

  • таблица — обязательный аргумент. Таблица для поиска.
  • Formula(s) — обязательный аргумент. Формула, по которой вычисляется каждая запись этой таблицы. Функция возвращает все записи, возвращающие значение true. Можно ссылаться на любые столбцы в таблице. Если указано несколько формул, их результаты объединяются с результатами функции And.

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

  • таблица — обязательный аргумент. Таблица для поиска.
  • SearchString — обязательный параметр. Строка для поиска. Если указать пустое значение или пустую строку, возвращаются все записи.
  • Column(s) — обязательный параметр. Имена столбцов в таблице для поиска. Если параметр SearchString найден в данных любого из этих столбцов в виде частичного совпадения, возвращается полная запись.

Заметка

В Power Apps до версии 3.24042 имена столбцов для функции Search задавались текстовой строкой с использованием двойных кавычек, а при подключении к источнику данных они также должны были быть логическими именами. Например, вместо отображаемого имени Имя без кавычек использовалось логическое имя "cr43e_name" в двойных кавычках. Для источников данных SharePoint и Excel, содержащих имена столбцов с пробелами, каждый пробел был указан с помощью "_x0020_", например "Имя столбца" как "Имя_x0020_столбца". После этой версии все приложения были автоматически обновлены до нового синтаксиса, описанного в этой статье.

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

  • таблица — обязательный аргумент. Таблица для поиска. В пользовательском интерфейсе синтаксис показан как источник над полем функции.
  • Formula — обязательный аргумент. Формула, по которой вычисляется каждая запись этой таблицы. Функция возвращает первую запись, которая возвращает значение true. Можно ссылаться на любые столбцы в таблице. В пользовательском интерфейсе синтаксис показан как условие над полем функции.
  • ReductionFormula — необязательный параметр. Эта формула вычисляется по найденной записи, а затем эта запись сводится к одному значению. Можно ссылаться на любые столбцы в таблице. Если этот параметр не задан, функция возвращает полную запись из таблицы. В пользовательском интерфейсе синтаксис показан как результат над полем функции.

Примеры

В приведенных ниже примерах используется источник данныхIceCream.

Источник данных о мороженом.

Формула Описание: Result
Filter( IceCream, OnOrder > 0 ) Возвращает записи, где OnOrder больше нуля. Фильтр по порядку.
Filter( IceCream, Quantity + OnOrder > 225 ) Возвращает записи, где сумма значений в столбцах Quantity и OnOrder больше 225. Количество и порядок фильтра.
Filter( IceCream, "chocolate" in Lower( Flavor ) ) Возвращает записи, где слово chocolate присутствует в именах в столбце Flavor, независимо от регистра. Фильтр в нижнем регистре.
Filter(IceCream, Quantity < 10 && OnOrder < 20) Возвращает записи, где значение столбца Quantity меньше 10, а столбца OnOrder меньше 20. Так как записи, соответствующие заданным условиям, отсутствуют, возвращается пустая таблица. Фильтр по количеству.
Search(IceCream, "choc", Flavor) Возвращает записи, где строка choc присутствует в именах в столбце Flavor, независимо от регистра. Поиск элементов.
Search(IceCream, "", Flavor) Так как условия поиска не заданы, возвращаются все записи. Поиск всех элементов.
LookUp( IceCream, Flavor = "Chocolate", Quantity ) Ищет запись со значением столбца Flavor равным Chocolate (в этом случае найдена только одна запись). Для первой найденной записи возвращает значение столбца Quantity. 100
LookUp( IceCream, Quantity > 150, Quantity + OnOrder ) Ищет запись со значением столбца Quantity большим 150 (в этом случае таких записей несколько). Для первой найденной записи (в этом случае Vanilla в столбце Flavor) возвращает сумму значений в столбцах Quantity и OnOrder. 250
LookUp( IceCream, Flavor = "Pistachio", OnOrder ) Ищет запись со значением столбца Flavor равным Pistachio (в этом случае такие записи отсутствуют). Так как запись не найдена, функция Lookup возвращает пустое значение. пусто
LookUp( IceCream, Flavor = "Vanilla" ) Ищет запись со значением столбца Flavor равным Vanilla (в этом случае найдена только одна запись). Так как формула сведения не применялась, возвращается целая запись. { Flavor: "Vanilla", Quantity: 200, OnOrder: 75 }

Фильтрация с помощью столбцов выбора

В следующем примере используется таблица Учетная запись в Microsoft Dataverse как источник данных. В этом примере показано, как функция Filter создает список учетных записей на основе выбранных значений элемента управления Combo box:

Пошаговое руководство

  1. Откройте пустое приложение.

  2. Добавьте новый экран, выбрав вариант Создать экран.

  3. На вкладке Вставить выберите Коллекция, затем выберите Вертикальная.

  4. На вкладке Свойства правой панели откройте Источник данных, затем выберите Учетные записи.

  5. (Необязательно) В списке Макет выберите разные варианты.

  6. На вкладке Вставить выберите Входные данные, затем выберите Поле со списком. Повторите этот шаг, чтобы добавить еще два элемента управления поля со списком.

  7. Для каждого элемента управления поля со списком на вкладке Свойства правой панели откройте Источник данных, затем выберите Учетные записи. Выберите Изменить рядом с параметром Поля, затем выберите значения Основной текст и SearchField. Параметр Основной текст должен быть столбцом вариантов, который вы хотите добавить в поле со списком. Повторите этот шаг для других двух элементов управления поля со списком.

    Установка значений поля со списком.

  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.

В большинстве приложений вы можете ввести один или несколько символов в текстовом поле, чтобы отфильтровать список в большом наборе данных. При вводе в списке отображаются только те записи, которые соответствуют заданным условиям поиска.

Примеры, приведенные в остальной части статьи, — это результаты поиска в списке Customers, содержащие следующие данные:

Поиск по клиентам.

Чтобы создать этот источник данных в виде коллекции, создайте элемент управления 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 (Коллекция) в нижней части экрана. В верхней части экрана можно добавить элемент управления для Text input (Ввод текста) под названием SearchInput, что позволит пользователям указывать интересующие их записи.

Поиск с помощью условий поиска.

При вводе символов в текстовом поле SearchInput результаты в коллекции автоматически фильтруются. В этом случае в коллекции будут отображаться записи, где имена клиентов (не названия компаний) начинаются с последовательности символов, указанных в текстовом поле SearchInput. Если пользователь введет в поле поиска co, в коллекции отобразятся следующие результаты:

Поиск с помощью условия «начинается с».

Чтобы выполнить фильтрацию результатов по столбцу Name, задайте в качестве значения свойства Items элемента управления Gallery одну из этих формул:

Формула Описание Результат
Filter( Customers, StartsWith( Name, SearchInput.Text ) ) Фильтрует источник данных Customers по записям, в которых искомая строка находится в начале столбца Name. При проверке регистр не учитывается. Если пользователь введет в поле поиска co, в коллекции отобразятся следующие результаты: Colleen Jones и Cole Miller. В этом случае значение Mike Collins не отобразится, так как в столбце Name запись не начинается с искомой строки. Фильтр с помощью условия «начинается с».
Filter( Customers, SearchInput.Text in Name ) Фильтрует источник данных Customers по записям, в которых искомая строка находится в любом положении в столбце Name. При проверке регистр не учитывается. Если пользователь введет в поле поиска co, в коллекции отобразятся следующие результаты: Colleen Jones,Cole Miller и Mike Collins. Это связано с тем, что записи столбца Name содержат искомую строку (в любом положении). Фильтр с условиями поиска.
Search(Customers, SearchInput.Text, Name) Как и при использовании оператора in, функция Search выполняет поиск соответствий во всех положениях записей в столбце Name. Имя столбца необходимо заключить в двойные кавычки. Поиск клиентов.

Вы можете расширить область поиска, добавив столбец Company и Name:

Формула Описание Результат
Filter(Customers, StartsWith(Name, SearchInput.Text) || StartsWith(Company, SearchInput.Text) ) Фильтрует источник данных Customers по записям, в которых записи в столбце Name или Company начинаются со строки поиска (например, co). Если функция StartsWith возвращает значение true, оператор || также возвращает значение true. Фильтрация клиентов с условием «начинается с».
Filter(Customers, SearchInput.Text in Name || SearchInput. Text in Company) Фильтрует источник данных Customers по записям, в которых искомая строка (например, co) находится в любом положении в столбце Name или Company. Фильтрация клиентов с условиями поиска.
Search(Customers, SearchInput.Text, Name, Company) Как и при использовании оператора in, функция Search ищет в источнике данных Customers записи, в которых искомая строка (например, co) находится в любом положении в столбце Name или Company. В отличие от функции Filter, функцию Search проще записывать и читать. Это следует учитывать, если вы хотите указать несколько столбцов и операторов in. Поиск клиентов с условиями поиска.