鷹尾祥(アキラ)のExcel BI ブログ

Excelの革新的機能であるパワーピボット/パワークエリ/DAXについて紹介します。

バンプチャート(順位推移グラフ)ー RANKX

バンプチャート(順位推移グラフ)ー RANKX

f:id:modernexcel7:20191020092850p:plain

目標

今回のテーマはバンプチャート(順位推移グラフ)です。バンプチャート(順位推移グラフ)は、時系列を横軸においた、順位(ランキング)の変遷を表現した折れ線グラフです。

技術的なポイント

DAXで順位を求めるにはRANKX関数を使用します。

RANKX function (DAX) - DAX | Microsoft Docs

RANKX – DAX Guide


第一引数:テーブル  ここに順位を求める対象のテーブルを指定します。(今回は商品テーブル)
第二引数:計算式   ここに順位を比較するための計算式(今回は「売上合計」)を指定します。

第一引数のテーブル指定時にALLまたはALLSELECTEDを付けるのがポイントです。

実践

ならべるステップ

まず、挿入→ピボットテーブルから、このブックのデータ モデルを使用するを選んでピボットテーブルを作成します。

ピボットテーブルのフィールドは以下のように、行に商品名、値に売上合計を配置します。

f:id:modernexcel7:20191020101213p:plain

この段階では商品名売上合計しか並んでいません。

f:id:modernexcel7:20191020101355p:plain

かぞえるステップ

これからRANKX関数でメジャーを作成しますが、敢えて誤った例を紹介しながらポイントを押さえていきます。

商品売上順位メジャーの作成

さっそくメジャーを作成します。

商品テーブル→右クリック→メジャーの追加を選びます。

f:id:modernexcel7:20191020112936p:plain

商品売上順位メジャーを以下のように作成します。

f:id:modernexcel7:20191020113654p:plain

= RANKX('商品', [売上合計])

ところが、作成したメジャーをピボットテーブルに追加して順位を確認すると、すべて1です。

f:id:modernexcel7:20191020151130p:plain


これはRANKXの第一引数、'商品' がピボットテーブルのセルのフィルターコンテキストの影響を受けているため、順位を比べる対象が1対1になっているからです。

f:id:modernexcel7:20191020152010p:plain


したがって、ALL関数を使って第一引数 '商品'テーブルのフィルターを解除します。以下のように商品売上順位メジャーを修正してください。

= RANKX(ALL('商品'), [売上合計])

これで商品名全体の中での順位が出ました。(青枠は比較対象の全商品名、赤枠は順位を求める商品です。)

f:id:modernexcel7:20191020152241p:plain

f:id:modernexcel7:20191020152444p:plain

次にスライサーを追加します。

ピボットテーブルのフィールドから商品→商品カテゴリー→右クリック→スライサーとして追加を実行します。

f:id:modernexcel7:20191020152608p:plain

さっそくスライサーを選択してみると、商品名は絞られたものの、順位が商品名全体での順位でスライサーを受けた順位になっていません。

f:id:modernexcel7:20191020152943p:plain

スライサーの選択を反映するには、ALLSELECTED関数を使います。以下のように商品売上順位メジャーを修正してください。

= RANKX(ALLSELECTED('商品'), [売上合計])

これでスライサーの内容を反映した順位を表示することができました。

f:id:modernexcel7:20191020153434p:plain

次に列に時間軸としてカレンダーテーブルの会計年度を追加します。

f:id:modernexcel7:20191020153936p:plain

これで会計年度ごとの順位の推移が出ました。ここまで来たら売上合計メジャーはピボットテーブルから外します。なお、2019年度には売上実績データが無いためすべて1になっています。

f:id:modernexcel7:20191020154109p:plain

えがくステップ

バンプチャート(順位推移グラフ)の作成

まずは空のピボットグラフを作ります。

何もないセルにカーソルを移動し、挿入→ピボットグラフ→ピボットグラフを選んでください。例によって、このブックのデータ モデルを使用するが選択されていることに注意してください。

f:id:modernexcel7:20191020154605p:plain

ピボットグラフには以下のように設定します。
 軸(分類項目): 会計年度
 凡例(系列):  商品名
 値:       商品売上順位

f:id:modernexcel7:20191020155153p:plain

次にピボットグラフをすでに作成した商品カテゴリースライサーに結び付けます。
商品カテゴリースライサー→右クリック→レポートの接続を選択します。

f:id:modernexcel7:20191020155514p:plain

先ほど作成したピボットグラフにチェックを入れ、OKを押します。

f:id:modernexcel7:20191020155646p:plain

これでピボットグラフがスライサーで絞り込まれました。

f:id:modernexcel7:20191020155843p:plain

次に、ピボットグラフをクリックし、デザイン→グラフの種類の変更→折れ線→折れ線を選択します。

f:id:modernexcel7:20191020160009p:plain

これで折れ線グラフになりました。

次に、グラフの順位を反転させます。
折れ線グラフの縦軸の順位をダブルクリックし、表示された軸の書式設定軸を反転するにチェックを入れます。

f:id:modernexcel7:20191020160121p:plain

グラフを選択したまま、デザインメニューで以下のデザインを選択します。
f:id:modernexcel7:20191020160340p:plain

これでだいぶ形になってきました。

f:id:modernexcel7:20191020160440p:plain

しかし、2019年には売上実績が無いのにもかかわらずグラフが表示されているので、これを消します。以下のように商品売上順位メジャーを修正してください。
売上合計に値が入っている時のみ順位を表示し、値が入っていない場合はブランクにする条件を追加しました。

=
IF(
[売上合計],
RANKX(ALLSELECTED('商品'), [売上合計])
)

これで完成しました。

f:id:modernexcel7:20191020161157p:plain

同様に支店名など、他のスライサーも追加すると便利でしょう。

f:id:modernexcel7:20191020161350p:plain

以下は支店名で順位を作成した時のバンプチャートとメジャーの例です。

f:id:modernexcel7:20191020161641p:plain

=
IF(
[売上合計],
RANKX(ALLSELECTED('支店'), [売上合計])
)