Power Apps キャンバスアプリに関して、「2000 件以上のデータは扱えないのですか?」「2000 件を超えるとどんな問題があるのですか?」といったご相談をいただくことがあります。
今回は、この点について私の見解を整理したいと思います。
まず、「2000 件」という数字がどこから来ているのかですが、これは Power Apps の以下の設定項目に由来しています。デフォルトでは 500 件となっており、設定により最大 2000 件まで引き上げることが可能です。
この上限に関連して、実際にどのような問題が起こり得るのか、また、その際の対策について説明します。
なお、データソースに 2000 件以上のデータが存在していても、Power Apps 側ではデータの登録のみを行い、データの表示、フィルター、検索を行わないようなケースでは、特に問題となることはありません。
今回は、Power Apps 上で 2000 件を超えるデータを表示したり、フィルターや検索などで必要なデータを探し出したりするケースを想定して、情報を整理してみます。
まず、今回はこのようなデータを用意しました。データ数は 3000 件です。
まず、ギャラリー、テーブルで、直接 SharePoint リストのデータを表示してみます。
ギャラリーの方の[Items]
プロパティは、一応、SortByColumns 関数でソートきるようにしています。
テーブルの方の[Items]
プロパティは、SharePoint リスト名を入れています。
どちらにも言えるのですが、いきなり全件情報を取得するのではなく、スクロールなどをすることで段階的に情報を取得しています。そうすると、一応 2000 件以上も取得できます。それぞれの詳細を見ていきます。
最初は 100 件で、スクロールしていくと件数が増え、最終的に 2000 件以上取得できます。ただ、こんな感じで必要な情報探すケースはないかと思います。
- テーブル (モダン) の場合
以下で紹介したモダンテーブルコントロールの場合、500 件ずつ情報取得する感じです。
例えば、以下のような感じで並び替えしてみます。
最後のデータも取得できています。
内部的には以下のような感じでリクエストしています。並び替えして 500 件取得しています。
なぜこのような動きかというと、いきなり全件取得すると、例えば、データが何万件、何十万件もある場合、データ量が多すぎてアプリのパフォーマンスにも影響が出るためです。アプリの利用者としても、データが表示されるまでに何十秒、何分もかかったりしたら嫌ですよね。
また、そもそもデータソース側でも、一度のリクエスト、レスポンスで何万件、何十万も取得することを許可していないことが多いです。そのようなことをしたらシステムに負荷がかかったり、どこかで通信がタイムアウトしてしまったりするリスクがあるためです。
そして、実際のところ、人もそんなに沢山のデータを一度に確認できないと思いますし、アプリのサイズ的にも、スクロールしないと何千件も表示することは難しいと思います。そのため、これは人的にも、システム的にもとても理にかなった挙動と思います。
上記動作も踏まえ、「であれば問題のでは?」と考える人もいるかもしれません。しかし、上記のような方法でデータを探す人は稀だと思います。
実際は、何かしらフィルターをしたり検索をしたりして、効率よく必要なデータを見つける必要があると思います。
そのため、重要なことは、どういった処理で必要なデータを探し出したいか
次第となります。
Power Apps では、何千件以上あるデータから、必要なデータを探し出すための方法として、Filter や Search という関数があります。
端的に言うと、Filter は、選択肢列の選択肢、日付、行の作成者などを基にデータをフィルタリングする、Search はフリーワードで検索する違いがあります。
詳しくは以下の記事も参照ください。
そして、その際、「委任」という概念も抑えておく必要があります。委任については過去の記事でも触れていますが、端的に言うと、必要なデータを探す処理を、Power Apps がデータソースにお願いして (委任して)、結果だけ取得するか (委任可能)、全件取得してPower Apps 側でするか (委任できない)、の違いになります。
必要なデータを見つけるにあたって、その処理が委任できるかどうかで気にするポイントが変わるため、以降で説明します。
Filter や Search など、何の処理を委任できるかは、データソースの種類により変わります。例えば、SharePoint に対しては以下の記事に情報があります。出来るだけ最新の情報を確認することをお勧めします。
SharePoint リストを使うときに一番注意が必要なのは、Search 関数が委任できない
ことです。つまり、フリーワードで検索ができません。
例えば、以下のような感じの Filter 関数は委任できます。こちらでは、問い合わせを管理するリストから、担当者が自分のデータだけをフィルターして表示しています。
Filter(
問い合わせリスト,
担当者.Email = gblCurrentUser.mail
)
このように委任可能な場合は個人的にはあまり気にする必要はないと思います。
仮に、Filetr 関数で委任できる処理を実施した結果、2000 件を超える場合も、一応スクロールすれば表示もされます。ただこの場合、やはりもっと絞り込んだ方がいいと思います。
Number 列が 500 以上でフィルター (委任可能)
スクロールすれば 500 件以上表示される。
委任できない場合、Power Apps では、以下のような警告が出ます。
以下のような感じで、コントロールの横に警告アイコンも出ます。こちらのアイコンが出たときは注意が必要です。
この場合、全てのデータ (2000 件のデータ) を取得し、その範囲内で Power Apps の方で処理を行います。そのため、2000 件以上データがある場合、あるはずのデータが見つからないという問題が発生します。
このように、データを見つけるための処理が委任できない、かつデータが 2000 件以上ある場合、注意が必要になります。
なお、改めてですが、この際の 2000 件というのは、以下の設定に依存します。既定では、500 件で、最大 2000 件まで増やすことができます。
繰り返しになりますが、ここまでを整理すると、どういった処理で必要なデータを探し出したいかを踏まえた対策例は以下のような感じです。
【問題が発生するかどうかのポイント】
- 委任できる処理を使うのであれば問題はない。そのため、出来るだけ委任できる処理を使う
- 委任できない処理を使う場合においても、データが 2000 件未満であれば基本的に問題は発生しない
- 委任できない処理を使う、かつデータが 2000 件以上ある場合、あるはずのデータが見つからないという問題が発生する
【問題が発生する場合の対策例】
-
過去のデータなど、不要になったデータを定期的に削除する、別の場所に退避するなどして、2000 件を超えないようにする
-
委任できない処理について、他のデータソース (例:Dataverse) であれば委任できる場合、そちらを使う (もちろん、ライセンスがあるのであれば)
※Dataverse では、Search 関数委任できます -
委任できる処理でコレクションを作成して (2000 件未満に絞る)、その上で委任できない処理を使う
例えば、備品予約管理するアプリについて、予約の SharePoint リストのデータが 2000 件以上あったとします。そして、大部分は過去のデータだったとします。
この場合、以下のように、過去のデータを除外するような、委任できるフィルター処理をしてコレクションに格納して
、そのデータをギャラリーで表示します。一旦コレクションに格納してしまえば、Power Apps 内部にデータを持って処理することになるため、委任について気にする必要がなくなります (処理を委任せず自分で処理する感じです)。
そのため、このフィルター処理の結果が 2000 件以内であれば問題なく運用できます。
なお、2000 件以上データがある場合は、2000 件までしかデータは表示されません。
※こちらのケースでは、全件コレクションに格納しています
今回は、よく相談いただく、Power Apps キャンバスアプリで、「2000 件以上のデータを扱いたい」、「2000 件以上は扱えない?といった類のことを聞いたことがあるけど、本当?」に関する見解をまとめました。データが 2000 件を超える可能性が出てきそうな方にとって参考になれば幸いです。
Views: 0