🤖

Power Apps の取得データ件数(2000件問題)の考え方

に公開

ごきげんよう、百合宮桜(Miyu)です。
Power Apps についてこんな話を聞いたことがありませんか?

  • Power Apps アプリは最大2000件までしかデータを取得できないらしい
  • 2000件までしかデータを取得できないからアプリ利用者が2000人以上だと業務に支障が出るかも
  • アプリの編集画面を開いたら「委任の警告」とかいうよく分からないマークが出てきた
  • 2000件しかデータを取得できないくせに、データソースのレコード数が5000件を超えるとまたなんかあるらしい……

で、皆さん大体こう👇仰いますw
なんかよく分からないけど Power Apps って業務で使えないじゃん!!
これは大きな誤解です。 Power Apps はちゃんと業務に耐えうるように設計されています。

データ行の制限とは?

Power Apps では委任できないデータソースから取得するレコード数の上限値が設定できます。これをデータ行の制限と言います。データ行の制限は Power Apps の設定からカスタマイズ可能で、最大2000行です。

委任とは簡単に言うとデータの検索などの処理をデータソース側に任せることです。委任ができない処理は Power Apps の内部で行うこととなります。この時にデータソース側から取得するデータの数を決めるのがデータ行の制限です。
委任について詳しく解説すると記事が長くなってしまうので、興味のある方は以下のドキュメントを読んでみてください。

https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/delegation-overview

データ行の制限があると、データが一度に最大2000行までしか取得できないため、2001行目以降のデータが欲しいので表示されないでトラブルになることがあります。これを Power Apps の 2000件問題 と呼ぶ方もいます。
いったん少ないデータで試してみると、理解できます。
7行のデータが入った SharePoint Lists があります。

これをデータ行の制限を 5行 に設定した Power Apps アプリに接続し、ギャラリーに表示します。

この時点ではきちんと7行あります。

Items プロパティの値を委任できない関数を加えた式に書き換えます。

Search(データソース,TextInput1.Text,支部)

テキストボックスに入力した値で部分一致する式を書きました。SharePoint Lists には Power が含まれているレコードは3行ありましたが、今回の検索では1行しか取得出来ていません。

これが委任とデータ行の制限の影響です。委任ができない関数や演算子を外部のデータソースにアクセスする式に含めると、データ行の取得制限がかかります。元々 SharePoint Lists には7行のデータがありますが、今回はデータ行の制限を5行に設定しているので、Power Apps では上から5行しか取得出来ていません。

その為、この5行の中で検索しているので、6行目と7行目にいる Power Automate for desktop 支部のお二人は出てこないということになります。

データ行の制限は何のために?

皆さん、お手持ちのデバイスで何か検索してみてください。筆者のパソコンではおおよそ1ページに10件程度の検索結果が表示されました。検索結果が11件以上ある場合、次のページに遷移して確認する仕様です。

このような仕様になっているのには理由があります。

  • ユーザーが検索結果から欲しい情報を選びやすくするため
  • 検索結果の出力による負荷(重たさ)を抑えるため

Power Apps のデータ取得制限も同じです。
Power Apps のアプリは毎日大勢の人が使います。彼らを全員満足させるためにはデータの入出力の負荷を下げて、アプリを軽快に動かせるようにする必要があります。その為、一度に取得できるデータの量を制限して、負荷を抑え、アプリ操作の軽快さを担保する仕様になっています。

2000件問題と委任の対策は?

ブラウザー検索のイメージと同様に最初に10件出力して、もっと見たかったら次ページをめくってもらう……という形にすれば順繰りに全件見ることが可能です。

Power Apps ではコレクションや検索系の関数・演算子を使って、このような仕様を実現できます。
今回のサンプルでは With 関数を利用して、委任を回避して5行以内のデータを取得して、その中から Search 関数で検索をかけることで「次へ」ボタンを押すことで6行目以降の検索も可能にしています。

With(
    {
        FilterRPA:Filter(データソース,And(No>=_locMinNo,No<=_locMaxNo))
    },
    Search(FilterRPA,TextInput1.Text,支部)
)


この時に検索するデータを Power Apps 内部にコレクションとして持つか、Power Apps の外部のデータソースに委任するかで使える手段が異なってきます。このあたりのことはややこしいので、また別の記事でお伝えします。

まとめ

いかがでしたか?
Power Apps のデータ行の制限が解像度が少し上がったと思います。初心者のうちは分からないことも多いと思いますが、今回のやったように少ないデータ量で少しずつ動きを試していくと理解が深まりますので、ぜひやってみてくださいね(≧▽≦)
それではごきげんよう✨

Discussion