Power BI Desktopを使用してランキングを作成する方法を記載します。
今回は顧客別に売上合計額を計算し、売上の高い順にランク付けをするテーブルを例に解説をしていきます。
データソースの前提
以下のような、顧客名と月ごとの売上が記載された表を、Microsoft Lists上に作成しています。
本記事では、この表をベースにランキングを作成します。
ランキング作成方法
前提条件
この後ご紹介する手順は、Power BI Desktop上にデータソースを取り込み、視覚化のテーブルに出力したときに以下のような状態になっている事を前提としています。
Power BI Desktop上にデータを取り込む方法や、不要な列の削除方法については、過去記事で記載しているため本記事では割愛します。
必要な方は下記も合わせてご覧下さい。
Lists上のデータを使用してPower BIレポートを作成する手順 - JBS Tech Blog
売上合計列を作成する
ますは、3か月分の売上合計を集計します。「その他オプション」-「新しい列」をクリックします。
以下のように入力してチェックをクリックします。
売上合計 = [x月]+[x+1月]+[x+2月]
前提条件で用意したテーブルに売上合計列を追加すると、以下のようになります。
顧客単位の売上合計額列を作成する。
顧客名単位でランキングさせる前準備として、新しいメジャーを作成し以下のDAX式を書きます。
「その他オプション」-「新しいメジャー」をクリックします。
以下のように入力してチェックをクリックします。
顧客別売上 = CALCULATE(SUM('サンプル売上'[売上合計]),ALLEXCEPT('サンプル売上','サンプル売上'[顧客名]))
作成した列をテーブルに追加し、以下のように顧客単位で合計額が表示できる状態になりました。
顧客別のランキングを作成する。
顧客別売上を基準にランキングさせるため、新しいメジャーを作成し以下のDAX式を書きます。
RANK = RANKX(ALL('サンプル売上'),'サンプル売上'[顧客別売上],,DESC,Dense)
顧客名、顧客別売上、RANKの3列でテーブルを作成し、顧客別売上の降順とランキングが一致していることが確認できました。
トラブルシューティング
顧客単位の売上合計額列を作成しない場合のランキング動作
売上合計列作成直後にランキングを作成した場合、顧客名で売上合計が集約されていないため、行単位でランキングされてしまいます。
RANK3列のDAX式は以下のようにしています。
RANK3 = RANKX(ALL('サンプル売上'),'サンプル売上'[売上合計],,DESC,Dense)
顧客名でソートした場合は、以下のようになります。
初期状態の場合、合計値で集計された状態になるので戸惑うかと思います。
これは上の表のランキングの値を足し算した結果が表示されています。
カウントにした場合は行数になるため、求めたい結果とは異なります。
売上合計列を挟まず顧客別売上合計列を作成する
以下のようにSUMX関数で計算すれば列を省略できます。
顧客別売上2 = CALCULATE(SUMX('サンプル売上',[x月]+[x+1月]+[x+2月]),ALLEXCEPT('サンプル売上','サンプル売上'[顧客名]))
おわりに
普段、Excelのピボットテーブルで行っている処理をPower BIで実装してみようとしたのが、今回の記事作成のきっかけです。
今年4月から初めてツールを触りましたが、関数の使い方がわかると利用用途の幅が広がり、面白く感じています。
なお、今回は顧客別売上列を新規作成しましたが、顧客名がユニークな状態の場合は必要はありません。