技術情報ブログ
SharePoint
2023.06.07

Power Apps × SharePoint:500/2,000件の壁を超えるためには(委任回避方法)?(2)

Power Apps × SharePoint:500/2,000件の壁を超えるためには(委任回避方法)?(2)
小刀稱知哉

こんにちは。アーティサン株式会社の小刀稱(ことね)です。

※内容を一部修正しております。(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プロパティの内容について、詳細について深掘りしていきます。

 

やりたいこと(前回のおさらい)

まずはやりたいことについて、おさらいします。
構成は以下となっております。

Power Apps × SharePoint:500/2,000件の壁を超えるためには?(2)
構成

データソースはSharePointリストです。

今回は、「大量にデータが保存されているSharePointリストから、Power Appsを用いてその内容を検索する」ということを行います。

SharePointリストの詳細は以下です。

リスト名:LargeList

列名(外部名)

列名(内部名)

データ型

タイトル

Title

1行テキスト

詳細

Description

複数行テキスト

subID

subID

数値

※「subID」列は、前回のブログのStep3:subID列を追加し、委任に関する警告を解消にて追加しました。

また、SharePointリストには10,001件のレコードを保存しております。

Power Apps × SharePoint:500/2,000件の壁を超えるためには?(2) SharePointリスト
SharePointリスト

Power Appsの取得できるデータ行の設定も以下のように変更しております。

Power Apps × SharePoint:500/2,000件の壁を超えるためには?(2) Power Appsのデータ行の制限
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:ループを回す回数

RoundUp()関数詳細は以下URLをご参照ください。
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 × SharePoint:500/2,000件の壁を超えるためには?(2) Power AutomateでIDをsubIDへコピーする
Power AutomateでIDをsubIDへコピーする

 

おわりに

今回は、Power Appsで500/2,000件以上のレコードを扱いたい場合の方法について紹介しました。

M365のライセンス内で、SharePointを用いてPower Appsのアプリを作成したいという要望は多いと思いますので、 本内容が少しでもお役に立てれば幸いです。

ただし、冒頭でも記載した通り、今回紹介する方法は大量データを扱うため、パフォーマンスが大きく低下する可能性があります。 よって、全面的におすすめする方法ではありません。
解決策の1つとして参考にしてください。

最後まで読んでいただき、ありがとうございました!

 

この記事を書いた人
小刀稱知哉

小刀稱 知哉ことね ともや

SharePoint Power Platform全般 Copilot Studio 技術アドバイス・教育支援

Power PlatformやSharePointを中心に設計・開発・アドバイス・教育まで幅広く担当しています。内製化をご希望の場合はお気軽にお問い合わせください!

2025 Microsoft MVP(Power Apps・Power Automate)
PL-200 PL-300 PL-400 PL-600 MS-700 AZ-104 AZ-305 SC-200 SC-100

Microsoftクラウド関連

シェアする
記事カテゴリ
最新記事
2026.04.29

Dataverse応用(1)!列レベルのセキュリティを設定してみよう!-特定の列だけマスクする

2026.04.22

ソリューション内で異動・退職者のPower Apps/Power Automateなどを引き継ぐには?所有者変更の手順と注意点を解説

2026.04.15

SharePoint:『リンクのコピー』は危険?権限トラブルを防ぐ推奨運用を解説

2026.04.08

技術ブログ100本書いてみたら、想像以上に得るものがあった話

2026.04.01

社内に聞く人がいない「孤独なDX」を解決!アーティサンの内製化支援サービス

AccessCSSBreakpointObserver承認動的リスト変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続ファイルサイズ基本知識フォントカスタマイズ体験記エンティティワークフロー自動化UI/UXVisual Studio CodeAlternate Key野良アプリ対策IT エンジニア 転職OneDrive1対多InfoPathxUnitメディアクエリリマインドcollection検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローフルリモートワークPowerAutomateブランドセンター感想フォルダ構成設定アクセシビリティPCF代替キーCoEブログ モチベーションつながり参照多対多MatTable.Net Core 3.1スマホSetコレクションMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binアーティサンX-SP Designテーマ作成チームサイトMicrosoft Learn Docsアジャイル開発Wordテンプレート環境構築重複チェック内製化コンサルティングネタ切れ 対策システムカスタマイザーER図Angular MaterialVSCodePCForAll複数の添付ファイルセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールアクセス許可Artisanスライドショーデザイン拡張コミュニケーションサイトカスタムコネクタ準委任契約業務自動化カスタムコンポーネントGUIDITサポートAI ブログ 活用Connection Reference入門編データ構造.Net Core Test ExplorerレスポンシブUpdateContext承認フロー送信元リストLoopショートカットキー時間外非エンジニアDataverseSharePoint Framework転職Slide showMicrosoft365サイトの種類OpenAPI請負契約効率化Power Platform CLI業務キー月額定額PV数 増やす共同所有者1行テキストモデル駆動型アプリSortByColumns関数Dataverse for TeamsDynamics 365ロードマップフォームメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSPFx主キー比較移行要件定義MCPサーバー総合評価型入札資料作成開発手順複合キー委任問題権限トラブル主要な所有者複数行テキストPower AppsTypeScriptitem関数入門技術form差出人アプリdesignconcat関数ファイル勉強表示サンプルCopilot Studio社内ポータル多言語化サイト構成FAQエージェントデジタルトランスフォーメーション初心者向け拡張機能データ整合性Delegationアクセス権限環境変数選択肢Power PlatformHTMLGoogle Maps初心者Itエクスポートインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替samplePowerAppsグループウェアMUI権限設計AIチャットボットプロポーザル方式ハウツービルドデータベース設計サブスクリプション型支援ファイルパスクラシック画面日付SharePointEF CoreMarker Clusterer中級者DXインポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者X-SPNFCタグエンゲージメントMultilingualデータ移行実運用官公庁システム画像挿入プロジェクト作成ユニークキーMVP共有設定ソリューションエクスポート整数ExcelマイグレーションRANK()関数キャンバスアプリノウハウカスタマイズ委任自動化したクラウド フロー運用開発環境filter query管理システム列StyleDLPポリシー地方自治体MLJSON書式保守性デジタル化推進複数レコードPCFギャラリー一意制約技術支援情報漏洩対策権限管理データ型Power AutomateFramework CoreDynamics 365 SalesDatePicker情報技術componentVBAフローの種類選択肢列環境sortガバナンス登録日StudioTestCopilot Studiot共有リンクテンプレート化DX推進テーマカラーPDF変換業務システムURLパラメータ技術ブログ 書き方コマンドバーカスタマイズ組織変更C#Attribute directivesMicrosoft TranslatorDropdownメッセージIDダイアログエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者AICanvas自治体DXレポート化サイト複製作り方ダークモード資料自動作成キャンバスアプリ 違いメンテナンスモードエンジニア ブログ メリットSharePoint管理センター注文管理アプリattributeO/Rマッパーマーカークラスタリングライブラリviewメールコンポーネントエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日生成系AITest Studio生成AI自治体APIPnP PowerShellページ承認Formulasプロパティフロー設計Power Apps 導入並べ替えブログ 継続 コツDLPサブグリッドvalidationazure sql databasetailwindcssビューfirst()関数dialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更Copilotテスト事例HTTP リクエストカスタムスクリプトドキュメント管理カラーセットテンプレート活用Power Apps 比較ヘッダー非表示技術力向上権限管理ベストプラクティスDataverse テーブルローコードCase式マルチテナントアクセス制限nestTips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBlicenseテストスタジオ活用ワーケーション業務効率化IT管理カラーユニバーサルデザイン自動化事例モデル駆動型 とはリスト フィルタ文章力 鍛え方野良権限部署AngularHTTP Requestドロップダウンメニューノーコード入れ子新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携添付ファイルコントロール使い方サイトブランド化名古屋ファイル保存申請システムアプリデザインNode.jsシステム構築便利アウトプット 重要性Teams ファイル共有リレーションシップ
PageTop
ページトップに戻る