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

Power Automate での大きなデータセットの取得の制限の対処方法

このブログ投稿は書籍で紹介されています

Microsoft Power Automate[実践]入門――クラウドフローによる業務自動化の手引きとリファレンス

Amazon.co.jp

Power Automate を利用していると、複数の項目の取得アクションを利用することがあるかと思います。

この際、パフォーマンスに対する警告が発生する場合があります。

全体を取得するときに気をつけたいのが大きなデータを扱うことになるということです。そのため、制限事項があります。

SharePoint リストの複数の項目を取得するアクションでは、デフォルトでは上位100件しか取得してくれません。

こちらは設定で増やすことができますが、パフォーマンスに影響を与えるのでなるべく大きな数字としないほうがいいでしょう。

大きなデータセットで実際に試してみる

ちなみに、大きなデータセットを作成してみたいときは、こちらのサイトが便利です。

個人情報テストデータジェネレーター https://testdata.userlocal.jp/

すぐに1万件のデータを作成してくれます。そのダウンロードしたCSVデータを元にSharePoint リストの作成を行えば、アップッロードの時間はかかりますが簡単にテスト用のリストを作成することができます。

SharePoint サイトのホームより、新規からリストを選択します。

CSVを選択します。

ダウンロードしたCSVデータを選択してアップロードします。

プレビューでデータの型を選択してから、開始します。

アップロードの時間はかかります。1万件のデータからSharePoint リストを作成するには20分ぐらいかかります。

その時、メールアドレスは1行テキスト形式にするように注意してください。ユーザーのメールアドレスが組織に存在しないとスキップされて取り込まれません。

今回はこのような10,000行を含むSharePoint リストを作成しました。

Note

CSVから50万件のリストを作成してみたときには、丸一日インポートしっぱなしの状態が続いたことがありますので皆様ご注意ください。

Power Automate に移ります。まずは何も設定なくこのリストに対して複数の項目の取得アクションを実施してみます。

やはり、警告が表示されます。

Power Automate さん、すいません、無視してテストを実施します。

テストの結果、ツールを使って数えると、10,000行あるはずなのに、100件(100 items)しか取得していないことがわかります。ただ、取得時間は0.5秒となかなか早いです。

JSONの見方を理解しよう

設定を変えて実行してみます。

複数の項目の取得アクションを選択して、設定のタブから、改ページの設定を有効にして、SharePoint リストに入っているリストの数である10,000を入れます。

それでは、テストを実施してみます。

取得にかかる時間は2分38秒でした。先程と比べて長い時間がかかっています。パフォーマンスに影響します、とはこのことだったのです。また、未加工出力の表示ができなくなっており、代わりにデータのダウンロードができるようになっています。出力したデータが大きすぎるため、このように変更されます。

取得したデータを確認してみると、10,000の行(10,000 items)が取得できていることがわかります。

データは取得できましたが、時間がかかっていますね。ということで、次以降で対策を紹介しますのでぜひ試してみてください。

フィルター条件を設定する

多くの行があるリストからデータを取得したい場合は、改ページの設定を大きく設定することになりますが、パフォーマンス上、すべてのデータを取得することは非推奨です。 特定の行のみを取得するようにしましょう。おすすめの方法はフィルターです。

複数の項目を取得するアクションではリスト全体を取得することもできますが、フィルターして一部の複数のデータを取得するように条件を指定する事ができます。

条件を指定すると、例えばこのようなことができます。以下は25歳以上で条件を指定した場合の範囲のイメージです。

それでは、この中から25歳のデータだけを抽出してみましょう。 JSON データを確認すると、列の内部名はNenrei となっていることがわかります。

それでは、フローを編集してフィルター条件を設定します。

すべてを表示とします。フィルタークエリに以下のコードを記述します。

Nenrei eq 25 

これでテストしてみましょう。

今回はフィルター条件を何も設定しなかったときに出たパフォーマンスに関する警告が表示されません。

フィルターを何も設定しなかったときは3件の項目が取得されていましたが、今回は1件です。

Nenrei を見てみると、ちゃんと25であることがわかります。フィルター条件が正しく機能していることがわかります。

今回利用した、Nenrei eq 25  という、この記述方法はOData (オーデータ) 式と呼びます。

他にも様々な記述方法があります。

OData 式の書き方は以下のとおりです。

操作OData 式説明
等しいPropertyName eq 'Value'指定したプロパティが特定の値と等しい
等しくないPropertyName ne 'Value'指定したプロパティが特定の値と等しくない
以上PropertyName ge Value指定したプロパティが特定の値以上
以下PropertyName le Value指定したプロパティが特定の値以下
より大きいPropertyName gt Value指定したプロパティが特定の値より大きい
より小さいPropertyName lt Value指定したプロパティが特定の値より小さい
含むsubstringof('Value', PropertyName)指定したプロパティが特定の値を含む
始まるstartswith(PropertyName, 'Value')指定したプロパティが特定の値から始まる

https://learn.microsoft.com/ja-jp/power-apps/developer/data-platform/webapi/query-data-web-api#%E8%A1%8C%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC

Valueの部分がテキストの場合は'(シングルクオーテーション)で囲います(例: Title eq 'テスト太郎')。テキストのときに利用できるので、eqnesubstringofstartswithで利用できます。Valueが数字のときにはシングルクオーテーションを利用せずValueのみを設定します(例: Nenrei eq 25)。また、表内のPropertyNameは列の内部名です。内部名についてはこちらは書籍ですが、Chapter 7のコラム「Power Automateの保存先としてのSharePointリストの作成のコツ」で紹介しています。

この条件で、 のテキストを含むTitle をもつ項目のみをフィルターしてみます。

結果はこのように出力されました。テスト太郎とテスト次郎が抽出できたことがわかります。

https://aka.ms/listrowsfilters

並び替え操作も行うことができます。並び替えは並び替え順のフィールドにて利用できます。

操作OData 式説明
並び替え 昇順PropertyName asc指定したプロパティで昇順に並び替え
並び替え 降順PropertyName desc指定したプロパティで降順に並び替え

並び替え順のフィールドはこちらにあります。

この操作を行うと、年齢順に並び替えることができます。

並び替え順と合わせて利用したいのが、「上から順に取得」という設定です。上位何件を取得するかという設定項目です。

例えば、年齢を若い順に並び替え、上位2件を取得したい場合は以下のように設定します。

テスト太郎20歳とテスト花子25歳が若い順の上位2件でフィルターすることができました。

このような考え方で売上トップ10名を抽出したり、原価率が高い製品のトップ10件を抽出したりすることができますので応用してみてください。

複数の項目の取得は多くのデータセットを扱う傾向がありますが、パフォーマンスや取得できる上限数の制限があるため、OData 式を利用して必要なデータのみを取得するように設計しましょう。

コメントを残す

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