Power AutomateのでApplyToEachで処理速度向上
Power AutomateのでApplyToEachで処理速度向上
私はPower AutomateとExcelを組み合わせてフローを作成することが多いです。そのためApplyToEachで繰り返し処理を行うのですが正直思っている以上に処理速度が遅いのです。
また、前回「Power Automateで読み取れるExcelの上限について」でまとめたように、読み込めるExcelのデータ数には上限があり、大量のデータを読み込んで処理するためには複数個のApplyToEachを使います。
なので最終的に処理がすべて終わるまでにかかる時間がどんどん増えていっているのです。。。
あまりにも時間がかかっているので、今回はApplyToEachにかかる時間の検証と、ある条件のみにはなるものの処理速度を向上させる方法を試してみたいと思います。
なおこの内容は動画にでも解説しているので参考にしてください。
通常の処理速度を検証
今回検証で使用するフローは下記になります。
また、表の読み込みなどは数秒で終わるためフロー全体を通してかかった処理時間を比較します。
まずは、通常の実装を行った際にかかるApplyToEachの処理時間を確認したいと思います。
3回実施した結果が下記になります。
1000行のデータがあり、その1つ1つ処理をするとなると単純計算で4分かかります。いくら自動処理といえども4分かかるのは許容できない場合もありますよね。
つづいて、ApplyToEachにある工夫を入れた状態で検証しようと思います。
先程のフローで Apply to eachのステップの設定から「コンカレンシー制御」をオンにします。これにより並列化して処理がされるので、処理時間を短くすることができます。
「並列処理の次数」を50にして実行してみます。
平均すると処理時間は約15秒になります。早いですね!!これであれば1000行のデータを処理したとしても約1分程度になります。
注意点
確かにコンカレンシー処理をオンにすることで処理速度は格段に早くなっています。
すると「じゃあ、常にオンでよいのでは?」と思う人は多いかもしれません。しかし、この設定を加えるのには注意が必要になります。この処理は並列処理をしており処理順番が規則的ではなくなるので、順番に処理する必要のあるものに関しては適用することができません。
試しに実験してみましょう!
今回使用したExcelファイルの表は1から300まで順に並んでいます。
上記のフローでテストすると通常のApplyToEachでは下記のように順番に処理されていることがわかります。
一方、並列処理を加えたフローでテストすると下記のようにランダムに処理がされていることがわかります。
このように、コンカレンシー処理をオンにして並列化させると、たしかに処理速度は早くなりますが、その代わり順番などは一切意識しないで処理されるので場合によっては設定できないこともあります。
なので設定する前にどのように処理させたいかを決めた上で設定するようにしましょう。
さいごに
今回はApplyToeach処理にかかる時間を短縮する方法とその注意点をまとめました。
Power Automateはローコードで自動化できるとても良いツールではあるものの、前回の上限問題や今回の処理速度など課題は山積みな印象です。
少しづつアップデートされて改善されていくと信じて待ちたいと思います。
今回はこの辺で、ではまた!!
コメント
コメントを投稿