【はじめに】委任って何だ?
そもそも、PowerAppsでの「委任」とは、関数を使った計算や絞り込み、並べ替えなどをする際に、PowerAppsでは行わず、データベース側で処理を行ってから結果を取得することを指します。
委任の問題(2000件問題)って何だろう?
委任の問題とはPowerAppsでときどき見られるこの警告のことです。
左上の「!」マーク
これは、PowerAppsが大量データを取得しようとした際に、デバイスや通信のパフォーマンスが低下するのを回避するために、処理可能なデータの件数をデフォルトで500件にしているためです。
この500件というのは、デフォルトで設定されています。この値は最大で2000件まで引き上げることができます。しかし、それ以上は設定できないため、俗にこの委任の問題を「2000件問題」と呼ぶこともあります。
ちなみにアプリの利用時はこの警告は表示されず、さらにエラーではないので、処理が正常に動くこともあるため、見逃しがちです。
何が問題なのか?
「!」マークの詳細を開くとこんな表示が。
ではこれの何が問題なんでしょうか。もちろんデフォルトで500件までというのも問題ではありますが、仮に10000件のレコードの入ったデータベースから、を作ってみるとします。該当するデータベースから、単純にコレクションをつくってみました。
※コレクションとは…PowerAppsの変数の1つで、アプリで管理できるデータをこの中に格納できます。このデータはテーブル構造になっています。
コレクションを作っている様子。
『テーブル: 2000行』との表示が!
これは、10000件のデータが入っているデータベースから「col_Number1-10000」という名前のコレクションを作成した様子なのですが、左の画像を見ると、col_Number1-10000の中には2000件のレコードしか入っていないことが分かります。
2001件目以降のレコードは切り捨てられてしまっているので、作成したコレクションの中からその分のレコードを表示させようとしても、表示できないということになります。
【検証】委任の問題を回避するには?
どうしたら委任の問題を回避することができるのか…!検証スタート!
【用意するもの】
・2000件を超えるデータベース(今回はNumber1-30000という名前の、3万件のレコードが入ったデータベースを準備しました。)
・コレクションを表示させるリストボックス
・絞り込みの値を設定したコンボボックス
・処理を実行するボタン
データベースの作り方
データベースはExcelで1から30000まで入力し、ファイルを作成します。(↓こんな感じ)
データベース
Excelファイルを作成したら、テーブルを作成するページに移動し、「Excelファイルをアップロード」というところから、作成したファイルを選択してアップロードすると、テーブルが作成されます。
テーブルの作成
作成されたテーブル
リストボックス
リストボックスは、表示できるレコードが最大500件のコントロールです。
500件を超えるデータベースやコレクションを表示させようとすると、「アイテムの最大数に達しました」と表示されます。
リストボックス(デフォルト)
500件を超えるレコードを表示させようとしたリストボックス
コンボボックス
コンボボックスとは選択肢を表示、選択できるコントロールです。
矢印をクリックすると、選択肢が表示される
選択肢を表示させた状態
選択肢をクリックした状態
ボタン
ボタンは、記述した処理を実行するコントロールです。OnSelectという箇所に、実行したい処理を記述し、ボタンを押下すると処理が実行されます。
今回は、コレクションの作成と絞り込みの処理に使用します。
リストボックスに表示させるコレクションをつくる
何も考えずにつくると委任の問題になっちゃう
前述の通り、普通にテーブルをそのままコレクションに入れると、2001件目以降のレコードはコレクションの中に入りません。
そして、そもそもリストボックスは500件までしか表示できないのでテーブルを絞ってあげる必要があります。
しかし、このDBをフィルターするところでも!!!(青い二重線すべて)
回避のコツ
調べてみたところ、どうやら、委任できる関数とできない関数があるらしいことが分かりました。
「委任可能な関数」と「委任できない関数」という項目が目次に書いてあります!どうやらここにヒントがありそうです。
もっと調べてみると、「委任可能な関数」は、計算や絞り込み、並べ替えなどをデータベース側で行い、その処理結果をPowerAppsで取得することができる関数だということが分かりました。
Filter関数(データベース/テーブルを絞りこむ関数)はと紹介されているので、これを使ってあげれば委任の問題を回避できそうです!
さらに検証を重ねていったところ、該当する処理を、全て委任できる関数で書く必要があることが分かりました。
というわけで、先ほどのコードを委任できる関数のみ(Valueを外して)で記述してみました↓
これで、500件以内に絞り込めるようにコンボボックスの値を調節して、ボタンをクリックします!
リストボックス表示用に絞り込みできた~
上記の書き方で、リストボックス表示用コレクションが完成!試しに2000から2500の値で絞り込んでみます。すると…
2001件目以降のレコードが表示されている様子
きちんとリストボックスにも表示できました!
アイテムの上限に引っ掛かってない!
これでなんとか2000件問題を回避!おめでとうございます~
[補足] 2000件以上のレコードを表示させる方法として、ギャラリーというコントロールを使う、という方法があります。ギャラリーでは、ので、データベースを絞り込まずとも2001件目以降のレコードを表示できます。
ギャラリーを使って表示させた様子
【まとめ】委任の問題を回避する
今回はPowerAppsの委任の問題について調べ、検証していきました。
デフォルトの設定だと500件、拡張しても2000件になってしまうので、2000件を超えるデータベースを扱う場合には、委任の問題に注意が必要です。また、委任の問題になってしまう処理については、該当する処理で用いているすべての関数を、にしなければなりません。少し手間になってしまいますが、正しく処理が動かないリスクを回避するために、この方法を活用してみてください。