のいのログ

Power Appsで委任可能な関数まとめ

Power Appsからデータベースへ処理を委任できる関数は、データベースごとに異なります。

SharePointリストに対する委任の話は色々な情報が出ていますが、Power Apps全体としての委任可能な関数があまりまとまっていない気がしたので、SharePointリスト・Dataverse・SQL Serverで委任可能な関数を表でまとめてみました。

目次(クリックでジャンプできます)

委任可能な演算子・関数一覧

データ型による制限は表内に記載し、その他特筆すべき事項は脚注で記載しています。

なお、以下の表に記載のない演算子・関数はすべて委任不可です。

基本的にはMicrosoft Learnより抜粋しています。
誤りや抜けがありましたら、コメント欄でご指摘いただけると嬉しいです!

演算子

SharePointDataverseSQL Server
<, <=, >, >=
(比較演算子)

(Number, DateTime型のみ)*1

(Number, DateTime型のみ)
=
(等価演算子)
<>
(非等価演算子)

(Number, DateTime型のみ)*1
*, +, -, /
(算術演算子)

(Number型のみ)
And (&&)
Or (||)
Not (!)
In (メンバーシップ)◯ *2
In (部分文字列)

関数

SharePointDataverseSQL 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の委任

UpdateIfRemoveIfの委任を行うには、設定 > 更新 > 新規の「UpdateIfとRemoveIfの委任を有効にする」がオンになっている必要があります。2024年11月のアップデート以降に新規作成されたアプリは既定でオンになっていますが、それよりも古いアプリではオフになっている可能性があります。

また、UpdateIfRemoveIfの委任はMicrosoft Learn上で「拡張委任」または「Enhanced Delegation(強化された委任)」と表現されており、他の関数の委任とは仕様が異なります。

UpdateIfRemoveIfの処理は委任が有効でも無効でも、ローカル(Power Apps)上で行われます。そのため、委任が有効でも最大で2,000件までしか条件に合致するレコードを更新・削除することができません。

UpdateIfRemoveIfの委任を有効にすることの変化は、

処理を全部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行くらい扱えてもいい気がするんですけどねぇ。

参考文献

シェアしていただけると嬉しいです!
  • URLをコピーしました!

この記事を書いた人

ローコード・RPAエンジニア。DX・業務効率化を専門に開発。

前職では鉄道運転士として働きながら、社内複業でSwift・Power Platformで業務効率化を推進していた。

応援する

コメント

コメントする

CAPTCHA


目次(クリックでジャンプできます)