業務改善と標準化を同時に実現:MS 365業務システム開発

PowerAppsのアプリが使えなくなる!SharePointリスト5000件問題の解説と解決の仕方

  
PowerAppsのアプリが使えなくなる!SharePointリスト5000件問題の解説と解決の仕方
\ この記事を共有 /
PowerAppsのアプリが使えなくなる!SharePointリスト50...

PowerAppsのアプリでデータ数が5000以上になると、ある日突然そのアプリが使えなくなるのです。今日はその問題の解説と解決方法をお見せします。

(動画時間:6:44)

Udemy.comでオンラインコースを運営しています。
マイクロソフトPowerApps 中級編【SharePointで、実務で使える業務アプリの作り方:勤怠管理アプリ編】
⇒ 半額になる「ディスカウントリンクページ」へ


「SharePointリストの5000件問題」とは?

こんにちは、リーンシグマブラックベルトのマイク根上です。
業務改善コンサルをしています。

最近、僕のクライアントさんにPowerAppsで
勤怠管理システムをお作りしました。
そのクライアントさんはユーザー数が80人以上いまして、
大人数のユーザーでもPowerAppsは対応できる事を再確認しました。

しかし、実際に使い始められて、
しばらくして次の画像でエラー報告を頂きました。

SPリスト 5000件問題によるPowerApps上のエラーメッセージ

エラー文は
「リストビューのしきい値を超えているため、実行できません。」
とあります。

ある日突然、打刻アプリを開けたら
このエラーメッセージが出始めて、
何もデータを表示しなくなったという事です。
全ユーザーにこの現象が出てしまいました。

幸いまだテスト段階でして、業務に問題は無かったのですが、
大変申し訳なかったです。

後で解決方法をお見せしますが、
これは昔話題になった「SharePointリストの5000件問題」です。
これはデータが大量に蓄積されて負荷が掛かり過ぎて
サーバーがダウンしてしまうのを防ぐために、
最初っからデータの処理ができるのを5000件までに制限するものでした。

PowerApps内でFilter関数やSortByColumns関数を使って
委任の問題を上手く回避しても、
SharePointリストでデータが5000を超えたら
前述の様な大問題が起きてしまうのです。

「SharePointリストの5000件問題」は解決していたと思っていたが。

今の時代、データが5,000件しか保存できない
データベースなんて使い物になりません。
勿論SharePointリストも進化していて、
公式では3000万件までデータを保存できる事になっています。

SharePointリスト上で業務をするのであれば
自然にこの問題は解決する様になった
ので
最近は話題に出てこなくなったのですが、
PowerAppsやPower AutomateからSharePointリストに接続する場合は
まだこの問題は存在するのです。

ですから、僕らPowerAppsの開発者は常にこの問題の対処をする必要があるのです。

解決策を先に言いますと、
SharePointリストで並べ替えをする列や
フィルターで条件式で使う列に
インデックスを作成すればいいのです。

と言っても、ちょっと良く分からないですね。
Indexは英語で「索引」や「目録」の意味で、
後で使い易い様に情報を整理する事です。

まずはその作成方法をお見せしましょう。

SharePointリストのインデックスの作成の仕方

SharePoint リストのギアーアイコン

上図はMicrosoft Listsのリストですが、
SharePointリストでも全く同じ方法です。
まず画面右上のギアーアイコンの「設定」から、
「リストの設定」を選びます。

次のページでスクロールダウンして、
「インデックス付の列」を選び、次の画面で
「新しいインデックスの作成」をクリックすると、
そのリスト内でインデックスの作成が可能な
列の選択肢が出てくるので、対象の列を選んで
右側の「作成」で作成できます。(下図参照)

SharePointリストのインデックスの作成

これでPowerAppsでFilterやLookUp関数の条件式で使う列や、
並べ替え、そしてGroupBy関数でグループ化する列などの列に
インデックスを作成して下さい。

これにより、その列の既存のデータと
今後その列に追加されるデータが
全てフィルター、並べ替え、グループ化が問題なくできる様に
それらのデータが整理されるのです。

それを「インデックス化」と呼びます。

PowerAppsのアプリ開発で毎回するインデックス化の手順

最後にこの件に関して実務的な手順をお見せします。
その手順が下図の様になります。

SPリストの5000件問題への対処手順

まず「1)アプリ完成後にデータ数が5000以上になる
可能性のあるリストをリストアップする。」
逆に言うとそうなる可能性のないリストの
インデックスを作る必要はありません。

「2)PowerAppsの開発画面内左の検索機能で
そのリスト名で検索して、
Filter、 LookUp、 Sort、SortByColumns、
そしてGroupBy関数内の引数を見て
インデックスを作成する必要のある列を割り出す。」

その手順の様子をお見せしましょう。

下図のサンプルアプリでは「K01Tbl_Expense_Record」リストが
データ数が5000以上になるリストです。
画面左の検索アイコンをクリックして、
そのリスト名で検索をします。

SPリスト名をPowerApps内で検索する

(MS公式:「リストまたはライブラリ列にインデックスを追加する」)

そしてFilterとLookUp関数の条件式の列名と
Sort、SortByColumns、そしてGroupaBy関数の
対象の列名を全て書き出していきます。

そして後でまとめて、それらのインデックスを作成するのです。

次が「3)その中にインデックスの作成が
できない列があれば作業列を作成する。」とあります。

SPリストでインデックス化ができないデータ型

上図がマイクロソフトの公式ページからの抜粋ですが、
左の列のデータ型はインデックスの作成ができて、
右側のデータ型ができないのです。

もし右側のデータ型の列でフィルターや並べ替えをする必要がある場合は
それ用の「一行テキスト」や「数値」型の列を別に作って
アプリからPatch関数でデータを追加する時に
その列にも同じデータが保存される様にして、
その列でのインデックスの作成をして、
アプリ側の関数ではそれらの列を参照する事で解決できるのです。

そして最後に「4)それらのSharePointリストに行き、
割り出した全列のインデックスを作成する。」です。

上記手順により、今回の
「SharePointリストの5000件問題」を解決できるのです。

おそらく皆さんの実務で使う業務アプリでは
数年経てば必ずどれかのデータベースのデータ数は
5000以上になるでしょう。
ですから今回の手順を毎回行うのをお勧めします。

「こちらの記事も読まれてます