【Power Apps】Share Pointリストデータが 5,000 件を超えた場合の Power Apps におけるデータ取得回避策

■はじめに

Power Apps と Share Point リストを組み合わせた業務アプリは、比較的少ない工数で現場に即したシステムを構築できる点が大きな魅力です。しかし、運用が進みデータ件数が増えてくると、多くの開発者が必ず直面するのが 「SharePoint リスト 5,000 件制限」 に起因するエラーやパフォーマンス低下です。
本コラムでは、SharePoint リストのデータ数が 5,000 件を超えた場合に Power Apps からデータを取得する際の代表的な問題点を整理し、その回避策として インデックス列を活用したデータ取得方法 を中心に解説します。

■SharePoint リストの 5,000 件制限とは

SharePoint には「リスト ビューのしきい値 (List View Threshold)」と呼ばれる制限があり、1 回のクエリで 5,000 件を超えるアイテムをスキャンする処理 が発生するとエラーになります。
重要なのは、「5,000 件を取得した場合にエラーになる」のではなく、条件に合致するかどうかを判定するために 5,000 件以上を読み込もうとした時点でエラーになる という点です。
Power Apps 側では、次のような式でこの制限に引っかかるケースが頻発します。

  • Filter 関数で条件指定しているが、条件列にインデックスがない
  • SortByColumns で並び替え対象の列にインデックスがない
  • Today() や動的な条件を含み、SharePoint 側で最適化できない

■Power Apps で発生しやすい典型的な症状

SharePoint リストが 5,000 件を超えた状態で Power Apps からアクセスすると、次のような症状が現れます。

  • ギャラリーの Items にエラーが表示される
  • 「委任の警告」が出て正しい件数が取得できない
  • 条件に一致するデータが少数でもエラーになる
  • 環境やタイミングによって取得できたりできなかったりする

これらは Power Apps の不具合ではなく、SharePoint 側のしきい値制限に起因する仕様 です。

■回避策の基本方針:インデックス列を使う

この問題に対する最も現実的かつ推奨される回避策が、SharePoint リストの列にインデックスを設定すること です。
インデックスを設定することで、SharePoint は該当列を事前に並び替え・検索可能な状態で保持できるため、5,000 件を超えるリストでも効率的なフィルタリングが可能 になります。

インデックスを設定すべき列の考え方
以下のような列は、優先的にインデックスを設定すべきです。

  • Power Apps の Filter 条件で必ず使用する列
  • 業務上、検索・絞り込みの起点となる列
  • 日付列(指定日、作成日、処理日など)
  • 部署・拠点・ステータスなど、値の種類が限定されている列

■実践例:インデックスを活用した Filter の書き方

例えば、以下のような条件で当日のデータを取得したいケースを考えます。

Filter(

    ‘検証リスト’,

    SpecifiedDate = Today() &&

    WorkBranchOffice = “福岡オフィス”

)

この場合、SpecifiedDate / WorkBranchOfficeの各列にインデックスを設定することで、SharePoint 側での検索処理が最適化され、5,000 件を超えていてもエラーを回避しやすくなります。

■SortByColumns 使用時の注意点

SortByColumns も内部的には SharePoint に並び替えを要求するため、並び替え対象の列にもインデックスが必要 です。

SortByColumns(

    Filter(‘検証リスト’, SpecifiedDate = Today()),

    “SpecifiedStartTime”,

    SortOrder.Ascending

)

この場合、SpecifiedDate と SpecifiedStartTime の両方にインデックスが設定されていないと、Filter が成立していてもエラーが発生することがあります。

■まとめ

SharePoint リストが 5,000 件を超えた環境で Power Apps を安定運用するためには、インデックス列の設計が事実上必須 です。
ポイントを整理すると以下の通りです。

  • 5,000 件制限は「取得件数」ではなく「検索対象件数」の制限
  • Filter / SortByColumns で使用する列には必ずインデックスを設定
  • 先頭条件・並び替え列のインデックス有無が成否を分ける
  • Power Apps 側の工夫だけでは回避できないケースが多い
cropped-logo-1.png_noindex

技術とノウハウでデジタルシフトをサポート
中小企業の頼れるパートナー

執筆者: 村瀬 俊昭(株式会社クロスディーズ システム技術統括エンジニア)

前職では社内システムの運用、サーバーの監視、システム運用業務の構築、システム開発業務といった業務に幅広く携わる。2021年より株式会社佐々木総研にてロボットの設計・開発、社内SEとして従事している。釣りが趣味で、大のビール好き。