こんにちは、Power Platform サポートの瀬戸です。
今回は、「クラウド フローの処理がいつまで経っても終わらない」ときに試していただける改善策をご案内いたします。
時間がかかるようなアクションは使っていないはずなのに、今まではすぐに処理が完了していたのに、クラウド フローが何日経っても完了しない。
そんなときは、フローが Power Automate の制限に抵触した可能性が考えられます。フローが制限に抵触すると、そのフローは実行中でも低速の状態になります。制限を超えないような速度で実行されるようになるので、数日たってもフローが実行中…ということがよくあります。
そこで今回は、フローの低速状態を避けるための改善策をご案内いたします。
<目次>
Power Automate の制限
改善策の前に、Power Automate の制限についてご案内いたします。
Power Automate には、サービスを皆さまへ安定的に提供するために、様々な制限が設けられています。
参考:制限と構成 - Power Automate | Microsoft Learn
特にフローの実行速度に影響を与えるのは、主に以下 3 点のスループットの制限です。
これらの制限に抵触すると、フローが低速になり、かつ、フローが最後まで実行されるかどうかが保証されなくなります。そのため、制限の範囲内で Power Automate をご利用いただくことが重要です。
アクション要求数の制限
中でも、抵触することが多い制限として「24 時間あたりのアクション要求数」が挙げられます。今回の記事では、この「24 時間あたりのアクション要求数」の制限と、それに抵触しないようにする改善策を重点的に解説します。
まず、2023 年 5 月時点での「24 時間あたりのアクション要求数」の制限は下記の通りです。
ライセンス | パフォーマンス プロファイル | フローごとの 24 時間あたりのアクション要求数 |
---|---|---|
Power Automate Free Office 365 に含まれる使用権 など |
低 | 10,000 |
Power Automate Premium など | 中 | 200,000 |
Power Automate Process | 高 | 500,000 |
パフォーマンス プロファイルが「低」の場合、制限値は「10,000」です。
例えば、1,000 行の CSV ファイルを読み込み、Apply to each で行ごとに処理をする場合、Apply to each の内側のアクションが 10 個あるだけで、実行されるアクション要求数が 10,000 を超えてしまいます。
Note
環境の従量課金を有効にすると、アクション要求数 (Power Platform 要求数) の制限が無くなります。詳細は、下記公開情報の Power Platform 要求メーター をご参照ください。
※ 2023 年 5 月現在、プレビューの機能です。
Note
今後、アクション要求数の制限は「Power Platform 要求数の制限」になり、制限の集計単位が ユーザーごと へ移行する予定です。2023 年 5 月現在、移行時期は未定ですが、移行の予定があることをご留意ください。
フローのアクション要求数を数えてみる
「アクション要求数」は、大まかに言うと「実行されたアクションの数」です。実行したフローのアクション要求数は、フローごとの分析のページ、または Power Platform 管理センターで確認できます。
※ フローの分析のページの例 (上記公開情報より)
フローをまだ実行していない、または机上でアクション要求数を求めたい場合は、下記公開情報の Power Platform 要求数の数え方をご参照ください。(アクション要求数と Power Platform 要求数は数え方が同じです)
実際のアクション要求数は再試行やページングで増えるので、見積もりの時点でフローの制限値を超えている場合は、対策が必要です。
改善策
フローの実行回数を減らす
例えば、1 時間に 1 回起動するスケジュールトリガーを、2 時間に 1 回起動するよう変更します。1 番簡単に実施できて最も効果がありますので、実行頻度の削減はぜひご検討ください。
自動トリガーの場合は、トリガー条件を設定して不要な起動を抑えることで、フローの実行回数を減らせます。
フローの先頭で、「条件」や「終了」アクションを使ってフローを中断させている場合は、トリガー条件への置き換えをご検討ください。
トリガー条件の詳しい情報は、当サポート チームのブログでもご案内しています。
クラウド フローのトリガー条件を設定してトリガーの実行を制御する方法 | Japan Dynamics CRM & Power Platform Support Blog
繰り返しの回数を減らす
Apply to each や Do until で処理するデータが数百件、数千件に及ぶ場合は、その繰り返し回数を減らすことをご検討ください。以下に、繰り返し回数を減らすための案をご紹介します。
フィルター クエリを使う
繰り返しを行う前に対象のデータ件数を減らしておけば、繰り返しの回数を減らせます。
SharePoint コネクタの「複数の項目の取得」アクションなど、フィルター クエリを指定できるアクションでは、できる限りフィルター クエリを使用して不要なデータを取得しないようにしましょう。
※ フィルター クエリを使った例
参考:
- SharePoint
- Excel
- Excel Online (Business) コネクタ アクションの既知の問題と制限
- 「フィルタリング機能」の行に、サポートされる OData クエリの記載があります。
- Excel Online (Business) コネクタ アクションの既知の問題と制限
- Dataverse
アレイのフィルター処理を使う
フィルター クエリを使えない場合は、代わりに「データ操作」コネクタの「アレイのフィルター処理」アクションを使って、繰り返しを行う前にデータ件数を減らすことができます。
Note
繰り返しで実行されるアクション要求数の削減には役に立ちますが、データ件数や列数が多い場合は、コンテンツ スループットの制限に抵触してしまう可能性があります。
※ アレイのフィルター処理を使った例
「アレイのフィルター処理」アクションは、この他にも、処理が異なるリストをあらかじめ 2 つに分けておく、といった活用もできます。繰り返し処理内の「条件」アクションが必要なくなるので、アクション要求数の削減になります。
※ 処理が異なるリストを分けておく例
参考:Power Automate でデータ操作を使用する (ビデオを含む) - Power Automate | Microsoft Learn
1 度に繰り返す回数を減らす
例えば、1 度に全件処理するのではなく、10 件の データを 1 時間に 1 回処理するよう設計します。
フローが制限に抵触しないよう、意図的に処理をゆっくりにする考え方です。フィルター クエリと合わせて使用し、未処理のデータだけを取得する必要があります。
※ 10 件だけ処理する例
集計に XPath を活用する
例えば SharePoint リストの特定の列の合計を求めたい場合、Power Automate には配列を 1 度に集計するようなアクションや関数が無いため、繰り返し処理で集計する必要があります。しかし、Power Automate の関数、xml と xpath を活用すると繰り返し処理無しで集計ができます。つまりアクション要求数の削減になります。
詳しい実現方法は以下の記事で解説しています。
XPath を活用した集計 | Japan Dynamics CRM & Power Platform Support Blog
CSV ファイルの利用を避ける
アクション要求数を削減する観点では、フローでの CSV ファイルの読み込みは避けることをお勧めします。Power Automate には CSV ファイルを 1 つのアクションで読み込むような機能はご用意がありません。そのため、CSV ファイルを読み込む処理を作りこむ必要があります。
参考:Power Automate で CSV ファイルを取り込む | Japan Dynamics CRM & Power Platform Support Blog
上記記事の例からも分かる通り、変数を用意して…条件分岐して…とやっているだけでアクション要求数を消費してしまいます。
アクション要求数を削減したい場合は、SharePoint リスト、Dataverse をはじめとしたデータベース、または、Excel ファイルなどの利用をお勧めします。これらは、各コネクタにデータ読み込みのためのアクションが用意されているため、読み込み処理を自分で作る必要がありません。
活用できるアクション:
- Microsoft Dataverse コネクタ
- SharePoint コネクタ
- Excel Online (Business) コネクタ
フローを分割する
2023 年 5 月時点の Power Automate の制限は、フローごとの制限となっています。1 つの長いフローが制限に抵触しているのであれば、それをいくつかに分割して順番に実行させることで制限を回避できる可能性があります。
※ イメージ図
注意点としては、非ソリューションフローの場合は子フローの実行などができないため、それぞれのフローの最後で、次のフローの起動トリガーとなるような処理をしてあげる必要があります。
例えば、1番目のフローの最後に SharePoint リストへの「項目の作成」アクションを実行し、2番目のフローの「項目が作成されたとき」トリガーでその SharePoint リストを指定すれば、フローをつなげて実行する仕組みになります。
関数を活用する
アクションを組み合わせて作った処理が、実は関数 1 つで実現できるものだったりすることがあります。
Power Automate には式の入力時に使用できる関数が色々ありますので、関数の一覧のページに目を通しておくだけでも、新しい発見があるかもしれません。
式関数のリファレンス ガイド - Azure Logic Apps | Microsoft Learn
意外と活用できる関数の例に、join 関数があります。配列の全ての要素をくっつけて 1 つの文字列にする関数です。例えば、SharePoint リストに保存されているメールアドレスにメールを送りたいとき、行ごとのメールアドレスをセミコロンでくっつけて送信先アドレスとしたくなります。
※ イメージ図
join 関数を使わなくても、Apply to each と「文字列変数に追加」アクションを使えばやりたいことは実現できます。しかし、これまでに解説したように、繰り返しの処理はアクション要求数が多くなりがちなので避けたいところです。
※ join 関数を使わない例
そこで、join 関数を使うと、2 つのアクションのみでメールアドレスをセミコロンでくっつけることができます。join 関数を使う前に「選択」アクションを使う必要がありますが、メールアドレスを 1 つずつ繋げるよりは手順が減ります。
※ join 関数を使う例
このように、関数を使いこなせると、より効率のよいフローの作り方ができますし、それがアクション要求数を減らすことに繋がることがあります。
ライセンスを購入する
最初にご案内したように、制限値はパフォーマンス プロファイルによって決まり、パフォーマンス プロファイルはライセンスによって決まります。
もしパフォーマンス プロファイル「低」で制限に抵触しているのであれば、パフォーマンスプロファイル「中」や「高」に該当するライセンスの利用をご検討ください。
最後に
制限に抵触するほど Power Automate を活用いただいているのは嬉しい限りではありますが、サービスの特性を理解して上手く付き合っていただけますと、より嬉しく思います。
この記事が皆様の Power Automate の運用にお役に立ちましたら幸いです。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。