Power Apps でデータが足りない原因は委任にある|仕組み・非委任関数・Collectionの罠・テスト法

Power Appsのギャラリーに表示されるデータが少ない。その原因の大半は委任(Delegation)の問題です。Search関数で検索しても結果が足りない、Collectionに入れても解決しない、その理由をこの記事で整理します。

ギャラリーに100件しか表示されない謎

デフォルトで先頭100件しか読み込まない

Power Appsのギャラリーは、デフォルトで先頭100件しかデータを読み込みません。10,002件のSharePointリストにギャラリーをつないでも、最初に表示されるのは100件です。これはPower Appsの仕様であり、バグではありません。

実際の件数を確認したいときは、データソース全体のカウントとギャラリーが取得している件数を別々に出してみると差がよくわかります。なぜ100件しかないんだろうと首をかしげる前に、まずこの仕様を把握しておくことが大切です。

スクロールで増えるが全件ではない

ギャラリーを下にスクロールし続けると、次の100件、さらに次の100件と追加で読み込まれます。無限スクロールのような挙動です。ただし、スクロールで全件取得できるかというとそうではありません。ブラウザが保持できるメモリには上限があり、実測で8,000件前後からクラッシュリスクが高まります。スクロールで増える=全件取得できている、と考えないようにしましょう。

委任クエリとは何か

委任とは、Power Appsがデータの処理をデータソース側(SharePointやDataverseなど)に丸投げすることです。丸投げできる=委任できる、というのが基本の考え方です。

Filter関数はSharePointに仕事を投げる

たとえば Filter(Mega, AnimalColor = "Red") という式を書くと、SharePointサーバーが AnimalColor が Red のレコードを絞り込んで、最初の100件をPower Appsに返します。Power Apps側は何も計算していません。この状態が委任できている状態です。

Power Appsが何もしない=良いこと、というのは直感に反しますが、これが委任の核心です。サーバーが絞り込んでくれるので、10万件のリストでも先頭100件として正しい結果が返ってきます。

非委任クエリの正体

Search関数はSharePointで委任できない

Search関数はSharePointで委任できません。Search関数を使うと、SharePointは先頭500件をまとめてブラウザに送り、ブラウザ上のJavaScriptが検索処理を実行します。残り9,500件はそもそもPower Appsの手元に届いていないので、検索対象にすら含まれません。

10,000件のリストでSearchを使った場合、実態は先頭500件の中から探しているだけです。リストが育つほど、新しいレコード(IDが大きく末尾に並ぶもの)が検索に引っかからなくなります。個人的には、SharePointとSearchの組み合わせは使わない方針で設計するようにしています。

ユーザーには委任警告が一切見えない

Power Appsの編集画面では、委任できていない関数の下に黄色い三角マークや青い下線が表示されます。しかしこの警告はメーカー(アプリを作る側)にしか見えません。アプリを使うユーザーの画面には何も表示されません。

ユーザーからすると、検索しても結果が少ない、一覧に載っていないデータがある、といった状況が起きるだけです。アプリが壊れているのかと思うかもしれませんが、実際には委任問題が静かに動いています。これが委任を無視したアプリが無責任と言われる理由です。委任警告の表示の見方については委任警告の基礎記事も参考にしてみてください。

よくある現場の症状

私が現場でよく見るのは、数年間問題なく運用していたのに、ある時期から最新の申請が一覧に出てこなくなる、というパターンです。レコード数が積み重なって委任の限界を超えたタイミングで、新しいデータが見えなくなります。長く使われているアプリほどこのリスクが高くなります。

委任の上限が500件のうちはリストが育っていなければ表面上は問題ありません。ところがリストが成長した途端に症状が出始めます。アプリ作成時点では気づきにくいので、設計段階から委任を意識しておく必要があります。

Collectionに逃げても解決しない

ClearCollectも委任上限を受ける

ClearCollect(colStuff, Mega) というように、SharePointのデータをコレクションに入れれば委任の問題が解消する、と思っている方が多いです。残念ながらこれは誤りです。ClearCollect自体が委任の対象であり、Megaから先頭500件(または設定した上限件数)しかコレクションに入りません。

コレクションに入れると委任警告が消えることがあります。これはコレクションはローカルデータなので委任の概念がないためであり、問題が解決したわけではありません。警告が消えた=解決した、という勘違いが最も危険です。コレクションの詳しい使い方についてはコレクション活用の基礎記事を参照してください。

Distinctも委任されない(しかも無警告)

Distinct(Mega, AnimalType) はドロップダウンの選択肢を生成するときによく使います。ところがDistinctはSharePointで委任できません。しかも委任警告が表示されないまま、委任上限内のレコードからしか選択肢を生成しないという問題を抱えています。

具体的に考えてみます。ネコ・サカナ・イヌ・シマウマ・ウシの5種類が入った10,000件のリストがあるとします。先頭500件にネコしか登録されていなかった場合、Distinct(Mega, AnimalType) の結果はネコだけになります。残りの4種類は存在していても選択肢に出てきません。新しいカテゴリを追加しても選択肢に反映されない、という問題が静かに起きているわけです。

Pro Tip|委任限界値を1にしてテストする

委任問題を手軽に確認する方法があります。Power Appsの設定から、データ行の制限(行数の上限)を500から1に変更するやり方です。この方法はこの記事だけで紹介するProTipとして、ぜひ習慣化してほしいです。

設定 → 一般 → データ行の制限 と進み、値を1に変更します。この状態でアプリを実行すると、非委任クエリは必ず1件しか返さなくなります。大量のテストデータがなくても委任問題を可視化できる、確実な手段です。

  1. Power Apps スタジオを開く
  2. 設定 → 一般 → データ行の制限 を探す
  3. 値を500から1に変更する
  4. アプリを実行して、ギャラリーやドロップダウンの件数を確認する
  5. テスト後は元の値(500)に戻す

私はアプリを本番に出す前にこのテストを必ずやるようにしています。開発中は少量のデータしか入れていないことが多く、実運用で件数が増えてから問題が出るケースが後を絶ちません。1にして正しく動くかチェックするだけで、多くの委任バグを事前に潰せます。

次のステップへ

ここまでで委任の仕組みと、よくある落とし穴を整理しました。では実際にどう対策するのか。StartsWithを使った回避策、FilterとSearchをネストするパターン、データソース移行の判断基準については委任 完全理解ガイドで解説しています。また、ログインユーザーのデータだけ表示する実践的なフィルター実装はユーザーフィルター実装の記事にまとめています。

まとめ

委任を理解していないアプリは、データが少ない・検索がおかしい・選択肢が出てこない、という症状を静かに起こします。しかもユーザーには何も伝わりません。アプリを作る側が責任を持って委任を把握しておくことが、使えるアプリを作る第一歩です。

委任の問題は奥が深いですが、まず仕組みを理解するところから始めましょう。知っているだけで設計の判断が大きく変わります。市民開発とはこういう地道な積み重ねだと、個人的には思っています。

Xでフォローしよう