やはりデータ操作は「選択」、選択は全てを圧倒する インデックス列の追加 - Power Automate

# インデックス列の追加
`インデックス列`が欲しい！
超絶美少女のアイコンへ神絵師により転生した私はこのように叫びます。

`配列`データを取り扱っていると、「やっぱインデックス列ないと不便だな」と度々感じます。`Power Automate`の対応策を考えました。

:::note info
結論は[選択(Select)](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)の圧勝です。
:::

https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action

[以前の検証はこちら](https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7)

https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7

# アプローチの仕方
今回は[国勢調査 / 時系列データ / 男女，年齢，配偶関係 - 東京都 - 令和2年](https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200521&tstat=000001011777&cycle=0&tclass1=000001011778&stat_infid=000001085987&result_page=1&tclass2val=0)のデータで試します。

64件のデータです。

<details><summary>長いサンプルのJSONはこちらから</summary>

```json
[
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "東京都",
        "Column4": 14047594,
        "Column5": 1566840,
        "Column6": 8944193,
        "Column7": 3107822
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "特別区部",
        "Column4": 9733276,
        "Column5": 1059831,
        "Column6": 6326082,
        "Column7": 2028506
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "千代田区",
        "Column4": 66680,
        "Column5": 8976,
        "Column6": 46517,
        "Column7": 10852
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "中央区",
        "Column4": 169179,
        "Column5": 23086,
        "Column6": 121217,
        "Column7": 24683
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "港区",
        "Column4": 260486,
        "Column5": 34714,
        "Column6": 174886,
        "Column7": 42546
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "新宿区",
        "Column4": 349385,
        "Column5": 29202,
        "Column6": 223593,
        "Column7": 63185
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "文京区",
        "Column4": 240069,
        "Column5": 28065,
        "Column6": 152818,
        "Column7": 42020
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "台東区",
        "Column4": 211444,
        "Column5": 18648,
        "Column6": 142955,
        "Column7": 47510
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "墨田区",
        "Column4": 272085,
        "Column5": 28028,
        "Column6": 183630,
        "Column7": 60108
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "江東区",
        "Column4": 524310,
        "Column5": 66472,
        "Column6": 341716,
        "Column7": 110002
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "品川区",
        "Column4": 422488,
        "Column5": 47036,
        "Column6": 272685,
        "Column7": 79532
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "目黒区",
        "Column4": 288088,
        "Column5": 31547,
        "Column6": 196916,
        "Column7": 55811
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "大田区",
        "Column4": 748081,
        "Column5": 77231,
        "Column6": 475656,
        "Column7": 161855
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "世田谷区",
        "Column4": 943664,
        "Column5": 108940,
        "Column6": 638629,
        "Column7": 190042
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "渋谷区",
        "Column4": 243883,
        "Column5": 22984,
        "Column6": 154258,
        "Column7": 41261
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "中野区",
        "Column4": 344880,
        "Column5": 29123,
        "Column6": 231515,
        "Column7": 65878
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "杉並区",
        "Column4": 591108,
        "Column5": 58944,
        "Column6": 380639,
        "Column7": 117072
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "豊島区",
        "Column4": 301599,
        "Column5": 26489,
        "Column6": 211034,
        "Column7": 58539
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "北区",
        "Column4": 355213,
        "Column5": 36527,
        "Column6": 229948,
        "Column7": 87381
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "荒川区",
        "Column4": 217475,
        "Column5": 24470,
        "Column6": 141156,
        "Column7": 50411
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "板橋区",
        "Column4": 584483,
        "Column5": 60014,
        "Column6": 367976,
        "Column7": 132602
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "練馬区",
        "Column4": 752608,
        "Column5": 85920,
        "Column6": 478648,
        "Column7": 159298
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "足立区",
        "Column4": 695043,
        "Column5": 75589,
        "Column6": 424335,
        "Column7": 170261
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "葛飾区",
        "Column4": 453093,
        "Column5": 51556,
        "Column6": 285968,
        "Column7": 111893
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "江戸川区",
        "Column4": 697932,
        "Column5": 86270,
        "Column6": 449387,
        "Column7": 145764
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "八王子市",
        "Column4": 579355,
        "Column5": 62867,
        "Column6": 344893,
        "Column7": 153504
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "立川市",
        "Column4": 183581,
        "Column5": 21828,
        "Column6": 115971,
        "Column7": 45524
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "武蔵野市",
        "Column4": 150149,
        "Column5": 17232,
        "Column6": 95301,
        "Column7": 31725
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "三鷹市",
        "Column4": 195391,
        "Column5": 23468,
        "Column6": 123039,
        "Column7": 41623
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "青梅市",
        "Column4": 133535,
        "Column5": 13763,
        "Column6": 76704,
        "Column7": 42492
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "府中市",
        "Column4": 262790,
        "Column5": 32986,
        "Column6": 165586,
        "Column7": 56764
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "昭島市",
        "Column4": 113949,
        "Column5": 13780,
        "Column6": 68947,
        "Column7": 30003
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "調布市",
        "Column4": 242614,
        "Column5": 28754,
        "Column6": 153175,
        "Column7": 50414
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "町田市",
        "Column4": 431079,
        "Column5": 51174,
        "Column6": 253130,
        "Column7": 116470
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "小金井市",
        "Column4": 126074,
        "Column5": 14879,
        "Column6": 80498,
        "Column7": 25591
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "小平市",
        "Column4": 198739,
        "Column5": 25072,
        "Column6": 121648,
        "Column7": 45060
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "日野市",
        "Column4": 190435,
        "Column5": 22894,
        "Column6": 115015,
        "Column7": 45652
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "東村山市",
        "Column4": 151815,
        "Column5": 17720,
        "Column6": 90285,
        "Column7": 40749
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "国分寺市",
        "Column4": 129242,
        "Column5": 15082,
        "Column6": 81431,
        "Column7": 27184
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "国立市",
        "Column4": 77130,
        "Column5": 8448,
        "Column6": 48511,
        "Column7": 17748
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "福生市",
        "Column4": 56414,
        "Column5": 5692,
        "Column6": 34800,
        "Column7": 15153
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "狛江市",
        "Column4": 84772,
        "Column5": 9736,
        "Column6": 52699,
        "Column7": 19961
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "東大和市",
        "Column4": 83901,
        "Column5": 10661,
        "Column6": 50007,
        "Column7": 22923
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "清瀬市",
        "Column4": 76208,
        "Column5": 8710,
        "Column6": 44106,
        "Column7": 21482
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "東久留米市",
        "Column4": 115271,
        "Column5": 13735,
        "Column6": 67397,
        "Column7": 32745
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "武蔵村山市",
        "Column4": 70829,
        "Column5": 9375,
        "Column6": 41663,
        "Column7": 18847
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "多摩市",
        "Column4": 146951,
        "Column5": 16577,
        "Column6": 87607,
        "Column7": 42582
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "稲城市",
        "Column4": 93151,
        "Column5": 13130,
        "Column6": 58186,
        "Column7": 20087
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "羽村市",
        "Column4": 54326,
        "Column5": 6531,
        "Column6": 32849,
        "Column7": 14728
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "あきる野市",
        "Column4": 79292,
        "Column5": 9235,
        "Column6": 43149,
        "Column7": 23792
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "西東京市",
        "Column4": 207388,
        "Column5": 24707,
        "Column6": 128947,
        "Column7": 48446
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "瑞穂町",
        "Column4": 31765,
        "Column5": 3443,
        "Column6": 18609,
        "Column7": 9517
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "日の出町",
        "Column4": 16958,
        "Column5": 2235,
        "Column6": 8095,
        "Column7": 6538
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "檜原村",
        "Column4": 2003,
        "Column5": 131,
        "Column6": 806,
        "Column7": 1058
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "奥多摩町",
        "Column4": 4750,
        "Column5": 337,
        "Column6": 1998,
        "Column7": 2410
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "大島町",
        "Column4": 7102,
        "Column5": 710,
        "Column6": 3679,
        "Column7": 2713
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "利島村",
        "Column4": 327,
        "Column5": 50,
        "Column6": 197,
        "Column7": 80
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "新島村",
        "Column4": 2441,
        "Column5": 272,
        "Column6": 1202,
        "Column7": 967
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "神津島村",
        "Column4": 1855,
        "Column5": 274,
        "Column6": 994,
        "Column7": 587
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "三宅村",
        "Column4": 2273,
        "Column5": 225,
        "Column6": 1151,
        "Column7": 894
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "御蔵島村",
        "Column4": 323,
        "Column5": 60,
        "Column6": 205,
        "Column7": 58
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "八丈町",
        "Column4": 7042,
        "Column5": 799,
        "Column6": 3415,
        "Column7": 2801
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "青ヶ島村",
        "Column4": 169,
        "Column5": 21,
        "Column6": 117,
        "Column7": 31
    },
    {
        "Column1": "2020年",
        "Column2": "令和2年",
        "Column3": "小笠原村",
        "Column4": 2929,
        "Column5": 416,
        "Column6": 2099,
        "Column7": 413
    }
]
```

</details>

1. [Apply to each（現: それぞれに適用する）](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#range)
1. `Do until`
1. [選択](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)

上記の三つを比較します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4b87580d-3aa5-1143-8118-210967371aa8.png)

:::note info
ネタバレですが、結論は[選択(Select)](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)の圧勝です。
:::

# [Apply to each（現: それぞれに適用する）](https://learn.microsoft.com/ja-jp/power-automate/apply-to-each?tabs=classic-designer)と`Do until`

[Apply to each（現: それぞれに適用する）](https://learn.microsoft.com/ja-jp/power-automate/apply-to-each?tabs=classic-designer)と`Do until`は、結果を格納する配列とイテレーターである変数`i`, `j`をそれぞれ宣言します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/558de4f4-fb83-c52d-e7ac-eebac193890d.png)

[Apply to each（現: それぞれに適用する）](https://learn.microsoft.com/ja-jp/power-automate/apply-to-each?tabs=classic-designer)の場合、`配列変数に追加`のアクションは

```plaintext:Apply to each
addProperty(item(),'Index',variables('i'))
```

`Do until`の場合

```plaintext:Do until
addProperty(body('JSON_Array')?[variables('j')],'Index',iterationIndexes('Do_until'))
```

[addProperty 関数](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#addproperty)はオブジェクトにプロパティを追加する便利な関数です。
`Index`というプロパティを設けて、イテレーターの値を設定しています。

Do untilで使用できるという[iterationIndexes 関数](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#iterationindexes)も初めて使ってみました。

`variables('j')`は`iterationIndexes('Do_until')`に置き換えることができます。
しかしDo untilの条件を鑑みると、値を識別するための変数が必要だったため、結局`j`という変数を設けました。

結果は・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/a4b98292-584f-1d9c-0473-fb497c06e362.png)

双方15～25秒かかってしまい、**遅い**。

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#addproperty

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#iterationindexes

# やはり[選択(Select)](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)

[選択(Select)](https://learn.microsoft.com/ja-jp/power-automate/data-operations#use-the-select-action)のアプローチは
1. 配列の要素数を[length 関数](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#length)で取得し、[range 関数]()を設け
1. `From`を[range 関数](https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#range)、`Map`は`addProperty(body('JSON_Array')?[item()],'Index',item())`と指定

こちらで内部的に繰り返し処理を実施して、高速でインデックスの付与も達成しています。

```json:inputs
{
"from": "@range(0,length(body('JSON_Array')))",
"select": "@addProperty(body('JSON_Array')?[item()],'Index',item())"
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/56b11d34-094a-9417-0139-14c43f168618.png)

一つだけ次元が違う。

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#length

https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#range

# おわりに
やはり選択は圧勝ですね！
選択最強です！

なるべく選択でやりたい！

https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7


https://qiita.com/DEmodoriGatsuO/items/aabff4e30bba821c39b7