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

Описание

Функция Filter находит записи в таблице, соответствующие заданным условиям формулы. Используйте функцию Filter, чтобы найти набор записей, соответствующих одному или нескольким условиям, или удалить наборы, не соответствующие заданным условиям.

Функция LookUp находит первую запись в таблице, соответствующую условиям формулы. Используйте функцию LookUp, чтобы найти отдельную запись, соответствующую одному или нескольким условиям.

В обоих случаях формула вычисляется для каждой записи этой таблицы. Записи, возвращающие значение true, включаются в результат. Помимо обычных операторов формулы, вы можете использовать операторы поиска соответствий подстроки in и exactin.

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

Функция Search находит записи в таблице, содержащие строку в одном из столбцов. Строка может находиться в любом месте столбца. Например, выполняя поиск по фразе rob или bert, соответствие может быть обнаружено в столбце со словом Robert. При поиске регистр не учитывается. В отличие от функций Filter и LookUp, функция Search выполняет поиск при помощи одной строки, а не формулы.

Функции Filter и Search возвращают таблицу, которая содержит те же столбцы, что и исходная таблица, и записи, соответствующие заданным условиям. В то время как функция LookUp возвращает только первую найденную запись после применения формулы для сведения записи к одному значению. Если записи не обнаружены, функции Filter и Search возвращают пустую таблицу, а функция LookUp — пустое значение.

Таблицы в PowerApps представлены значением, как любая строка или число. Их можно передавать в функции и получать в качестве результата выполнения функций. Функции Filter, Search и LookUp не изменяют исходную таблицу, а принимают ее в качестве аргумента и возвращают таблицу, запись или отдельное значение из нее. Подробнее это описано здесь.

Делегирование

PowerApps по возможности делегирует операции фильтрации сортировки источникам данных и позволяет просматривать результаты постранично. Например, при запуске приложения, в котором есть элемент управления Gallery (Коллекция), заполненный данными, на устройство изначально будет загружен лишь первый набор записей. По мере того как пользователь прокручивает содержимое коллекции, на устройство из источника загружаются дополнительные данные. Благодаря этому приложение быстрее запускается, а доступ к очень большим наборам данных ускоряется.

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

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

Примеры

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

Формула Описание Возвращаемый результат
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 большим 100 (в этом случае таких записей несколько). Для первой найденной записи (в этом случае 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 }

Оптимизация поиска

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

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

Чтобы создать этот источник данных в виде коллекции, создайте элемент управления Кнопка и задайте в качестве значения свойства 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 элемента управления "Коллекция" одну из этих формул:

Формула Описание Возвращаемый результат
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. Обратите внимание, что имена столбцов необходимо заключать в двойные кавычки.