はじめに
Power Appsの関数は、非常にExcelと似通っており、Excelの基礎知識さえあれば、とっつきやすいところが魅力的です。
Excelの条件分岐の中でも、代表的なのがIF
関数。
IF
で条件に合致するか、しないかで値を判断できるため、シンプルで習得しやすい側面があります。
Power Apps
も、IF
関数が同様に存在し、条件分岐が再現できますが、IF
関数は関数が冗長的になり、
可能であれば避けたいところです。
関数のボリュームが大きくなってしまい、見づらいということも度々あります。
なるべく美しく関数を表現する、その自分自身の特訓もかねて、便利な関数を紹介します。
今回はCoalesce関数がテーマです。
Coalesce 関数
Coalesce 関数はその引数を順番に評価し、空白または空の文字列ではない最初の値を返します。
早い話が、If( !IsBlank({値}), {値}, {そのほかの値} )
の代替となります。
比較として、テキスト ラベル
に、
- 入力するテキスト欄が空白の場合、本日の日付
Today()
- そうではない場合、赤枠で選択された日付
DatePick.SelectedDate
という条件式を設定してみます。
比較
- If( !IsBlank(DatePick.SelectedDate), DatePick.SelectedDate, Today())
+ Coalesce( DatePick.SelectedDate, Today())
Coalesce 関数とIf 関数
の場合、関数のボリュームが抑えられ、読みやすい印象を受けます。
自分自身、If関数ゴリ押しを乱発している背景もあり、感動的な比較となりました。
値が設定されていない場合、空白を返す
Coalesce 関数の必要最低限の引数は、一つです。
画像のように、DatePick
が未選択の場合、空白
を返します。
空白
に対して、JSON関数を使用した場合
コンテキスト変数 evalJSON
という名前でJSON オブジェクト
を作成し、Power Automateで空白を評価します。
// コンテキスト変数 `evalJSON` という名前で`JSON オブジェクト`を作成
UpdateContext(
{
ReturnValue: Coalesce(DatePick.SelectedDate),
evalJSON: JSON({varDate: DatePick.SelectedDate})
}
);
// Power Automateで評価
ValueInPowerAutomate.Run(evalJSON);
JSON 関数
の結果でJSON文字列として評価された結果、null
となりました。
Power AutomateでJSON の解析
を実施した場合でも、null
と評価されます。
個人的には、うまい具合に評価してくれるという印象。
Coalesce関数における""
の取り扱い
""
ダブルクオーテーションで囲んだ空白文字列の評価は、どうなるでしょうか。
UpdateContext(
{
ReturnValue: Coalesce("")
}
);
null
のようですね。
=
で、Coalesce
関数と""の比較を行ってみます。
// 1. Coalesce関数と""の比較
UpdateContext(
{
ReturnValue: Coalesce("")
}
);
// 2. 比較演算子
UpdateContext({CompareValue:(ReturnValue="")});
// 3. 結果 falseになる
Notify(CompareValue)
CompareValue
が結果ですがfalse
となっています。
つまりCoalesce
関数の中で""
はnull
もといBlank()と同じ意味になります。
活用
null
または""
以外の値を順番に返していく、ということなので、下記のように取り扱えます。
Coalesce(
優先したい値1,
優先したい値2,
優先したい値3,
)
// 該当しない場合は空白を返す
上から順番にコントロールを並べると
Coalesce(
DatePick1.SelectedDate,
DatePick2.SelectedDate,
DatePick3.SelectedDate,
DatePick4.SelectedDate,
DatePick5.SelectedDate
)
最初の空白でない値を表示します。
もちろんコントロール以外の値も使えるので、IsBlank
との比較とはサヨナラできる!ということです。
- If(
- !IsBlank(DatePick1.SelectedDate), DatePick1.SelectedDate,
- !IsBlank(DatePick2.SelectedDate), DatePick2.SelectedDate,
- !IsBlank(DatePick3.SelectedDate), DatePick3.SelectedDate,
- !IsBlank(DatePick4.SelectedDate), DatePick4.SelectedDate,
- !IsBlank(DatePick5.SelectedDate), DatePick5.SelectedDate,
- Blank()
- )
+ Coalesce(
+ DatePick1.SelectedDate,
+ DatePick2.SelectedDate,
+ DatePick3.SelectedDate,
+ DatePick4.SelectedDate,
+ DatePick5.SelectedDate
+ )
文章量が全然違う!リーダブル!
終わりに
Qiita記事投稿キャンペーンということで、ライトなところからサクっといってみました。
改めて自分のナレッジの棚卸!ということで書いていきたいと思います。
今後ともお楽しみに!