Power Automate 2022年9月に追加された強力な新関数の紹介

# 概要

2022年9月に、PowerAutomateへ以下の関数が追加されました。

* sort
* reverse
* chunk
* isInt
* isFloat
* dateDifference

紹介の Power Automate ブログは以下

https://powerautomate.microsoft.com/ja-jp/blog/announcing-deeper-sap-integration-for-the-power-platform/


私は [Hiroさんのツィート](https://twitter.com/mofumofu_dance)で知りました。いつもありがとうございます！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">まじかーーーーーーーーー！！！！！<br>Power Automateにsort機能追加されたのかーーーーーー</p>&mdash; Hiro (@mofumofu_dance) <a href="https://twitter.com/mofumofu_dance/status/1570791000498638861?ref_src=twsrc%5Etfw">September 16, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Hiroさんもヤバいとおっしゃってますが、これらの関数は現在の Power Automate において、**とても強力なのです！**
その革新的な機能を紹介できればと思います。


# sort()

配列の構造を持つ、コレクション内のアイテムを昇順（asc）に並べ替えることができます。ソートキーとしてカラムを指定可能です。
ソートの対象は Array （[ ]で囲まれたコレクション）である必要があります。
降順（desc）に並べる場合は、後述の reverse() 関数と組み合わせてください。

リファレンスはこちら

https://learn.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#sort

sort関数が無かった時代、処理速度の遅いループ処理を使わずに、コレクションをソートするには一工夫する必要がありました。


https://qiita.com/h-nagao/items/765826be914fbf08bd02

関数一つで手軽にソート機能を利用できるようになったのはとても便利です。
**ただし、上記blogの手段は、独自のソートキーを利用したソートを実施するには有効な手法です。**
（たとえば、アルファベット⇒数字の順に並べる）


## － 配列のソート

単一な配列へのソートは、第一パラメータのみ指定します


```
sort([<collection>])
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/d9eea61e-6ef3-a12e-db48-772a2076beed.png)

## － テーブルのソート

カラムを持つ配列に対しては、ソートフィールドとしてカラムを指定する必要があります。

```
sort([<collection>], <sortBy>?)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/eae0ec81-ab62-8da5-fc9a-4e03a7252b2a.png)

:::note warn
第２パラメータのソートフィールドに複数のカラムを指定することは、現在のところ不可能なようです。
もし、指定方法をご存じでしたら教えてください。

例）　`sort(outputs('table'),'col1','col2')`　はエラーとなります
:::



# reverse()

コレクション内の項目の順序を逆にします。

https://learn.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#reverse

```
reverse([<collection>])
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/78c3fb53-444f-8457-7839-e2be1f803e52.png)


sort() と組み合わせると、コレクションを降順（desc）にソートできます。

```
reverse(sort([<collection>]))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/a91577c2-4d92-3ddf-00bd-0e27d47d7026.png)



# chunk()

文字列または配列を同じ長さのチャンクに分割します。

https://learn.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference#chunk



## － 文字列のチャンク
文字列をチャンクすると、第２パラメータで指定した長さ毎に、単一な配列が返ります。

```
chunk('<collection>', '<length>')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/fcca700b-f993-9d48-bc72-1f18e8384dff.png)



## － 配列のチャンク
配列をチャンクすると、指定した長さ毎に要素を分割した配列が返ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/95cc9b6b-ee37-89fb-6c76-f23fea89a953.png)

```
chunk('[collection]', '<length>')
```

## － テーブルのチャンク

当然、テーブル構造を持つコレクションのチャンクも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/30bfdbbc-6289-9318-e612-cea4fad3f949.png)

## － チャンクの活用方法

使いどころとしては、文字列を1文字ずつに分割する等、が思いつきます。
[選択]アクション + range() + substring() が必要だった処理を、関数一つで実現できるようになるのは便利ですね。

https://qiita.com/h-nagao/items/e0153b9a2c700cc2c95e

上記のソートもですが、こういうロジックを考え公開してくださるHiroさんには感謝しかありません。

# isInt()

文字列が整数かどうかを示すブール値を返します。引数は文字列型である必要があります。

```
isInt('<string>')
```

# isFloat()

文字列が浮動小数点数であるかどうかを示すブール値を返します。第１引数は文字列型である必要があります。

不変カルチャを使用したチェックの場合は、第２パラメータの指定は不要です。

```
isFloat('<string>')
```

ロケール固有の形式で表される浮動小数点数を識別するには、オプションで第２引数に RFC4646ロケール・コード を指定するとのことです。

```
isFloat('<string>', '<locale>'?)
```



# dateDifference()

こちらも待望の関数ですね。

2 つのタイムスタンプの差をタイムスパンとして返します。
endDateからstartDateを減算し、結果を文字列形式でタイムスタンプとして返します。
日付の形式は、ISO 8601 に準拠していれば、正常に動作することを私の環境で確認しています。

```
dateDifference('<startDate>', '<endDate>')
```

日付の比較を行うと、差分の日数が返ります。
startDate が　endDate より未来の場合、マイナス値が返ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/45ed2f59-622e-04bf-223d-f173b12c9738.png)


また、戻り値のフォーマットでお気づきだと思いますが、時間の計算も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/75fed341-7b06-5ed2-8d6b-6845611a09da.png)


:::note warn
時間の計算は、リファレンスに記載がない（2022/09/25）機能のため、自己責任でご利用ください
:::


# まとめ

待望の、非常に利便性の高い、強力な関数が追加されました。
Power Automate の利用が捗りますね！