SharePointリストでin演算子を使用して配列で検索を行うと、以下のように委任警告が表示されます。
以下の記事でFirst(N),Last(N)を用いて配列の要素数が有限個の委任警告回避複数条件検索の方法を紹介しましたが、配列の要素が有限でない場合でも複数条件検索する方法を紹介します。
小手先のテクニックでしかないので、パフォーマンスに懸念があることや運用に向かない実装方法であることに十分留意してください。
この記事は、Power Apps Advent Calendar 2023 12月1日担当分の記事です。
数式
数式
Ungroup(
AddColumns(
[29999, 40987, 217] As R,
"Items",
Filter(パフォーマンステストList,ID = R.Value)
),
"Items"
)
10万行以上あるパフォーマンステストListを、ID列でOr検索(ID=29999, 40987, 217)しています。
inでの検索だとこのようにデータ行の制限以下である、IDが2000以下の217しか取得できません。
仕組み
一言で説明すると、ID列にAddColumns関数でFilter関数の結果を格納する列を追加し、Ungroup関数でその中身を行方向に展開しています。
表にするとこういうことです。わかりやすい。
使用例
使用例と合わせて委任などの注意点を説明します。
単一行取得の委任警告回避
上記の例のように、IDなどの一意の列での配列による検索時の委任警告を回避することができます。
またSharePointリストで擬似的なリレーションを組む際にも使えそうです。
親リストに,区切りで子側のIDを,区切りで格納し、リストから値を取得する際に以下のような数式で展開することで擬似的にリレーションを再現できます。
複数行取得の委任上限緩和(非推奨)
一意の値でなくても、Filter関数の検索結果が2000件(データ行の制限、画像では500に設定)までは値を取得できます。
AddColumns関数は委任することができませんが、画面上に委任警告が表示されません。
そのためこの数式ではデータ行の制限で設定した行数より多い行数を返すことができません。
in演算子を使用するとデータ行の制限内で検索するため、下記の画像では件数の合計が500以下になっています。
Filter関数の結果がデータ行の制限で設定した行数以下となる場合にしか正しく結果を取得できないので、非推奨です。
Power Automateへ入出力する値の単純化
Power Automateとテーブル型の情報をやり取りする際はJSON形式の文字列で渡すなどの工夫が必要ですが、この手法が利用できる場合はIDの文字列のみやり取りする方が簡単で処理も早いです。
さいごに
繰り返しになりますが、この方法は小手先のテクニックなので使用する際はパフォーマンスや得られる結果には十分注意してください。
またお気づきの方もいらっしゃるかもしれませんが、ギャラリーのItemsにIDを配列で設定し、LookUp関数とThisItemで値を取得するのと原理は同じです。
コメント