LoginSignup
5
3

はじめに

Power Appsの関数は、非常にExcelと似通っており、Excelの基礎知識さえあれば、とっつきやすいところが魅力的です。
Excelの条件分岐の中でも、代表的なのがIF関数。

IFで条件に合致するか、しないかで値を判断できるため、シンプルで習得しやすい側面があります。
Power Appsも、IF関数が同様に存在し、条件分岐が再現できますが、IF関数は関数が冗長的になり、
可能であれば避けたいところです。

関数のボリュームが大きくなってしまい、見づらいということも度々あります。
なるべく美しく関数を表現する、その自分自身の特訓もかねて、便利な関数を紹介します。

今回はCoalesce関数がテーマです。

Coalesce 関数

Coalesce 関数はその引数を順番に評価し、空白または空の文字列ではない最初の値を返します。

Microsoft Learnより

早い話が、If( !IsBlank({値}), {値}, {そのほかの値} )の代替となります。

比較として、テキスト ラベルに、

  1. 入力するテキスト欄が空白の場合、本日の日付 Today()
  2. そうではない場合、赤枠で選択された日付 DatePick.SelectedDate

という条件式を設定してみます。

image.png

比較

OnSelect
- If( !IsBlank(DatePick.SelectedDate), DatePick.SelectedDate, Today())
+ Coalesce( DatePick.SelectedDate, Today())

Coalesce 関数If 関数の場合、関数のボリュームが抑えられ、読みやすい印象を受けます。

自分自身、If関数ゴリ押しを乱発している背景もあり、感動的な比較となりました。

値が設定されていない場合、空白を返す

Coalesce 関数の必要最低限の引数は、一つです。

image.png

画像のように、DatePickが未選択の場合、空白を返します。

空白に対して、JSON関数を使用した場合

コンテキスト変数 evalJSON という名前でJSON オブジェクトを作成し、Power Automateで空白を評価します。

OnSelect
// コンテキスト変数 `evalJSON` という名前で`JSON オブジェクト`を作成
UpdateContext(
    {
        ReturnValue: Coalesce(DatePick.SelectedDate),
        evalJSON: JSON({varDate: DatePick.SelectedDate})
    }
);

// Power Automateで評価
ValueInPowerAutomate.Run(evalJSON);

JSON 関数の結果でJSON文字列として評価された結果、nullとなりました。

image.png

Power AutomateでJSON の解析を実施した場合でも、nullと評価されます。

image.png

個人的には、うまい具合に評価してくれるという印象。

Coalesce関数における""の取り扱い

""ダブルクオーテーションで囲んだ空白文字列の評価は、どうなるでしょうか。

OnSelect
UpdateContext(
    {
        ReturnValue: Coalesce("")
    }
);

image.png

nullのようですね。
=で、Coalesce関数と""の比較を行ってみます。

OnSelect
// 1. Coalesce関数と""の比較
UpdateContext(
    {
        ReturnValue: Coalesce("")
    }
);
// 2. 比較演算子
UpdateContext({CompareValue:(ReturnValue="")});

// 3. 結果 falseになる
Notify(CompareValue)

image.png

CompareValueが結果ですがfalseとなっています。
つまりCoalesce関数の中で""nullもといBlank()と同じ意味になります。

活用

nullまたは""以外の値を順番に返していく、ということなので、下記のように取り扱えます。

Coalesce(
    優先したい値1,
    優先したい値2,
    優先したい値3,  
)
// 該当しない場合は空白を返す

image.png

上から順番にコントロールを並べると

Text
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記事投稿キャンペーンということで、ライトなところからサクっといってみました。

改めて自分のナレッジの棚卸!ということで書いていきたいと思います。
今後ともお楽しみに!

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3