【PowerBIで順位付け】RNKX関数でフィルターを設定したランキング

PowerBI RANKX関数 ランキング 順位DAX関数
スポンサーリンク

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(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)

▶Microsoftリンク RANKX関数

RANKX関数をメジャーで使用する上での注意点は下記2点です!
①テーブルは順位付けしたいカテゴリーをALL関数で設定
式はメジャーを入れる
これらに注意し、RANKX関数を設定していきましょう。

◆使用するデータ
今回使用するデータは、「購入日」「売上」「店舗コード」「会員番号」が入った顧客購入データです。

PowerBI 使用データ 顧客データ

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

PowerBI テーブル

この売上合計はSUMを使ってメジャーで作成しています。

売上合計 = SUM('顧客購入データ'[売上])

こちらに、RANKX関数でメジャーを作成し、日付別の売上ランキングを表示していきます!

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

RANKX関数の構文に従って、売上ランク(日付)という日付別の売上合計を降順に順位付けしたメジャーを作成します。

PowerBI RANK関数
売上ランク(日付) = RANKX(ALL('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Dense)

作成したメジャーを表に入れればOKです!

PowerBI RANK関数 テーブル ALL関数

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

PowerBI RANK関数
売上ランク(店舗) = RANKX(ALL('顧客購入データ'[店舗コード]),'顧客購入データ'[売上合計],,DESC,Dense)

作成した売上ランク(店舗)のメジャーを店舗別のテーブルに入れて、ランキング表の完成です!

PowerBI RANK関数 テーブル ALL関数

また、②式のメジャーを、SUM関数からCOUNT関数に変えれば、カウント数の多い順に表示など欲しい値の順番に変更することも可能です!

【関連記事】
▶【PowerBI】ALL関数でフィルターの解除、使い方の説明
▶【PowerBI】SUM関数の使い方(SUMX、SUMIFS関数)
▶【PowerBI】COUNT関数を使ったメジャーの作成(条件付きカウント)
▶【PowerBI】テーブルの作成方法、条件付き書式の設定
▶【PowerBI】マトリックス表の作成方法(ヒートマップ的な在庫管理表の作成)

【結論】
・RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)

スポンサーリンク

PowerBIでRANKX関数を使う上での注意点

RANKX関数をメジャーで使用する注意点は下記の2点です!
テーブルは順位付けしたいカテゴリーをALL関数で設定
式はメジャーを入れる
この二つのポイントは必ず守らないと、思ったように設定できません。

例えば、今回のデータでALL関数でカテゴリーを指定せず、下記のようにそのままテーブルを指定した場合は全て1位となります。

PowerBI RANK関数 全て1
売上ランク(店舗) = RANKX('顧客購入データ','顧客購入データ'[売上合計],,DESC,Dense)
PowerBI RANK関数 全て1 順位でない ランキング

これは、表を作った際に1行ごとに順位付けすることになり、各行には一つしかないので、全て1位になってしまいます。
誤:’顧客購入データ’
正:ALL(‘顧客購入データ'[店舗コード])

何で順位付けをしたいか?を考え、ALL関数やALLSELECTED関数で順位付けしたいデータ列を指定するようにしましょう。

【結論】
・RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
①テーブルはALL関数で順位付けしたいカテゴリーを設定する!
②式はメジャーを入れる!

スポンサーリンク

フィルターをした順位付け(RANKX関数、ALLSELECTED関数)

超重要です。
PowerBIでRANKX関数の使い方は分かったけど、スライサーでフィルターを設定した状態での順位にならずに困ることがあります。

例えば、今回のケースだと日付スライサーを設定し期間を変えると、歯抜け状態になります。これは、ALL関数でフィルターを除外した順位の設定をしているためです。

PowerBI RANK関数 歯抜け スライサー フィルター ALL関数 ALLSELECTED

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

ALLSELECTED関数 RANK関数 DESC DENSE ランキング 順位付け PowerBI
売上ランク(日付) = RANKX(ALLSELECTED('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Dense)

先ほどのメジャーをALLSELECTED関数に変えて追加すると、スライサーで期間を変えても、きちんと順番通りになります!

PowerBI RANK関数 スライサー フィルター ALL関数 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)で、省略した場合は降順設定になります。

PowerBI RANKX関数 昇順 降順 DESC ASC

【結論】RANKX関数のorderのDESC/ASCを変更し、昇順/降順を変更

スポンサーリンク

RANKX関数で同一順位の処理方法の設定

続いて、売上合計が同じ値だった場合の設定方法は④tiesで変更が可能です。

売上ランク(日付) = RANKX(ALLSELECTED('顧客購入データ'[購入日]),'顧客購入データ'[売上合計],,DESC,Skip)

Dense:同じ値の後の順位はスキップしない
Skip:同じ値の後の順位はスキップする

同じ値の場合の処理方法を変えることができました!デフォルトはSkipで省略した場合は、Skipの設定になります。

PowerBI RANKX関数 Skip Dense 詳細設定 同一順番 同じ値

【結論】RANKX関数のtiesのSkip/Denseを変更し、同一順位だった場合の処理方法を設定できる!

スポンサーリンク

PowerBI RANKX関数の使い方まとめ

今回はPowerBIでRANKX関数を使った順位付け方法を紹介しました。RANKX関数を使う上でのポイントは下記の4点です。
・PowerBIで順位付けは
 RANKX(①テーブル, ②式, ,③降順/昇順, ④同一順位の設定)
・①テーブルはALL関数で順位付けしたいカテゴリーを設定
・②式はメジャーを入れる
・ALLSELECTED関数とセットで使えば
 フィルターした状態での順位付けができる

応用編として、下記で今回のRANKX関数を用いて、行番号を取得し、行同士の計算をする方法を解説しています。よく使うテクニックですので、合わせてご参考ください!
▶PowerBIで行の計算(行を比較し日付間隔を計算)

RANKX関数は意外とトラップが多く正しく使わないと機能しません。ただ、売上や日付順での並び替えなど、非常に汎用性が高く使う場面が多いです。ALLSELECTED関数と組み合わせたフィルターを設定した順位付け方法などと合わせて、ぜひマスターしてみてください!

下記でPowerBIの便利機能、DAX関数を全てまとめています。ぜひご参考下さい!

▶PowerBI、PowerQueryの便利機能、DAX関数まとめ

よく使うDAX関数まとめ

良ければ、☟クリック応援をよろしくお願いします!

にほんブログ村 サラリーマン日記ブログ IT系サラリーマンへ
にほんブログ村

コメント

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