1. 2000件問題とは
PowerAppsでは、データソース(SharePoint、Dataverse、SQL Serverなど)から一度に取得できるレコード数の既定上限が2000件に設定されています。
これはDelegation(委任)制限と呼ばれ、データ量が多いアプリでは意図せず一部のデータしか処理されない原因になります。
2. なぜ2000件制限があるのか
PowerAppsはクラウド上で動作するため、クライアント側に大量データを直接読み込むとパフォーマンス低下やタイムアウトの原因になります。
そのため、デフォルトで「データの取得はサーバー側に委任(Delegation)」し、クライアントが処理する件数に制限をかけています。
3. 現在の制限値を確認する方法
- PowerApps Studioを開く
- [ファイル] > [設定] > [詳細設定] を選択
- 「非委任クエリのデータ行数の上限」の項目を確認
- 既定値は 500件
- 最大値は 2000件
4. 解決策(回避策)
4-1. Delegation対応の関数・条件を使う
PowerAppsでは一部の関数・演算子が委任に対応していません。
Filter, Sort, Search などを正しく使えば、サーバー側で絞り込みが行われ、2000件制限の影響を受けません。
例(委任対応パターン):
Filter( '顧客リスト', Status = "Active" )
例(委任対応パターン):
Filter( '顧客リスト', Left(Title, 3) = "ABC" )
※Left
は委任非対応(SharePointの場合)
4-2. データ分割取得
2000件を超える場合、複数回に分けてデータを取得し、コレクションに蓄積する方法があります。
例:ID順に2000件ずつ取得
ClearCollect( colData, Filter(データソース, ID <= 2000) ); Collect( colData, Filter(データソース, ID > 2000 && ID <= 4000) );
4-3. データソース側で絞り込み
SharePointやSQL Serverなど、データソース側でビューやクエリを作成し、PowerAppsで直接2000件未満のデータを呼び出すのも有効です。
4-4. Dataverseへの移行
DataverseはPowerAppsとの統合度が高く、Delegation対応関数も多いため、大量データ処理に向いています。
SharePointからの移行も可能です。
5. まとめ
- PowerAppsの2000件制限はDelegationの仕様
- Delegation対応関数を使えばほぼ回避可能
- 非対応関数を使う場合は分割取得や事前フィルターで対処
- 本格的な大量データ処理はDataverseやSQL Serverの利用も検討
💡 補足
Microsoft公式の「Delegationの概要」ページには、データソース別の対応関数リストが載っています。
→ 公式ドキュメント(Microsoft Learn)
コメント