こんにちは。アーティサン株式会社の小刀稱(ことね)です。
本記事では、Power Appsでデータの順位を求める方法についてご紹介します。
Excelでは、標準で提供されているRANK()関数を用いれば、データの順位を求めることができます。
しかし、「Power AppsではRANK()関数をサポートしていません。(2021年9月現在)」
よって、Power Appsでデータの順位を求めるためには、関数を組み合わせ、RANK()関数と同等の機能を実装する必要があります。
ExcelのRANK()関数について
Excelでデータの順位を求める場合、RANK()関数を用いることで対応可能です。
例を以下に示します。
得点が最も高い学生の順位は1、次に得点が高い学生の順位が2…となっています。
また、同点の場合は、同じ順位(以下例では、2位が2人存在)となります。
RANK()関数の詳細は以下を参考にしてください。
Power AppsでRANK()関数を実装する
冒頭でもお伝えした通り、「Power Appsでは現時点でRANK()関数はサポートされていません。」
そこで、Power Apps内の関数を組み合わせることで、RANK()関数と同等の機能を実装していきます。
では早速、実装の流れを紹介していきます。
colPointsの得点列を基準として、順位付を行うためのコレクション(colPointsAndOrder)を作成
※RANK()関数は、colPointsAndOrder作成時に実装します。
(1)学生と得点を格納するコレクション(colPoints)を作成
学生と得点を格納するコレクションを作成します。
ボタンを準備し、「OnSelect」プロパティに以下の関数を記載します。
ClearCollect(colPoints,
{学生: "A", 得点: 100}
, {学生: "B", 得点: 87}
, {学生: "C", 得点: 67}
, {学生: "D", 得点: 87}
, {学生: "E", 得点: 45}
)
(2)colPointsの得点列を基準として、順位付を行うためのコレクション(colPointsAndOrder)を作成
本記事のメインであるRANK()関数を実装していきます。
いきなりですが、完成形を記載します。
ClearCollect(colPointsAndOrder,
AddColumns(colPoints As tmpThisRecord, "順位", CountRows(Filter(colPoints, 得点 > tmpThisRecord.得点)) + 1)
);
実装のキーポイントとしては、CountRows(Filter(colPoints, 得点 > tmpThisRecord.得点)) + 1の部分です。
考え方を説明していきます。
「tmpThisRecord.得点」はcolPointsの得点列の各値を示します。(下図(1))
Filter()関数では、「tmpThisRecord.得点」より大きい得点を持つレコードを抽出します。
また、CountRows()関数では、Filter()関数で得たレコード数(=0から始まる順位)を返します。
最後に、CountRows()関数の結果に1を加算することで、1から始まる順位を得ることができます。(下図(2))
ちなみに、CountRows()関数の結果に1を加算せず、Filter()関数内の比較演算子を「以上(>=)」にすれば良いのでは? と思った方がいらっしゃるかもしれませんが、これは間違いです。
Filter()関数内の比較演算子にイコールを追加してはいけません。
なぜかというと、同点の場合、同順位の最大値が格納されてしまうためです。
通常は、同順位の最小値を求める必要があるので、イコールを追加しないようにしてください。
本記事では、Power AppsでRANK()関数と同等の機能を実装する方法について紹介しました。
関数を組み合わせて新しい関数を作成する場合、実装のアイデアが必要となります。
(実は、本アイデアは社内のPower Platformでのソリューション提案や実装の経験が豊富な方に教えていただきました(笑))
このような内容は、「知っていれば一瞬」ですが「知らなければ多くの時間が必要」となります。
当社では、今回のような実装のアイデアを多く発信していく予定ですので、是非今後ともご覧ください。
最後まで読んでいただき、ありがとうございました!
【こちらも合わせて読みたい】
小刀稱知哉
大分県出身(温泉大好き)、現在は東京都在住
1990年生まれ
30才でメーカーの技術営業からIT業界にジョブチェンジ!!!
趣味は読書
主にMicrosoftのローコード(SharePoint・Power Platform)に関するに関する営業活動や設計、開発などを担当しております!
持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305/SC-200