こんにちは、あんこ先生です。
PowerAppsで欠かせない関数のひとつ、LookUp関数を正しく使えていますか?
たとえば、単価に個数をかける際、2つのLookUp関数を使ってそれぞれの項目を抽出していませんか?
わたしがそうでした!
たとえば、複数条件で絞り込みたいとき、わざわざFilterしたテーブルを指定していませんか?
はい、わたしがそうでした!
そこで、今回は「うまく条件抽出できない」、「ラベルに表示できない」といった初心者の方を対象に、LookUp関数の正しい使い方を解説します。
この記事を読めば、LookUp関数は思いのままですよ。
LookUp関数の概要
LookUp関数は、指定したテーブルで条件式を満たすレコードの内、最初の1件を返します。
条件を満たすレコードが2件以上あっても、それらは無視されます。
LookUp(テーブル, 条件式 [, 内部計算式 ] )
テーブル│必須
検索対象となるテーブル型を指定します。
通常、SharePointリストやコレクションを指定します。
テーブル型であれば、ギャラリーのAllItemsやSplit関数の戻り値、各種コネクタで使用されるassignmentsなども可能です。
さらに、Sort関数で並び替えたものやGroupBy関数・AddColumns関数で加工したテーブルも直接指定できます。
条件式│必須
指定したテーブルの各レコードを評価するための数式です。
結果が true となる最初のレコードを返します。
Filter関数と異なり、数式はカンマで区切ることができません。
詳細は後述しますが、複数条件で絞り込むにはAnd関数などを用いて括弧で囲みます。
内部計算式│省略可
返された単一レコードに対して評価し、その結果を返します。
レコードに含まれるすべての項目を参照できます。
例えば、単価と個数をかけて売上を算出できます。
もちろん、他テーブルと比較することも可能です。
このパラメーターを省略した場合、単一レコードを返します。
条件を満たさなかった場合
条件を満たすレコードがなかった場合は、空を返します。
戻り値が空か判定するには、IsBlank関数で調べます。
テーブルではないので、IsEmpty関数では判定できません。
注意事項
LookUp関数のみでは、条件を満たすレコードが何件あったかはわかりません。
それを知りたい場合は、Filter関数やCountRows関数も使って調べましょう。
Filter関数との違い
LookUp関数は、条件を満たした最初の1レコードを参照します。
Filter関数は、条件を満たしたすべてのレコードをまとめたテーブルを返します。
LookUp関数の正しい使い方
LookUp関数は、記述内容によって戻り値が大きく異なります。
用途にあった記述をしないと、意図したデータを取得できないので注意が必要です。
LookUp関数の戻り値は大きく分けて次の3つがあります。
- 1行レコード
- フィールド値
- 抽出したレコードを基に算出した値
①以外はラベルやテキスト入力に表示させることができます。
それでは、それぞれの特長を見ていきましょう。
1行レコード
LookUp(テーブル, 条件式)
条件式のあとにカッコを閉じることでレコードを返します。
ギャラリーやフォームのアイテムとして使用する、レコードの有無を確認するといった用途で使います。
たとえば、次のような使い方ができます。
フィールド値
LookUp(テーブル, 条件式).項目名
カッコで閉じた後、項目名を指定すればそのフィールド値を返します。
テキストや数などを表示する、他テーブルと比較する値を取得するといった用途で使います。
たとえば、次のような使い方ができます。
▪5月1日のいちご出荷量はいくつか調べる。
▪商品マスターから商品名を抜き取るための商品コードを取得する。
抽出したレコードを基に算出した値
LookUp(テーブル, 条件式, 計算式)
条件式のあとに計算式を加えることでその結果を返します。
レコード内の複数項目の値を使って計算結果を表示する、値をつなげるといった用途で使います。
たとえば、次のような使い方ができます。
▪単価と出荷数をかけて売上を求める。
▪各項目の文字を連結する。 “5月1日にいちごを5個出荷した”
記述次第で戻り値が大きく変わります。
用途にあった正しい使い分けをしましょう。
ラベルに結果を表示させる際の注意事項
図のようにラベルはテーブルまたはレコードを表示できません。
LookUp関数の場合は、最後に項目名を加えるか、第3パラメータで内部計算した結果を指定します。
LookUp関数のスコープについて
括弧を閉じるまで自身を参照
LookUp関数は、カッコを閉じるまでThisRecordは条件を満たした最初のレコードを参照します。
入れ子の場合は注意
下図のようにFilter関数で入れ子とした場合は、扱いに注意が必要です。
特に同じ名前の項目があると混乱しますので、ThisRecordかAs関数で曖昧性を解消しましょう。
演算子の不思議、<=は通るけど=>はダメ。
以上以下の演算子は<>を先に記述しましょう。
LookUp関数の活用事例
複数条件で絞り込む
第2パラメータに記述する条件式は、Filter関数と異なりカンマでつなげることができません。
そのため、AndやOr演算子を利用してカンマで区切らず記述します。
この方法なら、月初から月末までといった範囲指定や、商品と個数といった条件で抽出できます。
//Dateが5/1-5/31である最初のレコードを返す
LookUp(出荷テーブル,And(Date>=Date(2022.5.1),Date<=Date(2022.5.31))
//Nameがいちごで、Valueが5以上である最初のレコードを返す
LookUp(出荷テーブル,And(Name="いちご",Value>=5))
//Nameがいちごかみかんである最初のレコードを返す
LookUp(出荷テーブル,Or(Name="いちご",Name="みかん"))
LookUp関数は複数条件に対応していないと勘違いし、わざわざFilterしたテーブルを使ってLookUpしてました。
例外として、Today関数やNow関数を含めた複数条件の場合、AndやOr演算子で囲むと委任警告が表示されます。
これを回避するためには、Andは&&、Orは||に代替します。
文字をつなげる
第3パラメータを使えば、抽出したレコードの文字を繋げることができます。
たとえば、図のテーブルから「●●の人口は▲▲万人で、男性比率■%です」といった文章を作るとします。
次のように項目名や文字を&で繋げていけば実現できます。
LookUp(統計テーブル,都道府県="岩手県"
,都道府県&"の人口は"&総人口&"万人で、男性比率は"&総人口(男)/総人口&"%です")
Ifで条件分岐した場合、分岐後のデータ型が異なるとちょっとめんどいです。
具体的にはtrueが数値10を返し、falseがテキスト-を返すよう記述すると後者は表示されません。
この場合、true側の数式をText関数で囲めば回避できます。
LookUp関数の正しい使い方のまとめ
今回はLookUp関数の正しい使い方を解説しました。
戻り値が異なるので用途に合わせた使い分けが必要でしたね。
LookUp関数は最初の1レコードしか抽出しないため、あらかじめFilter関数やSort関数で調整しておくと狙いが定まりやすいです。
何かと利用することが多い関数なので、ぜひマスターしてください。
▪最新取引の内容をフォームに展開する。
▪5月1日にいちごの出荷はあったか調べる。