背景
とあるPowerApps勉強会でSharePointリスト5000件問題が議題に出ていたので、情報を整理してみました。
SharePointリスト5000件問題とは?
5000件以上のSharePointリストをデータソースとして、PowerAppsのキャンバスアプリでデータを取得しようとしたとき、「リストビューのしきい値を超えているため、実行できません。」というエラーが出てしまい、正常にデータを取得できませんでした。
これはデータが大量に蓄積されて負荷が掛かり過ぎて、サーバーがダウンしてしまうのを防ぐために、データの処理ができるのを5000件までに制限するものでした。
解決策
今回登場人物としては、PowerApps、SharePointリストであり、PowerApps側でデータ取得する関数を実行するとき、どこで問題が起きているのか調査するのが、解決の近道でした。以下が問題点でした。
- PowerAppsの取得する関数が委任可能であるか
- SharePointリストでフィルターする列にインデックス列が設定されているか
委任可能とは?
データソースは、データソース上のデータをフィルタリングする作業を実行し、フィルタ基準を満たす行のみを返す場合があります。 これが正しく機能する場合、クエリの作業を実行するためにクエリがデータソースに委任されたと言います。
クエリが委任不可能な場合、PowerAppsはデータソースから最初の500レコードのみを取得し、クエリ内のアクションを実行します。2000レコードの設定も可能です。
つまり、2000件以上あるデータソースをPowerAppsで取得するとき、委任関数を使用して、データ取得しないとPowerApps側の問題で、正しくデータをフィルターすることができないため、委任可能な関数で実装する必要があります。
SharePointリストのインデックス列とは?
インデックス列を設定していないと、SharePoint側で正常にフィルターされません。実際に5000件以上のSharePointリストを用意して、インデックス列を設定していない列でフィルターしてみると正常に動作しないので、ぜひ試してみてください。
また、SharePointリストでインデックス列を設定できるデータ型に制限があるため、SharePointリスト設計では、注意が必要です。
まとめ
アプリで想定通りに動作しなかったとき、登場人物を整理して、その登場人物のどこで問題が起きているのか調査することが解決の近道であることが、SharePointリスト5000件問題を調べていて、再認識しました。引き続きこのアプローチを続けていこうと考えております。
この記事が皆さんの役に立てば幸いです。何か質問があれば、コメント欄で教えていただけると幸いです!