PowerBIでランキングを表示できるRANKX関数を使う上で、「なぜか全て1位になる」、「フィルター(スライサー)とセットにした順位付けができない」など、うまく機能しない落とし穴が結構あります。
RANKX関数を正しく理解し、ALL関数、ALLSELECTED関数とセットで使えば、問題は解決します!
【本記事でできること】
・RANKX関数の使い方が分かる
・フィルターを設定したRANKX関数で順位付け方法
・昇順/降順、同一順位の場合の処理などの詳細設定
RANKX関数で順位の設定方法を理解して、上位の売上項目を把握するなど分析の幅を広げてみてください!
PowerBIで順位付け(RNKX関数の使い方)
RANKX関数の構文と使い方を説明します。
【RANKX関数 構文】指定した式の順位を返す関数
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
・①table:テーブル
・②expression(式):順位付けする値の計算式、基本はメジャーを指定
・value:別の列を参照して順位付けする場合に使うが基本は省略
・③order:降順/昇順であるDESCかASCを指定
DESC:descending order、ASC:ascending order
・④ties:同一順位の設定。SkipかDenseを指定
※value、③order、④tiesは省略可能です。
書き換えると、
RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
RANKX関数をメジャーで使用する上での注意点は下記2点です!
・①テーブルは順位付けしたいカテゴリーをALL関数で設定
・②式はメジャーを入れる
これらに注意し、RANKX関数を設定していきましょう。
◆使用するデータ
今回使用するデータは、「購入日」「売上」「店舗コード」「会員番号」が入った顧客購入データです。

◆日付別の売上ランキング
顧客購入データをPowerBIに取り込み、日付別の売上テーブルを作成しています。

この売上合計はSUMを使ってメジャーで作成しています。
売上合計 = SUM('顧客購入データ'[売上])
こちらに、RANKX関数でメジャーを作成し、日付別の売上ランキングを表示していきます!
RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
①テーブル:ALL(ランキングしたいカテゴリー)
→今回は日付別にランキングしたいので、日付列をALL関数で指定
※ALL関数でフィルターを解除した順位付けにすることで、
表を作っても全て1位になるようなエラーが出ません。
②式:作成した売上合計のメジャーを指定
③降順/昇順:売上の大きい順を指定したいので、降順であるDESCを指定
④同一順位の設定:スキップさせたくないのでDenseを指定
RANKX関数の構文に従って、売上ランク(日付)という日付別の売上合計を降順に順位付けしたメジャーを作成します。

売上ランク(日付) = RANKX(ALL('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Dense)
作成したメジャーを表に入れればOKです!

◆店舗別の売上ランキング
次は、日付別ではなく、店舗別の売上ランキングを設定していきます。店舗別のランキングにしたいので、先ほどのALL関数の中身を店舗コードのデータ列にすればOKです。

売上ランク(店舗) = RANKX(ALL('顧客購入データ'[店舗コード]),'顧客購入データ'[売上合計],,DESC,Dense)
作成した売上ランク(店舗)のメジャーを店舗別のテーブルに入れて、ランキング表の完成です!

また、②式のメジャーを、SUM関数からCOUNT関数に変えれば、カウント数の多い順に表示など欲しい値の順番に変更することも可能です!
【関連記事】
▶【PowerBI】ALL関数でフィルターの解除、使い方の説明
▶【PowerBI】SUM関数の使い方(SUMX、SUMIFS関数)
▶【PowerBI】COUNT関数を使ったメジャーの作成(条件付きカウント)
▶【PowerBI】テーブルの作成方法、条件付き書式の設定
▶【PowerBI】マトリックス表の作成方法(ヒートマップ的な在庫管理表の作成)
【結論】
・RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
PowerBIでRANKX関数を使う上での注意点
RANKX関数をメジャーで使用する注意点は下記の2点です!
・テーブルは順位付けしたいカテゴリーをALL関数で設定
・式はメジャーを入れる
この二つのポイントは必ず守らないと、思ったように設定できません。
例えば、今回のデータでALL関数でカテゴリーを指定せず、下記のようにそのままテーブルを指定した場合は全て1位となります。

売上ランク(店舗) = RANKX('顧客購入データ','顧客購入データ'[売上合計],,DESC,Dense)

これは、表を作った際に1行ごとに順位付けすることになり、各行には一つしかないので、全て1位になってしまいます。
誤:’顧客購入データ’
正:ALL(‘顧客購入データ'[店舗コード])
何で順位付けをしたいか?を考え、ALL関数やALLSELECTED関数で順位付けしたいデータ列を指定するようにしましょう。
【結論】
・RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
①テーブルはALL関数で順位付けしたいカテゴリーを設定する!
②式はメジャーを入れる!
フィルターをした順位付け(RANKX関数、ALLSELECTED関数)
超重要です。
PowerBIでRANKX関数の使い方は分かったけど、スライサーでフィルターを設定した状態での順位にならずに困ることがあります。
例えば、今回のケースだと日付スライサーを設定し期間を変えると、歯抜け状態になります。これは、ALL関数でフィルターを除外した順位の設定をしているためです。

ALL関数でスライサーなどのフィルターを除外した全ての中から順位付けを設定しているため、フィルターを反映する関数であるALLSELECTED関数に変えればうまくいきます。

売上ランク(日付) = RANKX(ALLSELECTED('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Dense)
先ほどのメジャーをALLSELECTED関数に変えて追加すると、スライサーで期間を変えても、きちんと順番通りになります!

スライサーを設定しても歯抜けにならないランキング表示を設定することができました!
【関連記事】
▶ALLSELECTED関数の使い方(フィルターを選択した条件で計算)
【結論】
フィルター状態で順位表示したい場合は、RANKX関数をALLSELECTED関数とセットで使う!
RANKX関数の詳細設定(昇順/降順、同一順位の設定)
続いて、RANKX関数で順位を昇順/降順にする設定や、同一順位だった場合の処理方法を紹介します。
【RANKX関数】指定した式の順位を返す関数
RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
①table:テーブル
②expression(式):順位付けする値の計算式、基本はメジャーを指定
③order:降順/昇順であるDESCかASCを指定
DESC:descending order、ASC:ascending order
④ties:同一順位の設定でSkipかDenseを指定
③④の設定を変えればOKです。
RANKX関数で昇順/降順の設定
順位を昇順(売上が小さい順)にする場合は、RANKX関数の③orderの部分を下記のように変更します。
売上ランク(店舗) = RANKX(ALL('顧客購入データ'[店舗コード]),'顧客購入データ'[売上合計],,ASC,Dense)
RANKX関数の③order部分で昇順/降順の変更が可能です。
・DESC(descending order):降順
・ASC(ascending order)昇順
ASCに変えることで昇順となり、売上の低い順に番号をつけることができました。デフォルトは降順(DESC)で、省略した場合は降順設定になります。

【結論】RANKX関数のorderのDESC/ASCを変更し、昇順/降順を変更
RANKX関数で同一順位の処理方法の設定
続いて、売上合計が同じ値だった場合の設定方法は④tiesで変更が可能です。
売上ランク(日付) = RANKX(ALLSELECTED('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Skip)
・Dense:同じ値の後の順位はスキップしない
・Skip:同じ値の後の順位はスキップする
同じ値の場合の処理方法を変えることができました!デフォルトはSkipで省略した場合は、Skipの設定になります。

【結論】RANKX関数のtiesのSkip/Denseを変更し、同一順位だった場合の処理方法を設定できる!
PowerBI RANKX関数の使い方まとめ
今回はPowerBIでRANKX関数を使った順位付け方法を紹介しました。RANKX関数を使う上でのポイントは下記の4点です。
・PowerBIで順位付けは
RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
・①テーブルはALL関数で順位付けしたいカテゴリーを設定
・②式はメジャーを入れる
・ALLSELECTED関数とセットで使えば
フィルターした状態での順位付けができる
応用編として、下記で今回のRANKX関数を用いて、行番号を取得し、行同士の計算をする方法を解説しています。よく使うテクニックですので、合わせてご参考ください!
▶PowerBIで行の計算(行を比較し日付間隔を計算)
RANKX関数は意外とトラップが多く正しく使わないと機能しません。ただ、売上や日付順での並び替えなど、非常に汎用性が高く使う場面が多いです。ALLSELECTED関数と組み合わせたフィルターを設定した順位付け方法などと合わせて、ぜひマスターしてみてください!
下記でPowerBIの便利機能、DAX関数を全てまとめています。ぜひご参考下さい!
▶PowerBI、PowerQueryの便利機能、DAX関数まとめ
良ければ、☟クリック応援をよろしくお願いします!
コメント