PowerAppsデータソースはExcelかSharePointリストか
CATEGORIES POWER PLATFORM

PowerAppsでアプリを作成する際に、Excel で作った一覧表を Power Apps で表示するときExcel をそのまま読み込むか、SharePoint リストに移してから使うか。
最終的には、その時々の判断になるとは思うが一般論をAIに聞いてみたのでメモしておく。

Excel をそのまま使うのは、2,000行以下・閲覧が中心・更新するのは1人の場合まで。件数が増える、複数人で更新する、長く使う、のどれかに当てはまるなら SharePoint リスト。

条件使うもの
更新しないマスタ(区分・都道府県など)Excel の静的インポート
2,000行以下・更新者1人・試作Excel Online (Business) コネクタ
2,000行を超える可能性があるSharePoint リスト
複数人が同時に更新するSharePoint リスト
更新をきっかけに Power Automate を動かすSharePoint リスト
行ごとに変更履歴・権限を管理したいSharePoint リスト

Excel を Power Apps で使う方法は3つ

方式データの場所更新用途
静的インポート(静的データをアプリに追加)アプリ内に埋め込みできない変わらないマスタ
Excel Online (Business) コネクタOneDrive / SharePoint 上の xlsxできる小規模な読み書き
SharePoint リストに取り込むExcel から取り込んだ SharePoint リストできる本番運用

※ 静的インポートは、元の Excel を変えてもアプリには反映されない。アプリに取り込んだ時点のデータが埋め込まれるため。 ※ 静的インポートは、次の委任の制限を受けない。最初からアプリのメモリ上にあるため。

委任と2,000行の制限

件数の制限は「委任(デリゲーション)」で決まる。委任は、絞り込みや並べ替えをデータソース側に任せること。

  • 委任をかんたんに言うと、「条件を SharePoint に渡して、全件の中から探してもらう」か、「Power Apps が先頭の500行だけ受け取って、その中から自分で探す」かの違い。
  • 委任できない式も、エラーにならずに動く。そのため「あるはずのデータが抽出されない」「件数が合わない」ことが起きる。先頭の500行(最大2,000行)の中しか探していないため。
  • 「この関数は使えない」と言われることが多いのも委任が原因。関数自体は使えるが、使うと委任できなくなり、上の抽出漏れが起きる。
式動き
委任できるSharePoint 側で絞り込んだ結果だけが返ってくる。件数の上限はない
委任できないPower Apps が先頭の500行だけを取ってきて、その中で処理する

※ 500行は「設定」→「全般」→「データ行の制限」で2,000行まで上げられる。それ以上は上げられない。 ※ 式の一部でも委任できないと、式全体が委任されない。
※ Excel コネクタは委任に対応していない。どんな式でも先頭2,000行までで、2,001行目以降は存在しないのと同じになる。

Excel の場合は、コレクションに取り込んでから使うと、委任を気にせずに式を書ける。ただし、取り込むときに2,000行の制限がかかる。

段階委任の制限
Excel からコレクションに取り込む(ClearCollect(colList, Table1))かかる。最大2,000行まで
コレクションに対して Filter・Search・in などを使うかからない。どの関数も全件に効く

※ コレクションは端末のメモリ上にあるので、委任の考え方がない。Search や in を使っても黄色の三角は出ない。
※ 2,000行を超えた分は、取り込むときに何も表示されずに切り捨てられる。取り込んだあとに CountRows(colList) で件数を確認し、2,000件ちょうどなら切り捨てられていると考える。
※ コレクションは取り込んだ時点のコピー。Excel 側を書き換えても、もう一度 ClearCollect するまで画面には反映されない。

編集した内容は、最後に Patch で Excel に書き戻す。コレクションを書き換えただけでは Excel には戻らない。

注意点起きること対策
反映の遅れ書き込んでから Excel に反映されるまで最大30秒かかる保存した直後に ClearCollect で読み直さない。保存後はコレクションの値をそのまま使う
ファイルのロック最後に使ってから最大6分、更新・削除ができないことがある同じファイルを Excel で開いて編集しない
同時に書き込む後から保存した内容で上書きされる・競合する更新するのは1人に限る
全件を書き戻す1行ずつ書き込むので、件数が多いと保存に時間がかかる変更した行だけを書き戻す
行の特定どの行を更新するかを決めるキーが必要__PowerAppsId__ 列か、一意の番号列で照合する

※ 保存直後に読み直すと、反映前の古い値が戻ってきて「保存したのに元に戻った」ように見える。
※ 同時に書き込みが必要になったら、SharePoint リストに移すタイミング。

委任できない式を見つける

委任できない式は、エディタ上で黄色の三角マークが出る。赤のエラーとは別もので、アプリはそのまま動く。

マーク意味アプリの動き
黄色の三角委任できない式(警告)動く。ただし先頭の500行(最大2,000行)の中だけで処理する
赤の波線・バツ式の誤り(列名の間違い、型の違いなど)その部分が動かない

※ 黄色の三角は、件数が少ないうちは結果に影響が出ない。テスト中は正しく動いて見え、データが増えてから抽出漏れが起きる。

開発中は、データ行の制限を一時的に下げて確認する。

  1. 「設定」→「全般」→「データ行の制限」を「10」にする
  2. ギャラリーや検索を動かして、10件しか出てこない式を探す
  3. 確認が終わったら、データ行の制限を元の値(500 または 2,000)に戻す

※ 委任できない式は、データ行の制限の件数までしか取ってこない。制限を10にすると、10件で止まるのですぐ分かる。 ※ 元に戻し忘れると、本番でも10件しか表示されなくなる。

たとえば、SharePoint リスト「顧客一覧」(30件)に、顧客名が「山田」で始まる顧客が5件(3・15・18・22・27行目)ある場合。

Search を使った検索(委任できない)

// Gallery1.Items
// 顧客名(Title)に「山田」を含む顧客を表示する
Search(顧客一覧, "山田", "Title")

StartsWith を使った検索(委任できる)

// Gallery2.Items
// 顧客名(Title)が「山田」で始まる顧客を表示する
Filter(顧客一覧, StartsWith(Title, "山田"))

件数を確認するラベル

// Label1.Text
// ギャラリーに表示されている件数を表示する(Gallery2 の場合は Gallery2.AllItems にする)
CountRows(Gallery1.AllItems) & "件"
式データ行の制限 500データ行の制限 10判定
Search5件1件委任できない
Filter + StartsWith5件5件委任できる

※ データ行の制限が500のままだとどちらも5件になる。リストが30件しかなく500行の中に全部入っているため。
※ 制限を10にするとSearch は1〜10行目しか探さないので、3行目の1件だけになる。StartsWith は SharePoint 側で全件から探すので、5件のまま変わらない。
※ 本番でリストが500件を超えると、制限を下げなくても Search で同じ抽出漏れが起きる。

Excel コネクタの制限

項目内容
取得できる行数最大2,000行
ファイルサイズ25MB まで
前提データを「テーブルとして書式設定」しておく
自動で追加される列Power Apps から書き込むと __PowerAppsId__ 列が追加される
ロック最後に使ってから最大6分、更新・削除ができないことがある
同時編集Excel・Power Automate・Power Apps から同時に書き込むのは非サポート
反映追加・更新・削除の反映に最大30秒かかる

※ 列名にスペースがあると、Filter や LookUp でエラーになることがある。列名は英数字だけにしておく。

SharePoint リストの制限

SharePoint リストは委任できるので、件数の上限は基本的にない。ただし、委任できない関数を使うと2,000行の制限に戻る。

項目内容
委任できるFilter、Sort、SortByColumns、LookUp、比較演算子(=、<、> など)、StartsWith、Sum・CountRows などの集計
委任できないSearch、IsBlank、in 演算子、Left・Mid・Lower などの文字列操作
ID 列委任できるのは「=」だけ
ユーザー列委任できるのは Email と DisplayName だけ
5,000件を超えたときインデックスのない列で絞り込むと失敗する

※ IsBlank は = Blank() に書き換えると委任できる。
※ ID 列は数値に見えるが、大小の比較は委任できない。範囲で絞り込むときは別の数値列を使う。
※ 5,000件を超えそうなリストは、絞り込みに使う列にインデックスを作っておく。
※ Excel コネクタも SharePoint も標準コネクタなので、Microsoft 365 のライセンスの範囲で使える。

できること・できないこと

やりたいこと静的インポートExcel コネクタSharePoint リスト
数百行の一覧を表示・検索○○○
3,000行の一覧を表示○✕○
3,000行をコレクションに全件入れる○✕△
アプリから更新✕○○
複数人が同時に更新✕✕○
元データの変更がアプリに反映される✕○○
更新をきっかけに Power Automate を動かす✕△○
行ごとの変更履歴・変更者✕✕○
Excel の関数や集計をそのまま使う○○✕

※ SharePoint リストでコレクションに3,000行入れるには、2,000行ずつ分けて取得する(下のコード)。 ※ Excel コネクタで Power Automate を動かす場合は、行が追加されたときのトリガーがないので、定期実行で代わりにする。

コレクションを使うかどうか

「データソース → コレクション → 一覧表示」の流れはよく見るが、コレクションに取り込む時点で2,000行の制限がかかる。SharePoint リストを使うなら、ギャラリーに直接つなぐのが基本。

Excel コネクタの場合

// App.OnStart
// Table1 の内容をコレクション colList に取り込む(最大2,000行)
ClearCollect(colList, Table1)

SharePoint リストをギャラリーに直接つなぐ場合

// Gallery1.Items
// 顧客一覧を、検索欄(txtSearch)の文字で始まるものに絞り込んで、更新日時の新しい順に並べる
SortByColumns(
    Filter(
        顧客一覧,
        StartsWith(Title, txtSearch.Text)   // Search は委任できないので StartsWith を使う
    ),
    "Modified", SortOrder.Descending
)

※ ギャラリーに直接つなぐと、スクロールに合わせて100件ずつ読み込まれる。

コレクションを使うのは次の場合。

使い方向いている場面
ギャラリーに直接つなぐ一覧表示・検索・並べ替え
コレクションに取り込んで表示委任できない加工が必要なとき、複数のデータを結合するとき
コレクションで編集してまとめて保存明細入力・一括更新

※ コレクションで編集した内容は、保存する前にアプリを閉じると消える。

SharePoint リストで2,000行を超えるデータをコレクションに入れる場合は、2,000行ずつ分けて取得する。

// App.OnStart
// 顧客一覧を2,000行ずつ取得して、コレクション colList に追加する
// SeqNo は 1 から始まる連番の数値列(インデックスを付けておく)
Clear(colList);
ForAll(
    Sequence(5, 0, 2000) As blk,     // 0, 2000, 4000, 6000, 8000 → 最大10,000行
    Collect(
        colList,
        Filter(顧客一覧, SeqNo > blk.Value && SeqNo <= blk.Value + 2000)
    )
);

※ 分けるときの基準に ID 列は使えない。ID 列は大小の比較が委任できないため、連番の数値列 SeqNo を別に作っておく。
※ 件数が増えたら、Sequence の最初の数字(5)を増やす。
※ コレクションは端末のメモリに載るので、件数が多いとスマートフォンでは動作が重くなる。
※ この方法は SharePoint リスト専用。Excel コネクタでは、区切りごとの Filter が先頭2,000行の中しか探さないので、2,001行目以降は取れない。
※ Excel で条件を付けて取り込んでも同じ。条件は先頭2,000行の中で判定されるので、結果が2,000件より少なくても取りこぼしが起きる。

権限の注意点

アプリの画面に出していなくても、利用者にはデータそのものへの権限が付いている。

Excel コネクタSharePoint リスト
利用者に必要な権限xlsx ファイルの編集権限リストの編集権限
利用者が直接できることファイルを開いて全行の閲覧・ダウンロード・書き換えリストの URL を開いて全件の閲覧・編集
権限を絞れる単位ファイル単位のみアイテム単位

※ SharePoint リストは「自分が作成したアイテムのみ」閲覧・編集できるように設定できる。 ※ 単価や個人情報が入った一覧は、Excel コネクタでは扱わない。

公開する前に、利用者と同じ権限のテスト用アカウントで、アプリ・リストの URL・ファイルの3つから何が見えるか確認してね。

NOTICES

  • 記事内容は実装させたものがほとんどですが自己責任で参考にしてください。