見出し画像

Power BI -よくあるボタンによるレポート上のグラフの切り替え

Power BI の紹介ページに行って、デモンストレーションを見ると、ボタンをぽちぽち押してグラフや数値がちゃちゃっと切り替わっていくのを見ると思います。

ボタンを押すことによってグラフが切り替わる、これを実現する方法は、僕のこれまでの整理によると、以下の3パターンあります。

グラフを切り替える方法の種類

方法1. スライサーを使う
スライサーによりデータセットのコンテキストを直接変えて、データセットのアウトプットであるグラフを切り替える

方法2. メジャーを使う
データセットにスライサーは設定せず、別途メジャーの中の計算式を切り替えるテーブルを用意して、計算結果を切り替え、グラフを切り替える(SWITH関数を使います)

方法3. ブックマークを使う
予めグラフを重ねておいて表示/非表示を切り替えたり、別のスライドに飛ばすことで、グラフが切り替わっているように見せる

目的に応じて切り替える方法は異なる

どの方法にしようかなと考える場合は、上記の方法1→2→3の順で実現可能かどうか検討することが現実的だと思います。

シンプルな切り替え(例えば、年度を2019年度から2020年度に切り替えたいとか、A製品ではなくB製品に切り替えたいなどのように、同一の列に切り替えに使いたい情報が全て格納されている場合)である場合は、上記の方法1で十分です。
なぜなら、その切り替えに使いたい情報でスライサーをセットすればいいだけだからです。

次に、上記の方法1で切り替えの目的が達成できないときは、方法2を試すことになります。たいていの目的はこの方法2で達成可能なのだと思います。

最後に、方法1でも方法2でも達成できない場合(例えば、棒グラフを表示させたときに、棒の内訳を製品別から地域別に切り替えたい場合など)は、「ボタン」と「ブックマーク」の組み合わせ(方法3)で目的を達成することになります。(このやり方はまた時間があれば書こうかなと思います)

※方法3についてこちらに記載しました(追記:2020年6月29日)


今回は上記の「方法2」について書きます。

1. サンプルデータの取り込み

今回もMicrosoftのサンプル(Financial Sample.xlsx)でやります(そろそろ違うサンプルデータが欲しい・・)。

Power BI desktopを立ち上げて、、

画像1

financialsテーブルを選んで読み込みをクリック、

画像2

カレンダーテーブルは、、面倒だけど一応作っておきます、、

画像3

カレンダーテーブルを作ったので、「日付テーブルとしてマークする」をしておき、リレーションシップも設定しておきます。(ちなみに、日付テーブルとしてマークしておかないと、無駄に階層化されてデータを取り扱いにくくなります)

画像4


2. まずは売上を集計したグラフを作る

そしたら、次にレポート画面に移って、横軸は「Date」(日付テーブルから)、縦軸は「Sales」(financialsテーブルから)で「積み上が棒グラフ」を作ります。

画像5


3. 切り替えたい項目に応じたテーブルを新しく作成する

今回は、売上(Sales)、原価(COGS)、粗利(Profit)をボタンで切り替えられるようにすることを目的とします

なので、それらをボタンで表示させるために、新しくテーブルを用意します。

レポート画面>ホームタブ>データの入力 から、「テーブルの作成」を立ち上げます。

立ち上げたら次のように、切り替えたい項目名をそれぞれ入力します。
(ちなみに、感の良い人は、「financialsテーブルの列で使用されている列名と同じ名前にしないといけないのか?」と思われるかもしれませんが、その必要は全くありません。ここで入力される値は、ボタンに表示される名前になります。表示させたい名前を自由につけて大丈夫です)

画像6

入力が完了したら「読み込み」をクリック。

4. スライサー用に新しく作ったテーブルの列をはめて、ボタンを作る

ボタンを作るために、まずは「視覚化」から「スライサー」を選びます。
(ちなみに余談ですが、Power BI desktopは常に最新のものを使用しましょう。ちょっと前のVersionでは確かスライサーはフィルターと表示されていたような気がします)

画像8

スライサーを出したら、画面の上の方にひとまず寄せてサイズ調整し、先ほど作成した新しいテーブル「切り替えボタン用」の「Metrics」列を入れます。

画像9



また余談ですが、ボタンを作るための「視覚化」の選択肢は、「その他ビジュアルの取得」から、見た目がきれいな"Chiclet"を選ぶこともできます。(僕は最初の頃は使っていましたが、ちょっと操作性が悪いので使うのをやめました)

画像7


5. ボタンらしいビジュアルにする

このままでも使えるのですが、見た目をボタンっぽくしましょう。

先ほど作成したビジュアルの「スライサー」を選択した状態で、「書式」を編集します。

書式>全般>方向 から、「横」を選択します。

画像10

すると、先ほどのチェックボックス型だったスライサーがボタン風に変わります。サイズを調整して、横並びになるようにしておきます。

画像11

次に、ボタンが複数選択されないように、予め制御しておきます。

同じく「書式」から、「選択範囲のコントロール」を選択し、「単一選択」をオンにしておきます。

画像12

これで、ボタンには現在3つの選択肢(COGS、Profit、Sales)がありますが、どれか1個しか選べなくなりました。

6. SWITCH関数を使ったメジャーを作成する

そういえば、去年?この関数はエクセルでも使えるようになりましたよね。

SWITCH関数の使い方はエクセルと同じです。

ここで、今回の目的を改めて確認します。
1. COGSのボタンが押されたら、COGSの合計を集計・表示する
2. Profitのボタンが押されたら、Profitの合計を集計・表示する
3. Salesのボタンが押されたら、Salesの合計を集計・表示する

以上が、ボタンに応じて切り替えられるグラフの挙動なので、メジャーは次のようになります。

SelectedMetrics = 
SWITCH(TRUE(),
"COGS" in ALLSELECTED('切り替えボタン用'[Metrics]),SUM(financials[COGS]),
"Profit" in ALLSELECTED('切り替えボタン用'[Metrics]),SUM(financials[Profit]),
"Sales" in ALLSELECTED('切り替えボタン用'[Metrics]),SUM(financials[ Sales])
)

SWITCH関数の第1引数には、判定条件を入れます。
ここでは、TRUE()を判定条件としています。
したがって、例えば、上記2行目と3行目を合わせると、こんなことを意味していることになります。

「切り替えボタン用」テーブルの「Metrics」列で
(フィルターの影響を受けて)選ばれているのが「COGS」である場合は、
SUM(financials[COGS])を計算しなさい

なお、IN関数が気になる人は、一応こちらのリファレンスを参照ください。

7. メジャーを適用して切り替わるか確認する

先ほどは「積み上げ棒グラフ」の中に「Sales」を入れていましたが、これはひとまず取り除きます。(なんのためにSalesを最初にいれたんや、、と思うかもしれませんが、それはイメージの確認のためです)

代わりに、今作成したメジャー「SelectedMetrics」を入れましょう。

Salesボタンを押している状態だと、、

画像13

Profitボタンを押している場合だと、、

画像14

COGSボタンを押している場合だと、、

画像15

うまく切り替わりましたね。

8. グラフタイトルも表示に合わせて切り替えたい場合

ここで、グラフのタイトルも切り替えたいと思うことがあると思います。

通常、グラフタイトルは、書式の「タイトル」を「ON」にすると、自動的に表示され、手入力でそれを修正するようになっています。

ここをタイトル用に作成したメジャーと連動するようにします。

そのためには、まず、もう1個グラフタイトル用のメジャーを作ります。
こんな感じです。

GraphTitle = SELECTEDVALUE('切り替えボタン用'[Metrics])

このメジャーはSELECTEDVALUE関数を使用して、現在選択中の列の中の行を取得するものです。
従って、先ほど設定したボタンで、例えば"COGS"が選択されていたら"COGS"という"切り替えボタン用"テーブルに記入したテキストを返します。

これをグラフに実装しましょう。

グラフを選択し、書式から「タイトル」を展開します。
展開すると、タイトルテキストの項目が出てきて、その下にテキストボックス及び「fx」と書かれたボタンが出てきます。

この「fx」と書かれたボタンが、グラフタイトルを変数化するための機能になります。
実際にやってみましょう。

「fx」をクリック。

画像16

「フィールドに基づく」のプルダウンから、先ほど作成したメジャー「GraphTitle」を選択します。

画像17

これでグラフタイトルもボタンと連動するようになりました。
(デフォルトのフォントが小さすぎたので、42までフォントサイズを上げました)

画像18


これでボタンで表示内容を切り替えるグラフの完成です。

この「方法2」をひとまず抑えることが、方法1しかできない人にとってはとても大事なレポート作成上のテクニックだと思います。

たいていのことは方法2でできるはずですが、方法2ができるようになると、「もっとダイナミックに切り替えができないかな」と欲も出てくるので、そういう時は方法3に進むといいと思います(記事に書くかは暇になった時間次第です、、)


2022/4/13 補足|メジャーを使ってX軸をボタンで切り替える方法

下記に頂いた質問から、「X軸を動的に切り替える」ための方法として、メジャーを使用する方法を書こうと思います。

先に、どういうやり方が一番簡単かを考えると、ブックマーク機能を使って、予め複数のX軸で作成したグラフの表示/非表示をボタンで切り替える方が簡単です。

ただ、メジャーを使ってもできるので、一応その方法を記載します。

一番のポイントとしては、DAXでは動的に列を組み替えることができないので、レポートのグラフにおいて、X軸として使用するデータテーブル上の列を、別の列に切り替えるためには、それを補助する中間テーブルを作成してあげる必要があります。

それでは少し長くなってしまうかもしれませんが、
作成したサンプルデータの説明から、リレーションシップの設定、メジャーの作成について説明していきます。

使用するサンプルデータ

画像20

4つのサンプルデータを作成してみました。Dim_Blood_and_Gender以外は、所与のテーブルと思います。なお、Data_Tabeは(見切れていますが)100行目まであります。

Dim_Blood_and_Genderは上述の中間テーブルを意味しています。

リレーションシップの設定

画像19

中間テーブル(Dim_Blood_and_Gender)と、血液型のDimensionテーブル、及び性別のDimensionテーブルとの間のリレーションシップは、「双方向」かつ「非アクティブ」にしておきます。

メジャーの設定

3つのメジャーを作成します。

1つ目は、レポート画面で「血液型」か「性別」のいずれが選択されているかを判別するために以下のメジャーを作成します。

X_Axis_Selected = 
IF (
   ISFILTERED ( Dim_Blood_and_Gender[X_Axis_Dimension] ),
   IF (
       CALCULATE ( HASONEVALUE ( Dim_Blood_and_Gender[X_Axis_Dimension] ), ALLSELECTED () ),
       VALUES ( Dim_Blood_and_Gender[X_Axis_Dimension] )
   )
)

2つ目は、人数(データテーブルの行数)をカウントするために、以下のメジャーを作成します。(これはグラフには使用しません。3つ目のメジャーの中に埋め込みます)

Head_Count = 
COUNTA(Data_Table[#])

最後に、上記のカウント用のメジャー、及びリレーションシップの設定だけでは、うまく計算できないので、選択に応じてリレーションシップの切り替えを行いながらカウントができるように、以下のメジャーを作成します。

Head_Count_Selected = 
IF (
   NOT ( ISBLANK ( [X_Axis_Selected] ) ),
   SWITCH (
       [X_Axis_Selected],
       "血液型",
       CALCULATE (
           [Head_Count],
           USERELATIONSHIP ( Dim_Blood_and_Gender[Blood_Type], Dim_Blood_Type[Blood_Type] )
       ),
       "性別",
       CALCULATE (
           [Head_Count],
           USERELATIONSHIP ( Dim_Blood_and_Gender[Gender], 'Dim_Gender'[Gender] )
       )
   )
)

グラフの配置

最後に、レポート画面に行って、スライサーと積み上げ縦棒グラフを設置し、

スライサーには、中間テーブル(Dim_Blood_and_Gender)の、「X_Axis_Dimension」列を入れます

積み上げ縦棒グラフの「軸」には、中間テーブル(Dim_Blood_and_Gender)の、「X_Axis_Selected」列をいれ、「値」に先ほど3つ目に作成したメジャー[Head_Count_Selected]を入れます。

すると、以下のようになります。

性別を選択すると・・・

画像21

血液型を選択すると・・・

画像22


以上になります。

この記事が気に入ったらサポートをしてみませんか?