はじめに
Power Platform推進チームの小野です。
Power Automateの式では、計算の演算子である+
-
*
/
が使えません。
四則演算の関数を使って計算する必要があります。
この四則演算の関数をすぐに忘れてしまうので、備忘録としておさらいします。
四則演算の関数
足し算(和):add
足し算はシンプルです。引数の順番も関係ありません。
add(7, 3)
→ 10
additionの省略形ですが、動詞「追加する」のaddと同じなのでわかりやすいです。
引き算(差):sub
引き算は、引かれる数を第1引数、引く数を第2引数に入れます。
「引」の字が多すぎてチカチカしますが、通常の式と同じ順番で書けばOKです。
sub(7, 3)
→ 4
引き算は英語でsubtractionだそうです。
掛け算(積):mul
掛け算も、足し算と同じく、引数の順番は関係ありません。
mul(7, 3)
→ 21
マルチ・multiplication(掛け算)のmulです。
割り算(商):div
割り算は、割られる数を第1引数、割る数を第2引数に入れます。
引き算と同じく、通常の式と同じ順番です。
mul(7, 3)
→ 2
割り算は、division。
割り算の余り:mod
割り算と同じで、割られる数を第1引数、割る数を第2引数に入れます。
mod(7, 3)
→ 1
割り算の余りを求める計算のことをmodulo、割り算の余り自体をreminderと言うそうです。
プログラミング言語に明るい方にとっては、modはおなじみかもしれません。
TIPS
結果を小数で出力したい場合
整数同士で割り算をした場合、結果は整数(小数点以下切り捨て)で返されます。
div(10, 4)
→ 2
( 2.5
にはならない)
どちらかの引数を小数にすると、小数点以下まで計算するようになります。
div(10.0, 4)
→ 2.5
div(10, 4.0)
→ 2.5
なお、小数を含んだ計算結果を変数に格納する場合、事前に変数をFloat型にしておく必要があります。
Power Automateには、データ型を自動で調整してくれる機能はないのでご注意を。
引数は2個のみ
この記事で紹介した5つの関数については、引数は2個しか指定できません。
3つ以上の数を足し算したい場合などは、add関数をネストする必要があります。
add(7, 3, 2)
→ Error
add(add(7, 3), 2)
→ 12
変数の足し算・引き算は、専用のアクションがある
変数の値を増やす・変数の値を減らすアクションが用意されています。
add・subすら使わないノーコード路線の場合は、こちらのアクションを活用してもよいでしょう。
例:台形の面積を求めてみる
台形の面積を求める計算式 (上底+下底)×高さ÷2を、Power Automateで実装してみましょう。
フロー実行時にユーザーに上底・下底・高さを入力させ、変数に格納しています。
- 上底:varTopSide
- 下底:varBottomSide
- 高さ:varHeight
各変数を、台形の面積の求め方の公式に入れ込んでいきます。
(varTopSide+varBottomSide)×varHeight÷2
そして、各演算子をPower Automateの関数で置き換えれば完成。
div(mul(add(variables('varTopSide'), variables('varBottomSide')), variables('varHeight')), 2.0)
演算子にあたる関数が前方に来る(前置記法)ところが、算数の計算式と違うところですね。
variables~のところがコードを書いている風ですが、実際には変数のリストから選択するだけです。
また、varAnswerをFloat型にして、最後の割り算を2
ではなく2.0
とすることで、
計算結果が小数になっても表示できるようにしています。
なお、変数に格納せずにトリガーから値を直接参照することもできます。
ただし、その場合はtriggerBody()['number']
, triggerBody()['number_1']
, triggerBody()['number_2']
という感じで、何がどの値を示しているかがわかりにくくなるデメリットがあります。
おわりに
複雑な計算はPower Appsにやらせるのが賢明です。
Power Automateは、なるべく計算されたあとの数字を受け取るだけにしてあげましょう。ツールも適材適所。
ちなみに、Power Automateには累乗の関数がないようです。
「2の5乗」とかができず、ネットワークエンジニアとしては困りどころ。
ということで、Power Automateで「2のn乗」を行う方法については別の記事で書こうと思います。
↓書きました。