Power Appsからデータベースへ処理を委任できる関数は、データベースごとに異なります。
SharePointリストに対する委任の話は色々な情報が出ていますが、Power Apps全体としての委任可能な関数があまりまとまっていない気がしたので、SharePointリスト・Dataverse・SQL Serverで委任可能な関数を表でまとめてみました。
委任可能な演算子・関数一覧
データ型による制限は表内に記載し、その他特筆すべき事項は脚注で記載しています。
なお、以下の表に記載のない演算子・関数はすべて委任不可です。
演算子
SharePoint | Dataverse | SQL Server | |
---|---|---|---|
<, <=, >, >= (比較演算子) | △ (Number, DateTime型のみ)*1 | ◯ | △ (Number, DateTime型のみ) |
= (等価演算子) | ◯ | ◯ | ◯ |
<> (非等価演算子) | △ (Number, DateTime型のみ)*1 | ◯ | ◯ |
*, +, -, / (算術演算子) | ✕ | ✕ | △ (Number型のみ) |
And (&&) | ◯ | ◯ | ◯ |
Or (||) | ◯ | ◯ | ◯ |
Not (!) | ✕ | ◯ | ◯ |
In (メンバーシップ) | ✕ | ◯ *2 | ✕ |
In (部分文字列) | ✕ | ◯ | ◯ |
関数
SharePoint | Dataverse | SQL Server | |
---|---|---|---|
CountRows | ✕ | ◯ *3 | ✕ |
CountIf | ✕ | ◯ *4 | ✕ |
EndsWith | ✕ | ✕ | ◯ |
Filter | ◯ | ◯ | ◯ *5 |
IsBlank | ✕ | △ (選択肢列は不可) | ✕ |
Len | ✕ | ✕ | ◯ |
Lookup | ◯ | ◯ | ◯ |
Search | ✕ | △ (Text型のみ) | △ (Text型のみ) |
Sort | △ (Text, Number, DateTime, Boolean型のみ) | ◯ | ◯ |
SortByColumns | (Text, Number, DateTime, Boolean型のみ) △ | ◯ | ◯ |
StartsWith | ◯ | ◯ | ◯ |
Sum | ✕ | △ *4 (Number型のみ) | △ (Number型のみ) |
Min | ✕ | △ *4 (Number型のみ) | △ (Number型のみ) |
Max | ✕ | △ *4 (Number型のみ) | △ (Number型のみ) |
Average | ✕ | △ *4 (Number型のみ) | △ (Number型のみ) |
UpdateIf | △ *6 (Number型のみ) | △ *6 (Number型のみ) | ◯ *6 |
RemoveIf | △ *6 (Number型のみ) | △ *6 (Number型のみ) | ◯ *6 |
脚注
*1 SharePointリストのID列と比較演算子
SharePointリストのID列は、Power Apps上ではNumber(数値)型として取り扱われますが、SharePointリスト内での実態はテキスト型です。
そのため、SharePointリストのID列は等価演算子(=
)しかサポートされていません。以上(>=
)や未満(<
)、非等価演算子(<>
)は機能しません。
*2 In(メンバーシップ演算子)の制限
In演算子は、接続しているデータソースの列にのみ委任が可能です。
リレーション先のテーブルに所属する列の評価は委任できず、上位2,000件しか評価対象になりません。
*3 DataverseにおけるCountRowsとCountIf関数
CountRows
関数はキャッシュされた値を使用するのに対して、CountIf
関数はキャッシュされていない値も含めて最大50,000行まで計算できます。キャッシュされていない値を含めて計算したい場合は、CountIf(table, True)
を使用します。
*4 Dataverseにおける集計関数の制限
Dataverseにおける集計関数の委任は、最大50,000行までに制限されています。
また、ビューでは集計関数がサポートされていません。
*5 オンプレミスデータゲートウェイ経由で接続したSQL Serverでの日付によるフィルター
オンプレミスデータゲートウェイ経由で接続したSQL Serverでは、Filter
関数の論理テストに日付列を直接組み込んでフィルター条件を設定することはできません。
日付でフィルターしたいときは、SQL Server側で数値型の計算列を作り、その計算列に対してフィルターをかけます。
*6 UpdateIfとRemoveIfの委任
UpdateIf
とRemoveIf
の委任を行うには、設定 > 更新 > 新規の「UpdateIfとRemoveIfの委任を有効にする」がオンになっている必要があります。2024年11月のアップデート以降に新規作成されたアプリは既定でオンになっていますが、それよりも古いアプリではオフになっている可能性があります。
また、UpdateIf
とRemoveIf
の委任はMicrosoft Learn上で「拡張委任」または「Enhanced Delegation(強化された委任)」と表現されており、他の関数の委任とは仕様が異なります。
UpdateIf
とRemoveIf
の処理は委任が有効でも無効でも、ローカル(Power Apps)上で行われます。そのため、委任が有効でも最大で2,000件までしか条件に合致するレコードを更新・削除することができません。
UpdateIf
とRemoveIf
の委任を有効にすることの変化は、
処理を全部Dataverseにお任せして、条件に合致するレコードはすべて更新・削除できる
If条件に合致するレコード数が2,000件に到達するまで、更新・削除できる
なので、ご注意ください。
たとえば、If条件に合致するレコードのうち2,000件目が上から100,000行目だったら、そのレコードまで更新・削除できます。100,001行目にIf条件に合致する2,001件目のレコードがあったとしても、そのレコードは更新・削除されません。
このあたりは文章だけで説明するのが難しいので、今度別で記事を書きたいと思っています。
まとめと感想
SharePointリストに委任できる巻数が少ないのは予想通りですが、Dataverseが一番多く委任がサポートされているかと思ったら、そういうわけでもないのが意外でした。
DataverseとSQL Serverはどっちが上とかではなく、DataverseにはあってSQL Serverにはないのもあれば、その逆もあるという、少し面白い状態ですね。
とはいえ、委任できる関数はどのデータソースでもやっぱり物足りないなという印象です。特に列を絞れるShowColumns
やカウント系のCountA
が委任できないのはやはりつらい。
委任はできなくても、もう少しローカルで扱える行数を増やしてくれませんかね。最近はモバイルデバイスの性能も上がっているので、10,000行くらい扱えてもいい気がするんですけどねぇ。
参考文献
- キャンバス アプリでの委任について – Power Apps | Microsoft Learn
- Connect to SharePoint from a canvas app – Power Apps | Microsoft Learn
- Connect to Microsoft Dataverse – Power Apps | Microsoft Learn
- Connect to SQL Server from Power Apps overview – Power Apps | Microsoft Learn
- Use enhanced delegation for UpdateIf and RemoveIf | Microsoft Learn
コメント