【PowerAutomate】SQL や SharePoint などのデータ取得件数の上限を回避する方法

PowerAutomate

PowerAutomate で他サービスのデータを取得しようとした際の初心者あるあるですが、規定値が「すべて」となっていても実はすべて取得してくれるわけではなく、それぞれ規定の上限値が決められていますので注意が必要です。

概要

PowerAutomate で他サービスのデータを取得しようとした際の上限値を回避する方法です。

SharePoint の「複数項目の取得」などでもある項目ですが、下図のような「上から順に取得」という項目があります。

指定しない場合は「規定値=すべて」となっていますので、全件取得してくれることを期待するのですが、実はそれぞれの上限値までしか取得してくれません。

一例ですが、「規定値=すべて」で取得できる件数は以下のようになっています。

  • SQL Server 2048件
  • Excel 256件
  • SharePoint 100件

上記の件数以上のデータを取り扱うことは多々あると思いますので、その方法を紹介します。

詳細

ライセンスの種類について

まず、保有する PowerAutomate のライセンスの種類によって選択肢が違ってきます。

単純に取得する件数を増やすのであれば、設定内の「改ページ」を「オン」にし、「しきい値」に取得する件数を指定するだけで増やすことができます。

ただ、ここで指定出来る数値がライセンスの種類によって変わってきます。

ざっくり説明するとでは Free や Plan 1 などのライセンスは「5000」まで、Plan 2 や per user などのライセンスは「100000」まで指定出来るようになっています。

実際は以下の様に「Low」「Medium」「High」で区分され、「Low」が「5000」まで、「Medium」「High」が「100000」までとなっています。

Performance profilePlans


Low


– Free
– Microsoft 365 plans
– Power Apps Plan 1, Per App plans
– Power Automate Plan 1
– All license trials
– Dynamics 365 Team Member
Medium
– Power Apps triggered flows, child flows, Power Apps Plan 2, Power Apps per user plan
– Power Automate Plan 2, Power Automate per user, Power Automate per user with Attended RPA plans
Dynamics 365 Enterprise plans, Dynamics 365 Professional plans
– Dynamics 365 non-licensed users, application users, users with special free licenses
High– Power Automate per flow plan

様々な制限の詳細は以下のサイトを参照ください。

Limits and configuration - Power Automate
Limits and configuration

一度に取得するデータの件数を増やす方法

改ページのしきい値を指定する方法です。

項目を取得するアクションの「・・・(三点リーダー)」をクリックし、「設定」をクリックします。

「改ページ」をクリックして「オン」にし、「しきい値」に一度に取得したい件数を入力します。
入力できる最大値は保有するライセンスによって異なりますのでご注意ください。

設定画面の下にある「完了」をクリックします。

これで「規定値=すべて」で取得できる件数を超えて取得できるようになります。

取得したいデータ数が「5000」もしくは「100000」以下であれば、この方法が一番手っ取り早いのです。
ただ、一度に取得する件数が増えれば増えるほど処理時間が増えます。処理時間を優先するのであれば一度にまとめて取得するより、次の項で紹介する Do until などのループを使用して取得する方が処理時間が減りますので、ご自身環境にあった方法を選択ください。

Do until でデータがなくなるまでループする方法

ここでは SQL アクションを使用した方法で説明しますが、考え方は基本的に同じです。

データを取得するアクションでは「スキップ数」「上から順に取得」を使用し、「上から順に取得」で指定した件数ずつデータを取得します。これを Do until でループし、取得するデータがなくなるまで繰り返します。

まずは、使用する変数を初期化します。

それぞれ以下のようにしています。

名前種類コメント
stepWeight整数2000一度に取得データの件数を指定する
count整数0ループ処理時の読み飛ばす件数をカウントする
existsDataブール値true取得するデータがなくなったら false を設定する

「Do until」アクションを追加し、条件を以下のように「existsData」が「false」になるまでループするように設定します。

また、初期の制限が「ループは60回まで」、「1時間でタイムアウト」となっていますので、必要に応じて制限を変更します。

「Do until」内に SQL の「行を取得する」アクションを追加し、スキップ数には「count」、上から順に取得には「stepWeight」を設定します。

SQL の「行を取得する」アクションの下に「条件」を追加しますし、取得した結果の要素数が1以上かどうかで処理を分けます。

要素数が1以上の場合、結果を配列や SharePoint に保存するような処理を行い、次のループで続きから取得するために「count」に「stepWeight」を足す処理を行います。

要素数が1未満の場合、「existsData」に「false」を設定し、取得するデータがなくなったフラグを立てます。

おわりに

SQL や SharePoint などのデータ取得件数の上限を回避する方法を紹介しました。一括で取得するかループで回数を分けて取得するかで実行時間も変わってくるため、環境にあった方法を選択してもらえたらと思います。

SharePoint の項目を取得する場合は、「スキップ数」を設定する項目はありませんので、一番最後に取得したデータのidでフィルターをかけるなどを行ってください。

タイトルとURLをコピーしました