Filter Array und Select statt Apply to each in Power Automate

Filter Array und Select ersetzen Apply to each beim Filtern und Umformen von Arrays und laufen deutlich schneller.

Filter Array und Select ersetzen Apply to each überall dort, wo ein Array nur gefiltert oder umgeformt werden soll. Beide Aktionen laufen als ein einziger Schritt, unabhängig davon, ob das Array fünf oder fünftausend Einträge enthält. Eine Schleife erzeugt dagegen pro Element eigene Aktionsausführungen.

Dieser Beitrag zeigt die Codeansicht beider Aktionen, die passenden Ausdrücke und die Stellen, an denen eine Schleife trotzdem die richtige Wahl bleibt. Zu den Grenzen von Apply to each selbst finden Sie mehr im Beitrag zu den Power-Automate-Aktionslimits.

Warum Apply to each beim Filtern und Umformen der Umweg ist

Apply to each führt jede enthaltene Aktion einmal pro Element aus und erzeugt dadurch Ausführungen, die beim reinen Filtern oder Umformen keinen Nutzen bringen. Bei 200 Bestellungen mit zwei Aktionen im Schleifenkörper sind das 400 Einzelausführungen. Alle zählen gegen das Aktionslimit Ihres Flows und werden im Flow-Verlauf einzeln protokolliert.

Microsoft empfiehlt für diesen Fall einen Filter- oder Auswahlvorgang statt einer Bedingung in einer Schleife. Das vereinfacht den Cloud Flow und verbessert die Leistung. Nachzulesen in der Übersicht zu den Datenvorgängen in Power Automate.

Kriterium | Apply to each | Filter Array | Select

Kriterium: Aufgabe · Apply to each: eine Aktion je Element ausführen · Filter Array: Anzahl der Objekte reduzieren · Select: Form der Objekte ändern

Kriterium: Aktionsausführungen · Apply to each: eine je Element und je enthaltener Aktion · Filter Array: genau eine, unabhängig von der Arraygröße · Select: genau eine, unabhängig von der Arraygröße

Kriterium: Ändert die Anzahl der Objekte · Apply to each: indirekt über Bedingungen · Filter Array: ja · Select: nein

Kriterium: Ändert die Struktur der Objekte · Apply to each: über enthaltene Aktionen · Filter Array: nein · Select: ja

Kriterium: Seiteneffekte je Element möglich · Apply to each: ja · Filter Array: nein · Select: nein

Kriterium: Einträge im Flow-Verlauf · Apply to each: einer je Durchlauf · Filter Array: genau einer · Select: genau einer

Was leistet die Filter-Array-Aktion?

Die Aktion Array filtern reduziert ein Array auf die Objekte, die Ihren Kriterien entsprechen, und gibt ein neues Array zurück. Laut der offiziellen Dokumentation zu den Datenvorgängen gelten dabei zwei feste Einschränkungen.

  • Die Aktion kann die Anzahl der Objekte reduzieren, nicht aber deren Form ändern. Für Umformungen brauchen Sie zusätzlich Select.
  • Der Vergleichstext beachtet Groß- und Kleinschreibung. Ein Filter auf offen findet kein Objekt mit dem Wert Offen.

Für einen einzelnen Vergleich reicht die einfache Ansicht. Für kombinierte Bedingungen wechseln Sie in den erweiterten Modus und schreiben den Ausdruck selbst.

Modus | Eingabe | Geeignet für

Modus: Einfach · Eingabe: Feld, Operator und Wert über die Oberfläche · Geeignet für: ein einzelner Vergleich, etwa Status ist gleich Offen

Modus: Erweitert · Eingabe: ein Ausdruck mit @-Präfix · Geeignet für: mehrere Bedingungen, Und/Oder-Logik, Funktionen wie toLower

Was leistet die Select-Aktion?

Select ändert die Form der Objekte in einem Array, ohne deren Anzahl zu verändern. Sie benennen Felder um, setzen neue Felder aus vorhandenen zusammen oder lassen nicht benötigte Felder weg.

Ein Beispiel aus der Microsoft-Dokumentation: Aus Objekten mit den Feldern first und last entsteht ein Array mit FirstName, FamilyName und einem zusätzlichen FullName. Das Ergebnis ist wieder ein Array und geht direkt an nachfolgende Aktionen weiter, etwa an Create CSV table.

Select reduziert damit nicht nur die Komplexität des Flows. Es verringert laut Microsoft auch die Nutzlastgröße, wenn die Daten anschließend an ein anderes System übergeben werden.

Wie sieht die Kette aus Filter Array und Select im Code aus?

In der Praxis stehen beide Aktionen hintereinander, und in der Codeansicht des Designers sehen sie so aus. Der folgende Ausschnitt filtert die offenen Bestellungen aus einer SharePoint-Abfrage und übergibt nur drei Felder an den nächsten Schritt.

1{
2 "Bestellungen_filtern": {
3 "type": "Query",
4 "inputs": {
5 "from": "@body('Elemente_abrufen')?['value']",
6 "where": "@equals(item()?['Status'], 'Offen')"
7 },
8 "runAfter": {
9 "Elemente_abrufen": [ "Succeeded" ]
10 }
11 },
12 "Felder_auswaehlen": {
13 "type": "Select",
14 "inputs": {
15 "from": "@body('Bestellungen_filtern')",
16 "select": {
17 "Bestellnummer": "@item()?['Title']",
18 "Kunde": "@item()?['Kundenname']",
19 "Betrag": "@item()?['Betrag']"
20 }
21 },
22 "runAfter": {
23 "Bestellungen_filtern": [ "Succeeded" ]
24 }
25 }
26}

Filter Array heißt im Hintergrund Query, Select heißt Select. Leerzeichen in Aktionsnamen werden zu Unterstrichen. Die Schemas beider Aktionen stehen in der Schemareferenz zu Trigger- und Aktionstypen.

Diese Ausdrücke brauchen Sie im erweiterten Modus am häufigsten:

1Zwei Bedingungen mit Und verknüpfen:
2@and(equals(item()?['Status'], 'Offen'), greater(item()?['Betrag'], 1000))
3
4Vergleich ohne Beachtung der Groß- und Kleinschreibung:
5@equals(toLower(item()?['Status']), 'offen')
6
7Anzahl der Treffer für eine nachfolgende Bedingung:
8@length(body('Bestellungen_filtern'))
9
10Prüfen, ob der Filter überhaupt etwas gefunden hat:
11@empty(body('Bestellungen_filtern'))

Das Fragezeichen in item()?['Status'] ist kein Tippfehler. Es greift auf das Feld zu, ohne den Flow abzubrechen, wenn das Feld in einem Objekt fehlt.

Wann bleibt Apply to each die richtige Wahl?

Apply to each bleibt richtig, sobald pro Element ein eigener Seiteneffekt nötig ist. Das gilt für eine E-Mail je Bestellung, für einen Datensatz in einem System ohne Batch-Endpunkt und für den Aufruf eines Unterflows.

Auch wenn die Verarbeitung eines Elements vom Ergebnis des vorherigen abhängt, ist eine Schleife die einfachere Lösung.

Arbeiten Sie direkt mit Dataverse, gibt es eine dritte Option. Microsoft empfiehlt, Spalten und Zeilen bereits in der Quelle über die Optionen Spalten auswählen und Zeilen filtern einzugrenzen. Das reduziert die übertragene Datenmenge von vornherein.

Wo die Grenze für Ihr Setup liegt, lässt sich am besten am konkreten Flow einschätzen, etwa im Rahmen einer Power-Automate-Beratung.

Typische Fehler und Ursachen

Die meisten Probleme mit Filter Array und Select gehen auf fünf Ursachen zurück. Die folgende Tabelle nennt jeweils Symptom, Ursache, Lösung und die Stelle in der Herstellerdokumentation.

Symptom | Ursache | Lösung | Quelle

Symptom: Filter liefert ein leeres Array, obwohl passende Daten vorhanden sind · Ursache: Der Vergleichstext beachtet Groß- und Kleinschreibung · Lösung: Im erweiterten Modus @equals(toLower(item()?['Status']), 'offen') verwenden · Quelle: Datenvorgänge

Symptom: Filter Array findet nach einem HTTP-Aufruf keine Felder · Ursache: Ohne Parse JSON liest die Aktion nur den Antworttext, nicht die Struktur der Nutzlast · Lösung: Vor Filter Array eine Parse-JSON-Aktion einfügen und deren Ausgabe filtern · Quelle: Datenvorgänge in Logic Apps

Symptom: Die nachfolgende Aktion nimmt die Select-Ausgabe nicht an · Ursache: Select gibt immer ein Array zurück, die Zielaktion erwartet aber Text · Lösung: Select im Textmodus nutzen ("select": "@item()?['Title']") und mit join() verketten, oder das Array über Compose weitergeben · Quelle: Schemareferenz

Symptom: Der Flow bricht mit einem Vorlagenfehler ab, sobald ein Feld fehlt · Ursache: Direkter Zugriff über item()['Feld'] ohne Null-Absicherung · Lösung: Immer item()?['Feld'] schreiben · Quelle: Ausdrucksreferenz für Cloud Flows

Symptom: Nach Select stimmt die Anzahl der Datensätze nicht · Ursache: Select ändert die Form, nicht die Anzahl; gefiltert wurde nie · Lösung: Filter Array vorschalten und erst danach mit Select umformen · Quelle: Datenvorgänge

Häufige Fragen

Kann ich Filter Array und Select in beliebiger Reihenfolge einsetzen?

Filtern Sie zuerst und formen Sie danach um. Select verarbeitet dann weniger Objekte. Technisch funktioniert auch die umgekehrte Reihenfolge, sie ist aber unübersichtlicher.

Zählen Filter Array und Select gegen das Aktionslimit?

Ja, jede der beiden Aktionen zählt einmal. Der Unterschied zu Apply to each: Sie laufen unabhängig von der Arraygröße immer als eine einzige Ausführung.

Kann Filter Array die Form der Objekte ändern?

Nein. Filter Array verändert nur, wie viele Objekte im Ergebnis liegen, nicht deren Struktur. Für Felder umbenennen, ergänzen oder entfernen ist Select zuständig.

Was passiert, wenn Filter Array kein passendes Element findet?

Die Aktion gibt ein leeres Array zurück, der Flow läuft ohne Fehler weiter. Prüfen Sie das Ergebnis bei Bedarf mit @empty() oder @length() in einer nachfolgenden Bedingung.

Lohnt sich der Umstieg auch bei kleinen Arrays?

Bei wenigen Einträgen ist der Laufzeitgewinn gering. Der Vorteil liegt dann in der Übersichtlichkeit und Wartbarkeit, und der zahlt sich aus, sobald das Array im Betrieb wächst.

Simon Glowik, Gründer von NordFlux
Über den Autor

Gründer von NordFlux. Sieben Jahre Erfahrung von Web und SEO bis zur Automatisierung im Konzern-Maßstab, heute pragmatisch für den Mittelstand und mit deutscher Datenhoheit.

Zertifizierungen

  • Microsoft zertifiziert — PL-900 und AZ-900
  • UiPath zertifiziert — Automation Developer Associate
Alle Beiträge
Weiterlesen

Verwandte Anleitungen

Kostenlose Erstanalyse

Apply to each frisst Aktionen? Es geht auch schneller.

Filter Array und Select ersetzen viele Apply-to-each-Schleifen und sparen Aktionsverbrauch sowie Laufzeit, aber die richtige Wahl zwischen beiden Ansätzen erfordert Erfahrung mit der jeweiligen Flow-Logik. NordFlux optimiert bestehende Power-Automate-Flows auf Performance und baut neue Prozesse von Anfang an ressourcenschonend auf. Im ersten Gespräch prüfen wir Ihre Flows auf unnötige Schleifen und zeigen das Einsparpotenzial.

Power Automate Beratung

  • Flow-Audit auf vermeidbare Apply-to-each-Schleifen
  • Umbau auf Filter Array und Select ohne Funktionsverlust
  • Spürbar geringerer Aktionsverbrauch bei gleichem Ergebnis
Filter Array und Select statt Apply to each