top of page

Tableau実践問題集 #TableauChallenge を作りました。

Tableau Set Action 勉強ノート3:Drilled-Down Table


Set Action勉強ノート3回目です。このシリーズはタグ「Set Action」で管理しています。

おなじみSuperStoreデータを使います。このブログに使ったTableauファイルは以下からダウンロードできます。

 

【Drilled-Down Table】

以下の記事に基づいています。

ちなみにですが、巷でLindseyさんは「Set Actions Queen」の異名を持つほど、多くのSet Action事例を投稿されています。Tableau Public等のフォローをお勧めします。

今回は下記のGIFのようなものを作ります。


2018年11月のPower BIアップデートで以下のような表が作れるようになったようです。


Table形式でサマリーを見せつつ、詳細をインタラクティブに見ることのできるこの機能は、確かに便利そうですね。それをTableauでもやってみよう、というのが今回の趣旨です。

今回は2つのディメンション(Category、Subcategory)で同様のものを作ります。下記計算フィールドを用意します。

Dimension1_DDtable

[Category]

Dimension2_DDtable

[Sub-Category]

Dimension1_DDtableからセットを作成します。最終的にはSet Actionで使用するのですが、ワークシートでの作業上は一旦Furnitureのみ含めます。以下、作成したセット名を「Dimension1_DDtable (Bar Chart Breakout)」とします。

このセットを用いて、以下の計算フィールドを作成します。

Dimension2_DDtable_Breakout

IF [Dimension1_DDtable (Bar Chart Breakout)] THEN [Dimension2_DDtable] END

過去のSet Action勉強ノートを読んで頂いている方にはご存知の通り、要はセットにInならばDimension2_DDtableを返す、というだけです。

これらを下記のように設置します。


次に、メニューバーの「分析」→「合計」→「全ての小計を追加」をクリックします。

その後、例えばSalesを使いたいとして、下記の計算式を用意します。

Sales Calc

SUM(IF [Dimension1_DDtable (Bar Chart Breakout)] THEN [Sales] END)

Sales Calcを列シェルフに置きます。その後、表のDimension2_DDtable_Breakoutの「NULL」を右クリック→「非表示」をクリックします。

次に、Bar Chartの色のために以下の計算式を作成します。

Dimension2_DDtable_Breakout_Color

IF ATTR([Dimension1_DDtable (Bar Chart Breakout)]) THEN IF MIN([Dimension2_DDtable_Breakout]) != MAX([Dimension2_DDtable_Breakout]) THEN "Total" ELSE "Not Total" END ELSE "Total" END

この計算式の重要なところは2行目です。これは式を説明するより、以下の2つのツールヒントを見て頂いた方が面白いと思います。



合計では全てのDimension2_DDtable_Breakoutを用いて計算するので、その他のセルと異なり、上記のような結果になるんですね。言われてみれば納得ですが、初めて上記のような計算式を書いた気がします。

作成したDimension2_DDtable_Breakout_Colorを色マークに入れ、Totalを隠したいのでワークシートの背景色と同じにします。Not Totalはお好きな色をどうぞ。

ヘッダーに「合計」と表示されているのを空白にします。「合計」を右クリック→書式設定→「合計」の「ラベル」内の文字列を削除します。

また、合計を上に持ってきたいので、メニューバーから「分析」→「合計」→「列合計(上に表示)」をクリックします。ここまでで以下のようになっているはずです。


次に、数字のラベル周りを整備していきます。Salesを揃えて表示させたいのですが、普通にBar ChartのテキストマークにSalesを入れると、数字が表示される場所がバラバラで(各Barの右端)、視点の動きが忙しくなりそうです。

ならば、どのように数字の表示される位置を固定させるか。とりあえず2通りあるかなと考えています。

1.良い感じのメジャーを作成し、不連続で行シェルフに入れる。

2.表示されているSales Calcの最大値をとるメジャーを作成し、2重軸→軸の同期をし、作成したメジャーにSalesを右揃えで表示させる。

今回は参考記事に沿って2を採用します。そのために下記の計算式を用意します。

Max Sales

IFNULL( {MAX({fixed [Dimension1_DDtable]: MAX({fixed [Dimension2_DDtable]: [Sales Calc]})})} , 0)

IFNULLはいいとして、この式で行っていることは

1.各Dimension2_DDtableにおけるSales Calcを計算し、その中でも最大のものを取得し

2.各Dimension1_DDtableにおける、1の最大値を取得し

3.2の結果をテーブル全体に適用させる

ことをしています。初めて知りましたが{}でテーブル全体を指定するLODになるんですね。

これにより、合計含めた全てのセルに、表示されているBar Chartの最大値が付与されます。

(ちなみに表計算でもっと簡単に書けるんじゃないかと実験しましたが、ダメでした。合計で値が変なことに。どなたか表計算でリプレイスできる方法をご存知でしたら教えてください。)

作成したMax SalesをSales Calcに二重軸、軸の同期で追加します。ここで、何かやたら左に寄っていることに気づきます。原因は「合計」です。先ほど色をワークブックの背景色に合わせましたが、オレンジでハイライトします。


なぜこうなるかというと、Sales Calcの「合計」は「各Dimension2_DDtable‗Breakout内の項目の、Sales Calcの合計値の合計値」だったからです。つまり累計和になっています。

したがって、これを累計和以外に変えてやれば、軸の範囲はむしろMax Salesに従います。例として最小値に変更します。

良い感じになりました。 あとはフォーマットを整えるだけですが、要所のみ以下に箇条書きします。

・Max Salesはチャートタイプを「円」にします。色マークの不透明度を0%に、ラベルにSalesを追加します。この時にラベルの配置を右揃えにしてください。マークサイズも最小に設定します。

・二重軸の上側は、軸タイトル(今回の場合Sales)だけが表示されるように「軸の編集」の項目を設定します。下側の軸は何も表示しないように設定します。

・行と列の境界線、軸のグリッド線などを適宜設定してください。

また、ドリルダウンっぽく見せるために、下記の計算フィールドを用意します。

Dimension1_DDtable_Label

IF [Dimension1_DDtable (Bar Chart Breakout)] THEN "⊟ " + [Category] ELSE "⊞ " + [Category] END

残りの細かいところは添付ワークブックを見て頂くとして、Profit、Profit Ratioについても同様の操作をすれば完成です。

ちなみに、Bar Chartの色を数値と一致させるため、自分の作品では以下の計算フィールドを使用しています(ただし白を中間に含むカスタム分化、また背景色が白の場合にしか使えませんが)。

Dimension2_DDtable_Breakout_Color_Sales

IF ATTR([Dimension1_DDtable (Bar Chart Breakout)]) THEN IF MIN([Dimension2_DDtable_Breakout]) != MAX([Dimension2_DDtable_Breakout]) THEN 0 ELSE SUM([Sales]) END ELSE 0 END

Drilled-Down Table、いかがだったでしょうか。

そもそもの モチベーションがPower BIの再現でしたが、この作り自体は汎用性が高そうです。

ご質問等はTwitter、Linkedinで頂ければ幸いです。

bottom of page