こんにちは、Power Platform サポートの清水です。
今回は、Power Apps のキャンバス アプリを使用する際に引っ掛かりがちな「委任」の制限について、かみ砕いてご説明いたします。
公開情報はこちら。
そもそも委任って何?
「委任」とは、Power Apps 上でのデータ操作 (Filter クエリなど) をアプリ上で行わず、データソース側で行い、キャンバス アプリはその結果のみを取得することで、アプリのパフォーマンスを向上させる仕組みのことを言います。
Power Apps で扱う業務データは非常に膨大になることも少なくないので、全てのデータを取得してから、アプリ上で Filter や Sort を行うことは現実的ではございません。
したがって、データ量を抑えて効率的なアプリを作成するために、データソースに委任できる処理はデータソース側でやってもらい、アプリでは処理結果を受け取るだけにしましょうね、という仕組みを提供しています。
委任可能なデータソースと関数
とはいえ、データソース側でも全ての処理を実行できるわけではございませんので、Power Apps から委任できるデータソースや処理の内容は限られています。
委任可能なデータソースは、現時点では以下のデータソースのみです。
それぞれ、委任可能な関数がデータソースによって異なりますので、コネクタのリファレンスをご参照ください。
- Microsoft Dataverse (旧名: Common Data Service)
※Dataverse では、プレビュー機能として CountRows, CountIf, First, in 演算子の委任もサポートしています。
(この設定は、既定でオンになっています。) - SharePoint
- SQL Server
委任できない場合どうなるの?
委任できないデータソースや関数を使用した場合、Power Apps では、一度データソースから全てのデータをメモリ上にダウンロードします。
ただし、あまりにも大量のデータを取得すると、アプリのパフォーマンスに大きな影響が出るため、取得できるデータ量は限られています。
一度に取得できるデータ件数の最大は、アプリの「委任できないクエリのデータ行の制限」の設定項目から確認できます。
[ファイル] > [設定] > [詳細設定]
データ行の制限は、既定で 500 、最大で 2000 まで変更可能ですので、キャンバス アプリに一度で取得できるデータの最大行数は 2000 行となります。
つまり、委任できないデータソースを使用している場合、また委任できない関数や演算子を使用している場合、データソースから上位 2000 件のみを取得し、アプリ上でクエリ処理を実行することとなります。
以下の例を見てみましょう。
データソースには全部で 510 件のデータがあり、「委任できないクエリのデータ行の制限」は 500 に設定されています。
Filter 処理により、300 番目のデータと 510 番目のデータが取得されると仮定すると、
- 委任がサポートされている場合、Power Apps では、Filter 処理の結果である 2 行のみを取得できます。
- 委任がサポートされていない場合、データソースの上位 500 行をアプリ上に取得してから Filter 処理が行われるため、得られる結果は 300 番目のデータのみとなり、510 番目のデータを得ることができません。
※ただし、ギャラリーを使用している場合は、Items プロパティの式が委任できるように記述されていれば、スクロールに伴って随時データソースと通信し、データの取得を行う動作となるので、ご安心ください。
委任可能なケースの落とし穴
「委任ができるデータソース・関数を使用しているから問題ない」と思っている方、実は、委任できるからと言って、どんなに大量のデータでも取得できるわけではないので、要注意です。
「委任できないクエリのデータ行の制限」という設定項目について説明しましたが、これは、委任ができるデータにも当てはまります。
つまり、Power Apps が一度に取得できるデータ行は、結局は最大で 2000 件なのです。
そのため、データソースにクエリを委任した結果、データ件数が 2500 件になってしまった場合、クエリ結果のうち 2000 件までしか取得できないので、残りの 500 件については置き去りにされてしまいます。
では、どうすれば良いのか??
「委任できないクエリのデータ行の制限」は、あくまでも一度に取得可能なデータ行の制限です。
2000 行を超えるデータを取得したい場合は、複数回に分けてデータを取得し、コレクションに追加するようにしましょう。
コレクションには、格納できるデータ件数に上限はございません。
Tips - 複数回に分けてデータをコレクションに取得??
複数回に分けてデータを取得する動作は、例えば以下のような数式で実現できます。
1 | // 委任可能件数以上に格納するためのコレクション |
※サンプルコードなので、動作検証はしっかりと行ってください。
ご参考まで。
おわりに
以上、Power Apps キャンバス アプリの委任の動作についてご説明しました。
公開情報を読むと、小難しい制限に思われるかもしれませんが、理解してしまえば簡単ですよね。
委任をしっかりと理解し、正しくキャンバス アプリを作成する手助けになりましたら幸いです。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。