«Apply to each» в Power Automate: понять, контролировать и избежать цикла
«Auf alle anwenden» обрабатывает списки поэлементно и часто появляется непреднамеренно. Как работает цикл, почему он замедляет работу и когда его можно убрать.
Filter Array и Select заменяют Apply to Each при фильтрации и преобразовании массивов и работают заметно быстрее.
Когда облачному потоку нужно пройти по массиву, многие автоматически берут действие Apply to Each. Для простых случаев это вполне нормально, но как только речь идёт лишь о фильтрации массива или изменении формы его объектов, стоит присмотреться к двум альтернативам из категории «Операции с данными»: Filter Array и Select. Обе выполняют именно эту задачу за один шаг, без того, чтобы поток проходил по каждому элементу по отдельности.
В этой статье показано, как работают эти два действия, где они разумно заменяют Apply to Each и где цикл всё же остаётся правильным выбором. Об ограничениях самого Apply to Each, например при очень больших массивах, и о лимитах действий Power Automate подробнее рассказано в статье про лимиты действий Power Automate.
Apply to Each выполняет входящие в него действия для каждого отдельного элемента массива. При 200 заказах и двух действиях внутри тела цикла это 400 отдельных выполнений, каждое из которых учитывается в лимите действий потока и отдельно фиксируется в истории потока. Если речь идёт только о том, чтобы отфильтровать определённые элементы или переименовать поля, эта нагрузка возникает без реальной причины, ведь именно для этого существуют Операции с данными. Microsoft описывает это в собственном руководстве так: рассмотрите возможность использования операции фильтрации или выбора вместо условия внутри цикла, чтобы найти элементы таблицы, соответствующие определённым критериям — такой подход может упростить облачный поток и повысить производительность, как указано в официальном обзоре Операций с данными в Power Automate. Filter Array и Select при этом каждое выполняются как единое действие, независимо от того, содержит массив пять или пять тысяч записей.
Действие Filter Array сокращает массив до объектов, соответствующих заданным критериям, согласно официальной документации по Операциям с данными. В разделе «Запрос фильтра» вы указываете, какое поле нужно сравнить с каким значением, например «Статус равен Открыт», и получаете в результате новый массив ровно с подходящими записями. Об этом стоит знать две вещи:
Для простых сравнений достаточно базового представления; для комбинированных условий с логикой И/ИЛИ переключитесь в расширенный режим и напишите выражение напрямую.
В то время как Filter Array меняет количество объектов, Select меняет их форму. С помощью этого действия можно переименовывать поля, создавать новые поля из существующих или опускать ненужные поля — при этом количество объектов в массиве не меняется. Пример из документации Microsoft: из объектов с полями first и last с помощью Select получается массив с полями FirstName, FamilyName и дополнительным полем FullName, объединяющим оба значения. Результат снова представляет собой массив, который можно передать напрямую следующим действиям, например действию Create CSV table или действию SharePoint. По данным Microsoft, это снижает не только сложность потока, но и размер полезной нагрузки, когда данные впоследствии передаются в другую систему.
На практике эти два действия почти всегда идут одно за другим. Типичный процесс, который можно реализовать без единого действия Apply to Each:
1. Действие вроде Get Items или HTTP-запрос возвращает массив со всеми заказами.
2. Filter Array сокращает массив до заказов со статусом, равным Открыт.
3. Select преобразует оставшиеся объекты: сохраняются только номер заказа, имя клиента и сумма, с понятными именами полей для целевой системы.
4. Результат передаётся напрямую действию, которое обрабатывает сразу несколько записей, например Create CSV table или пакетному действию целевого коннектора.
Четыре действия вместо цикла с потенциально сотнями выполнений, плюс поток, который остаётся понятным с первого взгляда. Вы сохраняете контроль над каждым шагом обработки, потому что каждое действие отвечает только за одну чётко определённую задачу.
Filter Array и Select не заменяют цикл, если для каждого элемента нужен собственный побочный эффект, например если для каждого заказа отдельно нужно отправить письмо, создать запись в системе без пакетной конечной точки или вызвать вложенный поток. Даже если обработка одного элемента зависит от результата предыдущего, цикл часто остаётся более простым решением. Если вы работаете напрямую с Dataverse, есть даже третий вариант: вместо использования Filter Array и Select в потоке, по данным Microsoft, лучше сразу фильтровать и выбирать данные в источнике с помощью опций «Выбрать столбцы» и «Фильтровать строки» соответствующего действия, что с самого начала уменьшает объём передаваемых данных. Где именно проходит граница для вашей конкретной настройки, лучше всего оценивать по конкретному потоку, например в рамках консультации по Power Automate.
Как правило, сначала фильтруют с помощью Filter Array, а затем преобразуют результат с помощью Select, потому что тогда Select обрабатывает меньше объектов. Технически порядок можно и поменять, но обычно вариант с фильтрацией в начале более наглядный и немного экономнее.
Да, каждое из этих двух действий учитывается один раз в лимите потока, как и любое другое действие. Отличие от Apply to Each в том, что они всегда выполняются как единое действие независимо от размера массива, тогда как цикл создаёт отдельные выполнения действия для каждого элемента.
Нет. Filter Array меняет только количество объектов в результирующем массиве, но не их структуру. Если поля нужно переименовать, добавить или удалить, за это отвечает действие Select.
В этом случае действие возвращает пустой массив, и поток продолжает работу без ошибки. Если вы хотите проверить, есть ли вообще результаты, объедините результат с функцией length() в последующем условии.
Для очень маленьких, стабильных массивов с небольшим количеством записей выигрыш в производительности невелик. В этом случае преимущество заключается скорее в наглядности и удобстве сопровождения потока, чем во времени выполнения, что, однако, окупается, как только массив в эксплуатации становится больше, чем изначально планировалось.
Основатель NordFlux. Семь лет опыта, от веба и SEO до автоматизации в масштабах концерна, сегодня прагматично для среднего бизнеса и с немецким суверенитетом данных.
Сертификаты
«Auf alle anwenden» обрабатывает списки поэлементно и часто появляется непреднамеренно. Как работает цикл, почему он замедляет работу и когда его можно убрать.
Лимиты Apply to each и постраничная разбивка в Power Automate: как работает лимит в 100 000 итераций и как его обойти.
Таблица Excel, «Применить к каждому», Outlook: как Power Automate отправляет персональное письмо на каждую строку твоего списка.
Filter Array и Select заменяют многие циклы Apply to each и снижают как расход действий, так и время выполнения, но правильный выбор между этими подходами требует реального опыта работы с логикой потоков. NordFlux оптимизирует существующие потоки Power Automate по производительности и с самого начала строит новые процессы экономно по ресурсам. На первой встрече мы проверим ваши потоки на лишние циклы и покажем потенциал экономии.