Udemy 新コース: 作って学ぶMicrosoft 365 Copilot Chat !

Dataverse のレコードをページングして大量に取得する | Power Automate

Power Automate から Dataverse の行を一覧にするアクションを利用すると、既定ではページングにより5,000レコードが取得できます。こちらはページングの量を設定から増やすと100,000行まで取得できますが、それ以上のレコードを取得するにはひと工夫が必要です。

For each やDo until は、特にPower Platform の保護機能であるPower Platform 要求 (Power Platform リクエスト) の制限に気をつける必要がある開発です。こちらはライセンス契約によって異なる要求数の上限があります。上限を超えると、フローが低速化します。超えている状態が続くと、フローはオフになります。リクエスト数が短時間で多くなりそうな時は、インターバルを1日程度開けて実行するとよいです。
本件は記事の最後に注意点として説明を行います。

今回はその方法をご紹介します。

ページングとはなんですか?

WebサイトAPIのページングとは、APIが大量のデータを返す際に、そのデータを複数の小さな部分(ページ)に分割して返す方法のことです。これにより、クライアントが一度に大量のデータを処理する負担を軽減し、サーバーの負荷も分散されます。

作成するフローのイメージ

このようなフローを作成します。Do untilとFetch XML を利用します。

作成方法

変数の準備

ページ番号と取得したレコードの件数を保管する変数をInteger形式で宣言します。

FetchXMLの式を取得する

FetchXMLでのフィルター条件を取得します。モデル駆動型アプリにて、フィルターを編集します。

設定したフィルター条件にて、FetchXMLをダウンロードします。

Power Automate の行を一覧にするアクションにFetchXMLを利用

ダウンロードしたFetchXMLをDataverseの行を一覧にするアクションのFetchXMLクエリのフィールドにペーストします。

page = "" を以下のように加えて、pageNumber変数を追加します。これにより、ページ送りができるようになります。

pageパラメータがFetchXMLに入っていない

FetchXMLにはpageの記載がありません。自分で手入力しましょう。

ページ数の設定

続けて、取得できたレコードの件数を変数に格納します。以下のようにLength関数を利用します。

Do until

ページ送りをしていくと、いつか値がなくなり件数が0になります。するとストップするようにします。それはDo untilに記載します。

Countフィールド

このCountは最大ページ数に当たります。Do untilの制限で5,000が最大です。この方法でページ送りをすると、1ページあたり5,000件のため、5,000×5,000件のレコードを取得できます。

つまり、25,000,000(2千5百万)件のレコードを取得できます。これを上回る場合、Fetch XMLのフィルター条件で分割して取得するとよいでしょう。例えば、オートナンバーなどで番号が割り振られている場合、下一桁0~9でフィルターしてそれぞれDo untilすれば、10倍のレコードを取得することができます。下2桁にすれば100倍です。

Timeoutフィールド

Timeoutには、Power Automateの上限である30日間を指定します。クーロン式で指定する必要があります。既定では1時間となっているので、とりあえず最大にしたい場合はP30D (30日間)と入力するとよいでしょう。

次に、変数の値を増やすアクションにてページ番号を1増やしてループ処理を続けます。

リクエスト数の超過に気をつける

For each やDo until は、特にPower Platform の保護機能であるPower Platform 要求 (Power Platform リクエスト) の制限に気をつける必要がある開発です。

Power Platform はマルチテナント = つまり他の顧客もサービスを利用しています。影響がないようにサービス安定稼働の観点で制限を設けています。


考慮する必要のある保護のゲートは主に以下があります。

Power Platform 要求

要求の制限と割り当て – Power Platform | Microsoft Learn

Power Automate の制限

Power Automateの制限があります。こちらも実行するフローの内容によっては考慮する必要があります。

自動化フロー、スケジュールされたフロー、インスタント フローの制限事項 – Power Automate | Microsoft Learn

コネクタの制限

コネクタにも制限があります。こちらも実行するフローの内容によっては考慮する必要があります。

Power Platform および Azure Logic Apps コネクタのドキュメント – Connectors | Microsoft Learn

サービスごとの制限

Power Automate から呼び出した先のサービスの観点です。

Microsoft サービスでは主に Dataverse と SharePoint が話に出てきます。SharePointのスロットリングというと聞いたことがある方もあるかと思います。

SharePoint Online で調整またはブロックを回避する | Microsoft Learn

サービス保護 API の制限 (Microsoft Dataverse) – Power Apps | Microsoft Learn

Power Automate から呼び出す先のサービス側にも個別にリクエスト数の上限が設けられていることが多いです。上記はあくまでMicrosoft サービスのリストです。例えばSalesforceやBoxなど、そういったクラウドサービスには設けられておりますので、こちらにも注意しましょう。

以上、ご参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index