皆さん、こんにちは!
ココナラでSharePointやPower Apps/Power Automateの利活用支援をさせていただいている、naoshi56と申します。
今回はPower Appsのキャンバスアプリ開発において避けては通れない制約「データ行の制限」について解説させていただきます。
1.データ行の制限とは
簡単に言うとアプリに接続されているデータソース(SharePointリストやDataverseなど)から1度に取得できるデータ数の上限設定(設定範囲:1~2000/標準値:500)のことです。
※データソースによって上限設定が異なる場合があります。
(例:PlannerはPlanner側の上限が優先されるので400が上限値になります)
例えば、データ行の制限を「2000」に設定していた場合、6000件のデータが登録されたSharePointリストから1度に取得できるデータ数は2000件までとなり、残り4000件は取得されないというのがデータ行の制限の仕組みです。
2.キャンバスアプリで2000件以上のデータを扱う方法
2000件以上のデータをキャンバスアプリに取り込む方法はいくつかあり、作りたいアプリの要件や仕様にあわせて選択する必要があります。
方法①:画面スクロールや次へボタンでデータを追加取得する
メリット:アプリ起動時の動作に影響が少ない
デメリット:アプリ起動時に全件取得できないので集計処理に不向き
方法②:アプリ起動時にデータ取得を繰り返して全件取得する
メリット:アプリ起動時に全件取得するので集計処理に向いている
デメリット:アプリ起動時の動作が遅くなる
当方はアプリ上で部署別、カテゴリ別などに集計結果を表示させるようなアプリをよく作成するので、以下に方法②のイメージをお伝えします。
【方法②の設定概要】
データソース側の総件数をデータ行の制限に設定した値で分割して、繰り返しで取得処理させるようにすれば実現可能です。
(例:6000件÷2000件=3回の取得処理を繰り返すことで取得します)
上記のデータ取得処理を実現するにあたっては「コレクション」というアプリ内だけで利用するデータテーブルを生成して6000件のデータを格納します。
このコレクションをギャラリーなどに指定して利用することで2000件以上のデータをアプリ内で表示させたり処理することが可能になります。
データの最初[firstData]と最後[lastData]のIDを取得します。
その後、最後[lastData]のIDから最初[firstData]のIDを引いて「+1」したものが取得したい総件数となります。(例:6000-1+1=6000件)
続いて、総件数をデータ行の制限[2000]で割ることで2000件ずつの取得を繰り返す回数[seqCount]を求めます。(例:6000÷2000=3回)
各回の最初[seqFirst]と最後[seqlast]のIDを求め、処理する為のコレクション[seqDataTable]を以下のように生成します。
【SharePointリストをデータソースにする際の注意点】
SharePointリストに「5001件以上」のデータが登録されている場合、アプリでデータ取得しようとすると「リストビューのしきい値を超えている」というエラーが表示されることがあります。このエラーが出た場合は、以下の順序でSharePointリストに「インデックス」を作成することでエラーを回避することが可能です。
インデックスを作成する列は「CountID」は必須です。また、アプリ側でフィルタ処理を行っている場合は、フィルタの条件に使っている列をインデックスとして作成する必要があります。
最後までご拝読ありがとうございました。
実際の設定方法が知りたいということであれば、以下のサービスにてご支援しておりますのでお気軽にご相談ください。
また、実際のソースコード(コンテンツ)も販売していますのでご検討下さい。
<ソースコード販売>
<ソースコード販売>