SharePointのデータの一括更新について聞かれたので、ついでに性能比較もしてみた。
やってみたこと
今回はアイテムが500個以上あるSharePointリストに対し、「文字列」型の列に値を一括設定してみた。
※設定[データ行の制限]は500のままなので、更新対象は先頭500件

※設定[データ行の制限]は500のままなので、更新対象は先頭500件

比較したのは以下の3つの関数。
- Patch
- UpdateIf
- ForAll
結論:SharePointリストの一括更新はPatchが速い。
UpdateIf
まずUpdateIf。式はこんな感じ。
UpdateIf('501sample', true, {s:"a"} );

式はシンプルで悪くないんだけど、500件の更新に約1分半ほどかかる。


Patch
続いてPatch。式はこんな感じ。
ClearCollect(target, '501sample'); // 全データをPower Apps側に持ってきて
UpdateIf(target, true, {s:"b"} ); // UpdateIfでPower Apps側のデータを一括更新
Patch('501sample',target); // Patchで一気に適用

結果はこちら。500件の更新が約20秒くらい。


2025年追記:同じPatchでも「更新したい列のみ」対象とした方が早い
同じPatch一括更新でもForAllなどで「更新したい列のみ」対象として一括更新した方が早い。
コードはこんな感じで、
ClearCollect(target,
ForAll('501sample',
{
ID:ThisRecord.ID,
s:"b"
}
)
);
Patch('501sample',target);

結果はこちら。500件の更新が約11秒くらい。
ForAll
最後はForAll。式はこんな感じ。
With({target:'501sample'},
ForAll(target,
Patch('501sample',ThisRecord, {s:"f"});
)
);

意外と善戦して500件の更新で約1分10秒くらい


ということで結論はPatchでの一括更新が一番早かった。
ただし、列数が多い(特に画像列とかがある)SharePointの場合は、ForAllとかを使って「更新したい列のみを対象にPatchで一括更新」した方がさらに早くなる。



