Power AutomateのでApplyToEachで処理速度向上

Power AutomateのでApplyToEachで処理速度向上

Power AutomateのでApplyToEachで処理速度向上

私はPower AutomateExcelを組み合わせてフローを作成することが多いです。そのためApplyToEachで繰り返し処理を行うのですが正直思っている以上に処理速度が遅いのです。
また、前回「Power Automateで読み取れるExcelの上限について」でまとめたように、読み込めるExcelのデータ数には上限があり、大量のデータを読み込んで処理するためには複数個のApplyToEachを使います。 なので最終的に処理がすべて終わるまでにかかる時間がどんどん増えていっているのです。。。

あまりにも時間がかかっているので、今回はApplyToEachにかかる時間の検証と、ある条件のみにはなるものの処理速度を向上させる方法を試してみたいと思います。
なおこの内容は動画にでも解説しているので参考にしてください。


通常の処理速度を検証

今回検証で使用するフローは下記になります。

そして読み込んでいるExcelファイルは前回の検証で使用した300行のデータを含むテーブルになりますが、今回はあくまでApllyToEachの処理速度なので上限256で1ステップで検証します。
また、表の読み込みなどは数秒で終わるためフロー全体を通してかかった処理時間を比較します。

まずは、通常の実装を行った際にかかるApplyToEachの処理時間を確認したいと思います。
3回実施した結果が下記になります。

平均すると処理時間は約1分2秒になります。256回の繰り返しで1分近くかかっています。。。正直遅いですね。
1000行のデータがあり、その1つ1つ処理をするとなると単純計算で4分かかります。いくら自動処理といえども4分かかるのは許容できない場合もありますよね。

つづいて、ApplyToEachにある工夫を入れた状態で検証しようと思います。
先程のフローで Apply to eachのステップの設定から「コンカレンシー制御」をオンにします。これにより並列化して処理がされるので、処理時間を短くすることができます。
並列処理の次数」を50にして実行してみます。

この状態で3回実施した結果は下記になります。
平均すると処理時間は約15秒になります。早いですね!!これであれば1000行のデータを処理したとしても約1分程度になります。


注意点

確かにコンカレンシー処理をオンにすることで処理速度は格段に早くなっています。
すると「じゃあ、常にオンでよいのでは?」と思う人は多いかもしれません。しかし、この設定を加えるのには注意が必要になります。この処理は並列処理をしており処理順番が規則的ではなくなるので、順番に処理する必要のあるものに関しては適用することができません。
試しに実験してみましょう!

今回使用したExcelファイルの表は1から300まで順に並んでいます。

例えばApplyToeachの中で文字列にIDを加えていくステップを加えたフローを作成します
上記のフローでテストすると通常のApplyToEachでは下記のように順番に処理されていることがわかります。
一方、並列処理を加えたフローでテストすると下記のようにランダムに処理がされていることがわかります。

このように、コンカレンシー処理をオンにして並列化させると、たしかに処理速度は早くなりますが、その代わり順番などは一切意識しないで処理されるので場合によっては設定できないこともあります。
なので設定する前にどのように処理させたいかを決めた上で設定するようにしましょう。


さいごに

今回はApplyToeach処理にかかる時間を短縮する方法とその注意点をまとめました。
Power Automateはローコードで自動化できるとても良いツールではあるものの、前回の上限問題や今回の処理速度など課題は山積みな印象です。
少しづつアップデートされて改善されていくと信じて待ちたいと思います。
今回はこの辺で、ではまた!!

コメント

このブログの人気の投稿

PowerAppsで座席表を作成する

Power AutomateでTeamsのキーワードをトリガーにする

Power Automateで文字列抽出