Power Appsのin演算子について改めて詳しく調べたので、メモ。
in演算子
Power Fxにおける『in』は、指定した値がテキストやコレクション(配列やテーブル)の中に存在するかどうかを確認する演算子。
式の結果は true または false を返す。
ということで、早速使い方を見ていく。
in演算子の基本的な使い方
前述の通り、inは「テキスト」「配列」「テーブル」に使うことができる。
テキスト
テキストに対しinを使うと、文字列の部分一致チェックができる。
最初に指定した文字列が、次に指定した文字列が含まれていれば true、
含まれていなければfalseを返す。
"pow" in "Power Apps" // true "wop" in "Power Apps" // false "" in "Power Apps" // true // ※空文字は全文字列に含まれているものとみなされる。
配列
配列に対しinを使用すると、指定の要素が配列に含まれるかをチェックしてくれる。
※Power Appsでは「配列」もValue列を持つ「テーブル」として扱えるので、以下もtrue。
あくまで「指定の要素が配列に含まれるか」のチェックなので、文字列の部分一致チェックとは異なり、以下はfalse。
「”a”が含まれている要素があるか?」を見たいときとかはこんな感じになるかと。
"aaa" in ["aaa", "bbb", "ccc"] // true "AAA" in ["aaa", "bbb", "ccc"] // true "a" in ["aaa", "bbb", "ccc"] // false {Value:"aaa"} in ["aaa", "bbb", "ccc"] // true
テーブル(コレクション含む)
以下のテーブルにinを試してみる。
ClearCollect( colSample, {text:"aaa", num:0}, {text:"bbb", num:1}, {text:"ccc", num:2} )
こちらも「要素」の検索になり、そもそもスキーマ(含まれている列)が異なもの同士で比較するとエラーが発生する。
そのためinで要素チェックを行うときはスキーマを合わせる必要がある。
当然だけど列の値が1つでも異なるとfalseが返る。
"aaa" in colSample // Error {text:"aaa"} in colSample // Error {text:"aaa", num:0} in colSample // true {text:"AAA", num:0} in colSample // false {text:"aaa", num:1} in colSample // false {} in colSample // false
inとexactinとの違い
inとexactinの違いは、大文字小文字の違いを許容するか。
exactinだと大文字と小文字が違う場合はfalseになる。
"pow" in "Power Apps" // true "pow" exactin "Power Apps" // false "Pow" exactin "Power Apps" // true "" exactin "Power Apps" // true
ちなみにinは配列の検索も大文字小文字を加味しない。
"AAA" in ["aaa", "bbb", "ccc"] // true "AAA" exactin ["aaa", "bbb", "ccc"] // false
Filterとの併用
in演算子はFilter関数とよく一緒に使われるので、その動作についても紹介。
例として、以下のコレクションにin演算子でFilterをかけてみる。
ClearCollect( colSample, {text1:"aaa", text2:"xxx", num:0}, {text1:"abc", text2:"xyz",num:1}, {text1:"bbb", text2:"yyy",num:1}, {text1:"bca", text2:"yzx",num:2}, {text1:"ccc", text2:"zzz",num:3} )
inをFilter関数の第二引数に使うと、テキスト型の列への部分一致検索ができる。
また、inの左側にテーブルの列を持ってくることで、「その列にいずれかの値が含まれている」行の抽出も可能。
複数の列を検索対象にしたい場合は、このような式になる。
※たまにinを1つにするために以下のような書き方をしているソースを見るけど、
(ユースケース的にあまり起きえないと思うけど)これだと誤検知が起きる。
委任について
最後は委任について。委任できるか否かはデータソースによって異なる。
SharePoint
SharePointはinの委任はできないので、レコード数が限られているマスタとかにのみ使うことを推奨。
Dataverse
Dataverseはinの委任が可能で、
左辺と右辺を逆にしても大丈夫。
ただ、Dataverseもexactinは委任できないので注意。
コメント