Anti-Muster vermeiden

Antimuster sind Praktiken, die nützlich erscheinen, aber zu Leistungsproblemen, Ressourcenineffizienzen und potenziellen Fehlern in Ihren Workflows führen. Indem Sie diese Antimuster verstehen und vermeiden, optimieren Sie Ihre Cloud-Flows für eine bessere Leistung und Zuverlässigkeit.

Verschachtelte For-Each-Schleifen vermeiden

Geschachtelte For-Each-Schleifen können ressourcenintensive Vorgänge in Cloud-Flows sein und sich auf die Leistung und den Ressourcenverbrauch auswirken.

  • Ausführungszeit: Durch verschachtelte Schleifen kann sich die Gesamtzahl der Iterationen schnell vervielfachen. Wenn Sie beispielsweise zwei Schleifen mit jeweils 10 Iterationen haben, beträgt die Gesamtzahl der Iterationen 10 x 10 = 100. Dieser exponenzielle Anstieg kann die Ausführungszeit Ihres Flows verlängern, insbesondere wenn jede Iteration große Datasets verarbeitet oder komplexe Vorgänge ausführt.
  • Grenzwerte und Kontingente: Power Automate erzwingt Grenzwerte und Kontingente, z. B. die maximal zulässige Anzahl an Iterationen in einer Schleife und die Gesamtausführungszeit. Verschachtelte Schleifen können sich schnell diesen Grenzwerten nähern, was zu Flowfehlern oder Drosselung führt, insbesondere beim Umgang mit großen Datasets oder häufigen Ausführungen.
  • Leistungseinbußen: Jede Iteration in einer verschachtelten Schleife verbraucht Rechenleistung und Arbeitsspeicher. Mit zunehmender Anzahl von Iterationen steigt die Anforderung an die Systemressourcen, was möglicherweise den gesamten Ablauf verlangsamt.

Weitere Informationen: Grenzwerte für Parallelität, Schleifen und Aufteilungen

Je nach Szenario können Sie verschachtelte Schleifen vermeiden, indem Sie zugehörige Datensätze aus einer übergeordneten Tabelle verarbeiten. Beachten Sie Folgendes:

  • Szenario: Eine äußere Schleife verwendet die Aktion Zeilen auflisten, um eine Liste von Produktkategorien aus der Tabelle ProductCategory abzurufen, in der die Spalte IsPromotion auf „true“ steht. Eine innere Schleife verarbeitet dann zugehörige Datensätze aus der Tabelle Produkt für jede Kategorie, die von der äußeren Schleife abgerufen wird.

  • Alternativer Ansatz: Optimieren Sie diesen Prozess mithilfe der OData-Abfrageerweiterung. Mit dieser Methode können Sie mit einer einzelnen For-each-Schleife arbeiten, was die Gesamtzahl der Anforderungen an Dataverse auf nur einen RetrieveMultiple-Aufruf reduziert.

So implementieren Sie die OData-Abfrageerweiterung:

  • Verwenden Sie den Parameter Abfrage erweitern, um den Namen der Suchspalte anzugeben, welche die Tabelle ProductCategory mit der Tabelle Produkt verknüpft. Bei diesem Ansatz werden verknüpfte Datensätze in einer einzelnen Abfrage abgerufen. Legen Sie z. B. den Parameter „Abfrage erweitern“ auf Products($select=ProductName,Price) fest.
  • Verwenden Sie den Parameter $select, um die Spalten einzuschränken, die von der zugehörigen Tabelle zurückgegeben werden.
  • Wenden Sie für den Abruf und die Verarbeitung relevanter Datensätze die Bedingungen mithilfe des Parameters Zeilen filtern direkt auf die Spalten der Suchtabelle an. Legen Sie z. B. den Parameter Zeilen filtern auf IsPromotion eq true fest.

Screenshot der Verwendung des Parameters „Abfrage erweitern“ und „Zeilen filtern“ zum Implementieren der OData-Abfrageerweiterung

Vermeiden Sie Endlosschleifen

Mit Power Automate können Flows unendlich oft ausgelöst werden, z. B. wenn der Flow dieselbe Tabelle aktualisiert, die ihn auslöst.

Wenn Sie einen Flow speichern, der zu einer unendlichen Triggerschleife führen können, erhalten Sie von Power Automate eine Warnung.

Screenshot der Warnung, die ein Entwickler erhält, wenn er versucht, einen Flow zu speichern, der zu einer Endlosschleife führen kann.

So verhindern Sie Endlosschleifen:

  • Verwenden Sie Triggerbedingungen: Triggerbedingungen stellen sicher, dass der Flow nur ausgeführt wird, wenn bestimmte Kriterien erfüllt sind, und verhindern so, dass er unnötig ausgeführt wird. Implementieren Sie Triggerbedingungen, indem Sie dem Trigger eine Bedingung hinzufügen, um bestimmte Werte oder Zustände zu überprüfen, bevor der Flow fortgesetzt wird. Wenn Ihr Flow beispielsweise ein Statusfeld aktualisiert, können Sie eine Triggerbedingung festlegen, um den Flow nur dann auszuführen, wenn der Status noch nicht auf den gewünschten Wert festgelegt ist.
  • Beenden Sie den Flow: Alternativ können Sie die Fortsetzung des Flows stoppen, wenn eine Bedingung erkannt wird, die eine Endlosschleife verursachen würde. Beenden Sie den Flow, wenn eine bestimmte Bedingung erfüllt ist, mithilfe der Aktion Beenden. Dieser Ansatz kann als Schutzmaßnahme verwendet werden, um weitere Aktionen zu verhindern, wenn der Flow kurz davor steht, in eine Endlosschleife einzutreten. Wenn der Flow beispielsweise erkennt, dass er bereits einen Datensatz verarbeitet hat, kann er sich selbst beenden, um eine erneute Verarbeitung zu vermeiden.

Vermeiden Sie eine große Anzahl von Datentransformationsvorgängen

Wenn Sie mit umfangreichen Datentransformationen arbeiten, sollten Sie die Verwendung eines ETL-Prozesses (Extrahieren, Transformieren, Laden) in Betracht ziehen. Anstatt beispielsweise einen Power Automate-Cloud-Flow zum Lesen von Daten aus einer großen Excel-Tabelle zu verwenden, führen Sie Datenformatierungen oder -prüfungen durch und schreiben die Daten dann in Dataverse. Es kann sinnvoller sein, Power Platform-Dataflows oder ein anderes ETL-Tool zu verwenden.

Dataflows verarbeiten große Datenmengen effizient und bieten eine bessere Leistung für ETL-Aufgaben als Cloud-Flows. ETL-Tools bieten spezielle Funktionen für die Datentransformation, -validierung und -Ladung, die komplexe Datenverarbeitungsaufgaben vereinfachen können.

Um die Datenlast mit Orchestrierungslogik in Cloud-Flows zu verwalten, kombinieren Sie Cloud-Flows mit Dataflows. Führen Sie dazu die folgenden Schritte aus:

  1. Dataflowaktualisierung aufrufen

    • Aktion: Verwenden Sie den Dataflow-Connector in Power Automate, um eine Aktualisierungsaktion auszulösen und den in Ihrem Dataflow festgelegten ETL-Prozess zu initiieren.
    • Beispiel: Richten Sie einen Cloud-Flow ein, der die Dataflowaktualisierung basierend auf einem Zeitplan (z. B. täglich) oder einem Ereignis (z. B. beim Hochladen einer neuen Datei in einen SharePoint-Ordner) auslöst.
  2. ETL-Aktionen veröffentlichen

    • Trigger: Verwenden Sie den Trigger Wenn eine Dataflowaktualisierung abgeschlossen ist in Power Automate, um nach Abschluss des ETL-Prozesses Aktionen durchzuführen.
    • Beispiel: Verwenden Sie nach Abschluss des Dataflows einen Cloud-Flow, um Benachrichtigungen zu senden, Datensätze zu aktualisieren oder eine Datenverarbeitung durchzuführen.

Screenshot der Verwendung von Dataflow-Aktionen in einem Cloud-Flow.

Vermeiden Sie die Verwendung von For each-Schleifen, um eine große Anzahl von Datensätzen zu aktualisieren

Benutzende müssen häufig Tausende von Datensätzen in einer Datenquelle erstellen oder aktualisieren, wenn ein Flow in Power Automate ausgelöst wird. Viele Benutzer verwenden eine For Each-Schleife, um jeden Datensatz sequenziell zu verarbeiten, was zu Latenz und Verzögerungen führt.

Versuchen Sie diese beiden Ansätze, um die Leistung zu verbessern:

  1. Batchvorgänge

    • Beschreibung: Datensätze werden in Batches erstellt oder aktualisiert. Viele Konnektoren und Dienste stellen API-Endpunkte bereit, die Batchanforderungen unterstützen. Dieser Ansatz ermöglicht es Ihnen, mehrere Vorgänge in einer einzigen HTTP-Anforderung zu gruppieren.
    • Implementierung: Verwenden Sie das Batchvorgangs-Feature, um mehrere Erstellungs- oder Aktualisierungsanforderungen gleichzeitig zu senden. Diese Vorgänge werden nacheinander in der in der Batchanforderung angegebenen Reihenfolge ausgeführt. Die Reihenfolge der Antworten entspricht der Reihenfolge der Anforderungen im Batchvorgang.
    • Vorteile: Reduziert die Anzahl der einzelnen Anforderungen, die an die Datenquelle gesendet werden, minimiert die Latenz und verbessert die Leistung.

    Screenshot, der die Verwendung der SharePoint-API zum Ausführen einer Batchanforderung zeigt.

  2. Parallelität in For-Each-Schleifen

    • Beschreibung: Aktivieren Sie die parallele Verarbeitung innerhalb der For-Each-Schleife, um mehrere Datensätze gleichzeitig verarbeiten zu können.
    • Implementierung: Konfigurieren Sie die For-Each-Schleife so, dass bis zu 50 Datensätze parallel verarbeitet werden. Dieser Ansatz ist nützlich für Dienste, die keine Batchvorgänge unterstützen.
    • Vorteile: Verarbeitet mehrere Datensätze gleichzeitig und reduziert somit die Gesamtverarbeitungszeit erheblich.

Informationen zum Erstellen von Batchanforderungen finden Sie in der folgenden REST-API-Dokumentation:

Bulkvorgänge in Dataverse verwenden

Verwenden Sie bei der Arbeit mit Dataverse die Massenvorgangs-Web-APIs, um die Anzahl der erforderlichen Aktionen zu reduzieren, Prozesse zu rationalisieren und die Leistung zu verbessern.

Web-APIs für Massenvorgänge bieten einen entscheidenden Vorteil gegenüber Batchvorgängen. Sie unterscheiden sich folgendermaßen:

  • Batchvorgänge: Obwohl Batchvorgänge in einer einzelnen Anforderung bereitgestellt werden, werden sie als mehrere einzelne Vorgänge ausgeführt. Jeder Vorgang innerhalb des Batchs wird separat verarbeitet.
  • Massenvorgänge: Im Gegensatz dazu werden Massenvorgänge als ein einzelner Vorgang bereitgestellt und ausgeführt. Die gesamte Massenanforderung wird als ein Vorgang gezählt, wodurch die Anzahl der Aktionen erheblich reduziert und die Effizienz verbessert werden kann.

So rufen Sie Massenvorgänge auf:

  • Verwenden Sie HTTP mit Microsoft Entra ID: Sie können die Massenvorgangs-Web-API mithilfe von HTTP-Anforderungen aufrufen, die mit Microsoft Entra ID authentifiziert werden.
  • Verwenden Sie den HTTP-Connector mit Dienstprinzipalen: Alternativ können Sie den HTTP-Connector in Power Automate verwenden, wenn Sie mit Dienstprinzipalen arbeiten, um diese APIs aufzurufen.

In diesem Beispiel bereiten wir die Datensätze im JSON-Format mithilfe der Aktion Auswählen vor:

Screenshot der Verwendung einer Auswählen-Aktion, um den Inhalt für die Massenanforderung vorzubereiten.

Anschließend verwenden wir HTTP mit Microsoft Entra ID, um die Anforderung mithilfe der CreateMultiple-Web-API bereitzustellen:

Screenshot des Aufrufs einer HTTP-Anforderung zur Durchführung eines Massenvorgangs.

Wenn die JSON-Ausgabe 100 Datensätze enthält, führt dieser Ansatz nur zu einer einzigen Aktion und nicht zu 100 „Zeile erstellen“-Aktionen in Dataverse.