こんにちは、あんこ先生です。
親黄色いアイツ、委任警告が気になって仕方なくないですか?
私はものすごく気になります。
気になるだけならよいのですが、データの抽出ができず意図した処理が行えないことがあります。
そこで今回は、委任警告に負けるな!委任を知って警告を回避する方法を紹介します。
大抵の委任警告は解消できますよ。
委任警告の回避方法
委任とは
ひらたく言うと、PowerAppsで指定したデータソースの抽出をDBMS(データベース管理システム)にお願いすることです。
抽出処理を委任できるため、アプリを起動しているデバイスや通信回線のパフォーマンス低下を回避できます。
つまり、委任できない場合は、DBMSからデータソースそのものを受け取り、アプリ内で抽出処理を行うことになります。
委任できない場合の制限
委任できない場合、条件抽出されていない大量のデータを取得してからアプリ内で処理されます。
そのため、アプリを起動しているデバイスや通信回線のパフォーマンスが低下します。
この問題を回避するために、アプリ内で処理可能なデータの量を500レコードに制限しています。
たとえば、1000レコードある社員情報を委任できない状態で使用する場合、最初の500レコードのみ取り込まれます。
つまり、501レコード以降は取り込まれないため、正しい結果が得られないことがあります。
もちろんデータソースの総レコード数が500以下に収まっている場合、委任の有無で結果は変わりません。
ただし、不要なレコードも取り込むため、パフォーマンスの低下は否めません。
委任の警告
PowerAppsでは、委任できない状態がわかるよう、警告マークが表示されます。
委任の警告は、委任可能なデータソースを操作する式にのみ表示されます。
そのため、アプリ内で計算処理される変数やコレクションでは発生しません。
警告を解消しても委任できるのは500件までなので注意しましょう。
具体例付き委任警告の回避方法
なんちゃって委任回避方法
警告される部分をWith関数や変数等で迂回する方法です。
黄色い警告マークは消えるので解消できたと思いますが、なんの解決にもなっていません。
単に委任可能なデータソースを、直接操作していないだけです。
図の通り、どちらも委任できていないので最初の500レコードしか抜けていません。
一応、大きなデータソースを委任できるサイズに小分けにしてコレクションへ落とし込むことで正しい処理は行えますがちょっとめんどくさいです。
例示コードは1000レコードあるデータソースをコレクションへ落とし組む方法です。
//先頭500レコードをコレクションへ
ClearCollect(tblPersonal,ID<=500)
//後半500レコードをコレクションに追加
Collect(tblPersonal,ID>500)
With関数って何?という方はこちらの記事をどうぞ!
使用する演算子や関数を変更する
都道府県が含まれる列から山で始まる都道府県を抽出したいとします。
3県分抽出するためin句を使用した場合、委任できないので40件しか抜けません。
代わりに委任できるStartsWith関数を使うと130件抽出できました。
次は、指定した年齢以外を抽出します。
!で否定すると委任できませんが、<>で否定すると通ります。
抜き取れる件数がおおきく違ってきますね。
最後に、血液型の列からA型以外を抽出します。
文字列の否定は委任できないので、321件しか抜き取れていません。
否定ができないならそれ以外を集計すればいいとう発想でorを使います。
種類が多いとやってられませんが3つくらいならそんな手間ではありません。
結果、1262件も抜き取れました。
このように似たような処理ができる演算子や関数で代用すれば回避できることがあります。
複数の関数を組み合わせる
Max関数やMin関数は委任できません。
それでも最大値や最小値を取得したいときがありますよね。
そんなときは発想を変えてみます。
最大値を取りたい列をSort関数で降順に並び替え、その結果の1行目をFirst関数で抜き取ります。
こうすれば最大値が含まれたレコードが取得できますよね。
最小値は昇順に並び替えれば同様の処理が行えます。
Last関数は委任できないので、総レコード数に左右されないFirst関数で抜き取りましょう。
そもそも回避する必要がないケース
総レコード数が確実に500件以下の場合は、警告マークが出ていても正しく処理されます。
際どい量だと危険ですが、数十件程度の選択肢に利用するようなものであれば、無視するのも手です。
ただ、警告マークは気になるので解消できる場合は消しこんでいきましょう。
単純に消し込むだけならWith関数で名付けする方法がおすすめです。
非委任状態を逆手に取った活用方法
わざと委任させないことで、最初の500レコードをすべて持ってこさせます。
こうすることで、本来スクロールしないと更新されないギャラリーのAllItemが最初から最大件数表示されます。
AllItemを指定した計算処理を行っている場合は、使ってみるのもよいですね。
もちろん500レコードを超えないことが前提ですよ。
黄色いアイツ、委任警告の回避方法のまとめ
今回は委任とその警告回避方法を解説しました。
委任できるとアプリ全体のパフォーマンスが向上します。
さらに、正しい計算結果が得られないことがあるので、可能な限り委任警告は回避していきましょう。
そもそも論ですが、1度に500件以上のデータを使わないよう設計することが大事ですね。
とりあえず警告マークがあったら解消しよう!