※内容を一部修正しております。(2023年12月)
Power Appsでアプリを作成する際、気をつけなければならない1つの事項としてデータソースから取得できるレコード数の上限があります。
Power AppsはDataverseやSharePointなどから一度に最大2,000件(デフォルトでは500件)のレコードしか取得する事ができません。
よって、委任できない検索条件を用いた場合や、検索後も2,000件を超過するような場合は、全てのレコードを取得する事ができないということになります。
※委任に関する詳細については、過去にブログを作成したことがあるので、以下URLを参照してください。
しかし、どうしても2,000件以上のレコードを取得したい場合があります。
よって、今回は500/2,000件以上のレコードを扱いたい場合の方法について紹介します。
内容としては、Power Appsの中級者の方に向けた記事となっております。
今回紹介する方法は大量データを扱うため、パフォーマンスが大きく低下する可能性があります。
よって、全面的におすすめしている訳ではありません。
(そもそも「データ件数が2,000件を超過しないようにする」という解決策もあると思います。)
あくまでも解決策の1つとして参考にしてください。
前回のブログでは、Power Appsで500/2,000件以上のレコードを扱いたい場合の方法について、実装までの流れを紹介しました。
今回はReloadボタンのOnSelectプロパティの内容について、詳細について深掘りしていきます。
やりたいこと(前回のおさらい)
まずはやりたいことについて、おさらいします。
構成は以下となっております。
データソースはSharePointリストです。
今回は、「大量にデータが保存されているSharePointリストから、Power Appsを用いてその内容を検索する」ということを行います。
SharePointリストの詳細は以下です。
リスト名:LargeList
列名(外部名) |
列名(内部名) |
データ型 |
---|---|---|
タイトル |
Title |
1行テキスト |
詳細 |
Description |
複数行テキスト |
subID |
subID |
数値 |
※「subID」列は、前回のブログのStep3:subID列を追加し、委任に関する警告を解消にて追加しました。
また、SharePointリストには10,001件のレコードを保存しております。
Power Appsの取得できるデータ行の設定も以下のように変更しております。
上記の設定値は、Power Appsのファイル→設定→全般 →データ行の制限から確認することが出来ます。
※デフォルト値は500であり、最大値は2,000です。(2023年2月時点)
実装方法の詳細
今回は、前回のブログで作成したOnSelectプロパティ内について説明します。
作成したプロパティの内容は以下です。
ReloadボタンのOnSelectプロパティ(完成版)
UpdateContext({threshold: 2000 });
UpdateContext({lastRecord: First(Sort(LargeList,ID,SortOrder.Descending))});
UpdateContext({maxIteration: RoundUp(lastRecord.ID/threshold,0)});
Clear(colLargeList);
ForAll(
Sequence(maxIteration, 0),
With(
{
prev: Value(Value) * threshold,
next: (Value(Value) + 1) * threshold
},
Collect(colLargeList, Filter(LargeList, prev < subID && subID <= next))
)
);
1.初期値の設定
UpdateContext({threshold: 2000 });
UpdateContext({lastRecord: First(Sort(LargeList,ID,SortOrder.Descending))});
まずは、以下3つの変数を初期化します。
threshold:データソースから1度に取得するレコード数
lastRecord:データソース内に最後に追加されたレコード
2.ループを回す回数を計算
UpdateContext({maxIteration: RoundUp(lastRecord.ID/threshold,0)});
続いて、ループを回す回数を計算します。
maxIteration:ループを回す回数
Round、RoundDown、および RoundUp
thresholdが2,000、かつレコード数が10,001件の場合、maxIterationは”6″となります。
3.データソースから全レコードを取得
Clear(colLargeList);
ForAll(
Sequence(maxIteration, 0),
With(
{
prev: Value(Value) * threshold,
next: (Value(Value) + 1) * threshold
},
Collect(colLargeList, Filter(LargeList, prev < subID && subID <= next))
)
);
こちらがメインの内容ですが、ForAll関数を用いて、上記で求めたループ回数分ループを回し、データソースから全レコードを取得します。
Sequence()関数については、以下URLを参照ください。
Power Apps の Sequence 関数
動作のイメージとしては、以下です。
ループ回数 |
Value |
取得範囲 |
---|---|---|
1回目 |
0 |
0 < subID <= 2,000 |
2回目 |
1 |
2,000 < subID <= 4,000 |
: |
: |
: |
6回目 |
5 |
10,000 < subID <= 12,000 |
上記にて全レコードを取得することができるようになりました!
補足:subIDはどうやってID値をコピーするのか?
前回のブログのStep3:subID列を追加し、委任に関する警告を解消にて、SharePointリストに新しく「subID」列を追加し、ID値をコピーすると記載しましたが、実際どのように実装するのか?と思った方がいらっしゃるかもしれません。
詳細は省きますが、基本的には以下2通りで実装する事が多いのかなと思います。
案1. Power AppsでSubmitした後、フォームコントロールのOnSuccessプロパティにて、subIDにLastSubmit.IDをコピーする
イメージとしては、以下です。
UpdateIf(LargeList, ID = Form1.LastSubmit.ID, {subID: Form1.LastSubmit.ID})
案2. Power AutomateでSharePointリストを監視し、レコードが作成された場合、subIDにID値をコピーする
イメージとしては、以下です。
おわりに
今回は、Power Appsで500/2,000件以上のレコードを扱いたい場合の方法について紹介しました。
M365のライセンス内で、SharePointを用いてPower Appsのアプリを作成したいという要望は多いと思いますので、 本内容が少しでもお役に立てれば幸いです。
ただし、冒頭でも記載した通り、今回紹介する方法は大量データを扱うため、パフォーマンスが大きく低下する可能性があります。
よって、全面的におすすめする方法ではありません。
解決策の1つとして参考にしてください。
最後まで読んでいただき、ありがとうございました!
【このシリーズの過去回一覧】
【こちらも合わせて読みたい】
地方自治体ローコード導入・運用支援サービス(Power Apps・Power Automate)
Microsoft社が提供するローコード技術であるPower Platformを用いて、自治体様のDX化を支援します。
X-SP | SharePoint デザイン・機能拡張サービス
デザイン×機能を兼ね備えたSharePointを提供いたします。
SharePointの利便性を向上し、操作性と視認性を兼ね備えたデザインでユーザーの業務効率化・ストレス低減を提供します。
内製化支援サービス | Power Platform(Power Apps・Power Automate)
Power Platform(Power Apps・Power Automate)開発や運用をスムーズに内製できるよう支援いたします。
DX人材育成プログラム | Power Apps・Power Automte 教育
Microsoft社が提供するローコード技術であるPower Platformを用いて、社内のDX化を推進するための人材を育成いたします。
Power Apps/Power Automateアプリ開発・導入支援サービス
Microsoft社が提供するPower Apps / Power Automateの導入支援として、高度なアプリも最速で作れる業務アプリ作成支援サービスを提供いたします。
SharePointモダン化コンサルティングサービス
従来のSharePoint から移行・モダン化したい方に向けて、事前調査からサイト作成・活用支援までトータルなコンサルティング・技術支援を提供いたします。
小刀稱知哉
大分県出身(温泉大好き)、現在は東京都在住
1990年生まれ
30才でメーカーの技術営業からIT業界にジョブチェンジ!!!
趣味は読書
Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当しております!
持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305
こんにちは。アーティサン株式会社の小刀稱(ことね)です。