ある列を、値によって順番にランク付けしたいと思ったことありませんか?今回はメジャーや計算列ににも使えるRANKXというDAXをメモしてみたいと思います。もしランク付けや列に番号を付ける方法をお探しの方の参考になれば幸いです。ランク付け=順位付け。
目次
RANKXの基本
RANKXが何をするのか。一言で言うと、
与えられた列の値をランク付けして、各行にその値のランクを返します。
そして定義されている形式は以下の通りです
RANKX( <table>, <expression> [, <value>[, <order>[, <ties>]]])
RANKX( <表>, <式> [, <値>[, <order>[, <ties>]]])
ですがややこしいので、まずは一番シンプルで一番使用頻度の高い形式をみてみましょう。
RANKX( <table>, <expression>) 日本語の場合は「RANKX( <表>, <式>)」
とりあえず上の構文がRANKXで一番大切な部分だと思います。その他は降べき昇べきのナンバリング、同一順位の処理の設定です。ですがこの2つは省略することができます。
<table>(表)に入る値
ランク付けをしたい値が入っているテーブルを入れます。ここに入れるテーブルは他のソースから取り込んだテーブルや計算テーブルとしてDAXで作ったテーブルでも大丈夫です。
<expression>(式)に入る値
ここにはランク付けをしたい値が入っている列を入れます。
実際にRANKXを使ってみる
ここでは実際にRANKXを使ってみたいと思います。
まずはシナリオ
今回用意するのはシンプルなテーブル。月ごとのテストの点数がまとめてあるテーブルです。
1列目:日付(日付フォーマット)
2列目:点数(整数)
今回は2列目の点数列の値をRANKXを使って順位をつけていきます。
順位をつける
既にあるテーブルに新しい列を作りRANKXを入れていきます。
- ランク付けしたい値があるテーブルが表示されている状態で「新しい列をクリック」
- 上の説明の通り「RANKX(テーブルの名前,ランク付けしたい列)」を入力して完了します。
そうします以下の通りにRANKXで順位がついた列ができると思います!
「RANKX Example」列に結果が出ました。1位から5位までをみてみるとしっかりと点数上から順にランク付けされています。
これによって下の基本形は
「RANKX( <表>, <式>)」
デフォルトで降順になることがわかります。これは上の式に一つ追加するだけで変えることができます。
降順昇順、並べ替えの設定方法
並べ方の設定は3つ目のパラメーターで設定することができます。
RANKX( <表>, <式>, <値>, <order>, <ties>)
上のRANKXの構文に当てはめてみると「order」の部分で設定します。もし「値」に何も入れない場合は、空でも「カンマ(,)」を置く必要があります。「order」のすぐ後ろの「ties」をからにする場合は「order」の後にすぐに「)」カッコを閉じてください。例は以下の通りです。
RANKX( <表>, <式>, 空にする, <order>)
降順にする方法
<order>の部分に「DESC」と入れましょう。結果は下の通りです。
昇順にする方法
<order>の部分に「ASC」と入れましょう。結果は下の通りです。点数が先ほどと違って59から60、65、、、と上がっているのが確認できます。
同一順位の処理の仕方
上の結果をみますと、90点が二つあるのがわかると思います。ここでは同一順を見つけた時の処理の仕方の設定方法を紹介します。
同一順位の処理方法の設定は4つ目(最後)のパラメーターで設定することができます。
RANKX( <表>, <式>, <値>, <order>, <ties>)
上のRANKXの構文に当てはめてみると「ties」の部分で設定します。もし「値」と「order」に何も入れない場合は、空でも「カンマ(,)」を置く必要があります。例は以下の通りです。
RANKX( <表>, <式>, 空にする, 空にする,<ties>)
具体的には2つの方法があります。
- 同一順位の数に応じて次の順位をスキップさせる(上の画像がこれの例です)。複数同じ値があった場合は次に来る順位がかぶっている数だけ飛ばされます。
- 同一順位は一つと考え、そのまま次の順位へいく。1位から順位が飛ぶことはない方法。
1 同一順位の数だけ次の準備を飛ばす方法
重なった数だけ飛ばす場合は<ties>に「Skip」と入れましょう。結果を見てみると、6位が二つある影響で7位が飛ばされています。
2 同一順位があってもそのあとの順位を飛ばさない方法
重なった数だけ飛ばす場合は<ties>に「Dense」と入れましょう。結果を見てみると、6位が二つあっても次の順位は7位です。
まとめ
色々と使い道があるRANKXですが、一番使うのは以下のスタイル。そしてここから並べ方と同一順位の処理方法を設定していくのです。
RANKX( <table>, <expression>)
RANKXが行番号の働きをして、一つ前の行の値を返してくれるDAXも様々な使い道の一つです。
以上、「【Power BI DAX】初心者のためのRANKXの使い方」でした。次回は分野を分けてランク付けする方法などを紹介できたらなと思います。