Power Automate クラウドフローで中央値を求める方法

Power Automate
この記事は約4分で読めます。

配列データを扱っていると、「この中の中央値を出したい」と思う場面があっても、Power Automate のクラウドフローには中央値を直接求める関数が用意されていません

- YouTube
YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。

そのため、複数の関数を組み合わせて式を作成する必要があります。

数値の配列を用意する

まずは、中央値を求めたい単純な数値の配列を用意します。
配列の取得元は問いませんが、ここではすでに配列が取得できている前提で進めます。

[  10,  3, 8,  5,  6,  2 ]

ここで重要なのは単純な数値の配列になっている必要がある点です。例えば以下のような場合今回の方法は使えないので、単純な数値の配列に選択アクションなどを使って変換する必要があります。

[{"value":1},{"value":3},{"value":5}]

中央値を求めるための考え方

中央値を求める流れは次のとおりです。

  1. sort() で配列を昇順に並び替える
  2. length() で配列の要素数を取得する
  3. 要素数が 奇数か偶数か を判定する
  4. 条件に応じて計算方法を切り替える

計算方法が分かれるため、ここでは if() 関数を使用します。

if(
  equals(mod(length(outputs('作成')),2),1),
  float(sort(outputs('作成'))[
    div(length(outputs('作成')),2)
  ]),
 奇数の場合,
 偶数の場合
)

奇数の場合の式

配列の要素数が奇数の場合は、並び替えた配列の真ん中の値を取得します。

使用する式は次のとおりです。

float(
  sort(outputs('作成'))[
    div(length(outputs('作成')),2)
  ]
)

length()div( ,2) することで、
配列の中央のインデックスを求めています。

if(
  equals(mod(length(outputs('作成')),2),1),
  float(sort(outputs('作成'))[
    div(length(outputs('作成')),2)
  ]),
 float(
  sort(outputs('作成'))[
    div(length(outputs('作成')),2)
  ]),
 偶数の場合
)

偶数の場合の式

配列の要素数が偶数の場合、中央の値は1つではなく2つ存在します。
そのため、その2つを取得して平均を求めます。

div(
  add(
    float(sort(outputs('作成'))[
      sub(div(length(outputs('作成')),2),1)
    ]),
    float(sort(outputs('作成'))[
      div(length(outputs('作成')),2)
    ])
  ),
  2
)

ここでは、

  • div(length(),2) で右側の中央の位置を求める
  • sub( ,1) で左側の中央を求める
  • add() で2つの値を足す
  • div( ,2) で平均を計算する

という流れになっています。

奇数・偶数をまとめた最終的な式

上記の処理を if() でまとめると、次のような式になります。

if(
  equals(mod(length(outputs('作成')),2),1),
  float(
    sort(outputs('作成'))[
      div(length(outputs('作成')),2)
    ]
  ),
  div(
    add(
      float(sort(outputs('作成'))[
        sub(div(length(outputs('作成')),2),1)
      ]),
      float(sort(outputs('作成'))[
        div(length(outputs('作成')),2)
      ])
    ),
    2
  )
)

この式で、奇数・偶数どちらの配列でも中央値を取得できます。

まとめ

Power Automate のクラウドフローには中央値専用の関数はありませんが、
sortlengthifdiv などを組み合わせることで対応できます。

少し式は長くなりますが、
処理の流れを分解して考えることで理解しやすくなります。

実際のフローでぜひ試してみてください。

コメント

タイトルとURLをコピーしました