大量データ取得の動作比較 ギャラリー・データテーブル・モダンテーブル

はじめに

モダンのテーブルコントロールがプレビューでリリースされ、標準機能としてで列の並び替えなどが出来るようになっています。
今回は大量データの場合の挙動の違いをギャラリー、データテーブル(クラシック)、モダンのテーブルコントロールでそれぞれ調査してみたのでご紹介します。

NOTE2024/7月上旬のバージョン:3.24064.18 で検証しています。今後のアップデートで変更となる可能性があります。

委任とデータ行制限について概要

キャンバスアプリを作成しているとよく目にする委任の問題についてですが、詳細は公式や色々記事が出ていますのでそちらをご参考ください。
キャンバス アプリでの委任について – Power Apps | Microsoft Learn
SharePoint – Connectors | Microsoft Learn
Microsoft Dataverse への接続 – Power Apps | Microsoft Learn

TIPS概要としては委任対象外の数式をフィルターなどに含めると、データソース側で処理してくれず、一旦データ行制限の値まで(500~2000まで)を取得してアプリ側で処理する動きとなるため、件数が多い場合に正しい値が取れないケースがあるよ。という感じです。

一例として、SPOリストの場合は含む検索としてSearch関数やFilterでのinや、否定形<>での比較などは委任対象外です。
Dataverseの場合は含む検索(Search関数やin)や否定形は委任対象となっているなどデータソースにより違いがあります。いずれも列の種類によっても対象、対象外などが分かれます。
また、どちらの場合でもDistinct関数やIf文を入れ込んだりするのは委任対象外だったりと色々あるので詳細については公式のページをご確認ください。
AddColumnsなど行った場合もデータ行制限までのデータとして保持されるのでそのあたりも注意が必要です。
※その他参考:
Distinct関数は委任対象外なので気を付けよう。 | Power Apps Tips ログ (youseibubu.com)
Power Apps ギャラリーのフィルター はAND、ORを使おう(IF文ネストは増えると大変) | Power Apps Tips ログ (youseibubu.com)

ギャラリー・データテーブル・テーブルの取得時の挙動の違い
(委任OK、委任警告あり、コレクション値)

こちらについても以前から記事は出ていますが、改めてギャラリーなどに指定した場合の挙動の違いについて簡単に解説すると、
・委任OKの場合:スクロールのたびに次の100件(モダンテーブルは500件ずつ)取って来るのですべて取れる
・委任警告がある場合:データ行制限値までの一括取得となる(500~2000)、フィルター結果は正しくない可能性もある(データ数が制限値以上の場合)
・一旦コレクションに入れた場合:データ行制限値までの一括取得となる(500~2000)
という感じです。

データ量が制限値以下となる前提であれば警告は無視するのもOKです。
また、一旦コレクションに格納後はアプリ型での操作となるためSearchやinでフィルターしても委任警告は出ませんが、事前にデータ行制限以下(500~2000)となっている前提ですので、そうでなければ委任警告が出ている状態ととくに変わりません。コレクションへ格納時に委任対象の内容で制限値以下にフィルターした上で格納する必要がありますね。
AddColumnsを行った場合もコレクション格納と同等でデータ行制限値までの保持となりますのでフィルターで制限値以下としたうえでAddColumnsを行うようにしましょう。

委任OKの場合の挙動:ギャラリー・データテーブルは次の100件ずつ、モダンテーブルは+500 +1件ずつ

委任OKの数式で大量データを取得した場合の違いについては以下の違いがありました。
・ギャラリーとデータテーブルはスクロールの度に100件ずつ取得してくる
・モダンのテーブルは基本スクロールの度に+500 +1までを件取得してくる。が大体それまでの件数+1を再取得しているケースが多い。

モダンのテーブルの場合は501件を要求していて、それ以上ある場合は以下のように
「500+」、「1000+」という表示が下部に表示されます。この+1件があるかで+マークを表示するか調整しているようです。

監視でみると以下のように100件ずつ、501件ずつとなっていることが分かります。

データテーブルの場合(ギャラリーも同等)

以下のように下までスクロールしたタイミングで次の100件を取得してくる。

モダンのテーブルの場合

基本は500件ごとに取得するようだが、しばらく(数十秒程度)時間がたつと途中で再度取得しに行っている。
また、500件以上の際には次の501件分のみの場合もあるが、それまでの1~1001件までを取り直しているケースもあった。
件数が多いとスクロールに時間がかかるので結果的にそれまでの件数を再取得しているケースが多かった。

スクロールをしていて500より手前だが、一旦500まで再取得されていた

500までスクロールしたタイミングで再取得するが、次の500件ではなく前回を含む1001件を取得している

どちらも表示から少し時間がたった場合はそれまでのデータを再取得しているっぽい

データテーブルの場合も同様でしたが、スクロールして次の100件や500件をすぐに取れる場合は次の分だけ、時間がある程度たった場合は以前のデータも含めて取ってくるような感じでした。
(1000まで表示していてしばらくして次の1500を取ろうとしたら、1~1500まで取ってくるイメージ)

少し(十数秒位?)立った場合は取得したデータが更新されている可能性もあるので、それまでの分も含めて再取得しているのかなという印象です。

データテーブルとモダンテーブルの履歴が混在しているので分かりずらいが、前回の取得から少し経った場合は次のデータのみでなくそれまでの行数を再取得している感じ。

という感じで挙動として大きくは100件ずつか500件ずつの違いがあり、モダンテーブルの場合、
次の500にスクロールするまで時間がかかるので途中で再取得や、次の取得時にもいままでの分を再取得するケースが多い感じでした。
まあ、そもそも大量データを一覧表示はパフォーマンス影響があるので、極力避けた方が良いと思いますが、モダンのテーブルの場合はより取得量が多くなりがちなので注意。という感じでしょうか。

委任警告ありまたはコレクション格納での表示はデータ行制限値まで

委任警告あり、またはコレクション格納時(やAddColumnsなど加工後のデータ)はデータ行制限値までとなり、ギャラリー、データテーブル、モダンのテーブルいずれも一気に500~2000までを保持となります。それ以上スクロールしても次は出てきません。

以下ではデータ行制限値を2000にした場合で挙動確認しています。
ギャラリーの場合だといっきに2000件までスクロールで表示されますが、データテーブルとモダンテーブルは委任OKの場合と同様にスクロールの度に表示が増えていく感じなので、2000件まで見るのには同様に時間がかかりました。
また、データテーブルの場合は表示を増やすたびに動作が重く重くなっていきます。パフォーマンスがいまいちでした。

委任警告ありのFilter内容でItemsに指定した場合

監視でも警告がでている。委任されていないので2000件を取得したよという内容

データテーブルとモダンのテーブルは一気に出てくれず同様にスクロールが必要、ちょっとずつなので結構時間がかかる。※最初に一括取得しているので都度のデータソースへのアクセスはない

スクロールの範囲が狭いので同じようにクリクリとスクロールが必要。結構時間がかかる

最後にギャラリーも加えてみました。ギャラリーだと委任警告ありやコレクションの場合は一気にデータ行制限の2000までスクロール出来て表示できますが、テーブル系はクリクリ狭いスクロールが必要。
データテーブルの場合は最後にデータをロードしていますというメッセージがでている(実際にはロードされてない)
モダンのテーブルの場合は最後に空白行で終了。下部の行数も最初から2000件となっている。という感じです。

その他違い:AllItemsはギャラリーのみ

そういえばと思い確認したら、ギャラリーだとAllItemsまたはAllItemsCountがあるので、
件数を別途ラベルに出したり別で使ったりは出来ますが、データテーブル、モダンのテーブルはAllItemsプロパティはありません。
モダンのテーブルの場合は下部に件数が出ているので件数はわかりますが、データテーブルはそれもなしですね。

おわりに

今回はモダンのテーブルでの大量データ時の挙動が気になったので、従来のギャラリー、データテーブル(クラシック)と比較しつつ、動きをみてみました。
委任対応している内容であれば500件ずつの取得で全量取得は可能なので大量データを扱うアプリでも大丈夫と言えますが、しばらくたつと全量再取得している感じなのでパフォーマンス懸念は少しありますね。
いずれにせよ大量データを扱う場合はパフォーマンスは落ちるのであまり大量データを表示するような設計は避けたほうが良いとは思います。その場合はDataverse+モデル駆動型とするなどケースバイケースでご検討ください。

次の記事ではモダンのテーブルでの並び替え×大量データの対応状況を確認してみます。それでは。

関連記事

モダンテーブル の並び替え と大量データ時の挙動について

モダン関連:

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS