WorkoutWednesday2019week09 - Remove the Scroll bar


今週のワークアウト概要

http://www.workout-wednesday.com/2019-week-9/

https://tabsoft.co/2GRw72Z

今週はスクロールバーの代わりに10個ずつ表示を順順に切り替えていくVIZ。ランキングに応じたグルーピングと軸の固定が肝になります。

要件

  • ダッシュボードサイズは 1000px x 600px
  • Create a visualization with bar charts that show total sales, total profit, and total quantity by city-state (See below for state abbrevation calculation). Sort by sales.
  • 合計売上、合計利益、合計数量を表す棒グラフをcity-state(州の省略形を作る計算式をこの後に記載7えるので参考に)ごとに作成し、売上でソートする。
  • cityを10個ずつのグループに分ける計算式を作る。グループの名前は「1−10」、「11−20」のようにランキングを元につける。
  • 棒グラフの長さは最大値に対する割合になるようにする。ただし軸の固定は使わない。
  • 利益にのみゼロ線を引く
  • フォントサイズは11、棒グラフの色は#ED7470
CASE [State]
WHEN "Alabama" THEN "AL"
WHEN "Alaska" THEN "AK"
WHEN "Arkansas" THEN "AR"
WHEN "Arizona" THEN "AZ"
WHEN "California" THEN "CA"
WHEN "Colorado" THEN "CO"
WHEN "Connecticut" THEN "CT"
WHEN  "Delaware" THEN "DE"
WHEN "District of Columbia" THEN "DC"
WHEN "Florida" THEN "FL"
WHEN "Georgia" THEN "GA"
WHEN "Idaho" THEN "ID"
WHEN "Illinois" THEN "IL"
WHEN "Indiana" THEN "IN"
WHEN "Iowa" THEN "IA"
WHEN "Kansas" THEN "KS"
WHEN "Kentucky" THEN "KY"
WHEN  "Louisiana" THEN "LA"
WHEN "Maine" THEN "ME"
WHEN "Maryland" THEN "MD"
WHEN "Massachusetts" THEN "MA"
WHEN "Michigan" THEN "MI"
WHEN "Minnesota" THEN "MN"
WHEN "Mississippi" THEN "MS"
WHEN "Missouri" THEN "MO"
WHEN "Montana" THEN "MT"
WHEN "Nebraska" THEN "NE"
WHEN "Nevada" THEN "NV"
WHEN "New Hampshire"    THEN "NH"
WHEN "New Jersey" THEN "NJ"
WHEN "New Mexico" THEN "NM"
WHEN "New York" THEN "NY"
WHEN "North Carolina" THEN "NC" 
WHEN "North Dakota" THEN "ND"
WHEN "Ohio" THEN "OH"
WHEN "Oklahoma" THEN "OK"   
WHEN "Oregon" THEN "OR"
WHEN "Pennsylvania" THEN "PA"
WHEN "Rhode Island" THEN "RI"
WHEN "South Carolina" THEN "SC"
WHEN "South Dakota" THEN "SD"
WHEN "Tennessee" THEN "TN"
WHEN "Texas" THEN "TX"
WHEN "Utah" THEN "UT"
WHEN "Vermont" THEN "VT"
WHEN "Virginia" THEN "VA"
WHEN "Washington" THEN "WA"
WHEN "West Virginia" THEN "WV"
WHEN "Wisconsin" THEN "WI"
WHEN "Wyoming" THEN "WY"
END

データ

サンプルスーパーストア

シェア

終わったらTwitterで「#WorkoutWednesday2019」タグをつけてシェアしよう。
@AnnUJackson, @LukeStanke, @lorna_eden, @curtisharris_をタグづけることも忘れずに。

レシピ

City-Stateフィールドの作成

今期は「[都市名] ,[州名(省略形)]」という形式で都市の名前を表示する必要があ流ようです。そこで、まずは上述の計算式で省略形の州名フィールドを作ります。

次にCityと今作ったState(Abbr)をくっつけたフィールドを作ります。Tableauの機能で結合フィールドを作る方法もあるのですが、あとあと困ったことになるので今回はこれで作ります。時間があればその辺もまとめます。

まずは基本的なVIZを作成

「City-State」をRowsに、「Sales」、「Profit」、「Quantity」をColumnsに入れます。スクショの赤字のボタンを押せばSalesの順にソートされます。

ランキンググループの作成

City-Stateを「1-10」、「11-20」、「21-30」...といったグループに分ける必要があるのでそれ用のフィールドを作ります。最初はかっこいい方法が浮かばなくて以下のようなフィールドを頑張って作りました。

しかしINDEX()関数を使うとこんな面倒からは解放されます。ということをMuku Inoyamaさんのブックで勉強しました。
https://public.tableau.com/profile/miki.inoyama#!/vizhome/WOW_W0920190227CanYouRemovetheScrollBar/1

INDEX()関数は表計算関数の一つで、表計算における計算の順序を返してくれる関数です。small multiple(例えばこんなの)を作るときなんかにもとても便利な関数です。

丁寧に見ていきます。

Rowsに「City-State」を入れて、Columnsをダブルクリックして直接「INDEX()」と入れて見てください。Text Labelも表示すると以下の画面になります。これはCity-Stateの並び順に番号がついている状態です。

INDEX()のピルを右クリックしてEdit Table Calculationを選択。

するとこんな画面が出てきます。Table(down)なのでVIZ上にある全てのマークに対して上から順に番号をつけている状態です。

一度閉じてColumnsにSalesを入れてソートして見ましょう。以下の通り、並び順は変わりましたがINDEX()は表示されている順番で番号をつけているのでやはり上から順に1,2,3...とついています。この数字を利用してグループ名のフィールドを作っていきます。

作りたいのは1〜10番目の都市は「1-10」というグループ、11〜20番目の都市は「11-20」というグループ、となるようなフィールドです。ここは2段階で作ります。

まず以下のRankingGroupNumberを作成。

次にRankingGroupNumberを元にRankingGroupNameを作成。

すると以下のような感じにグループ分けを実現できます。

INDEX()の値 RankingGroupNumber RankinGroupName
1 1 1-10
2 1 1-10
3 1 1-10
... ... ...
9 1 11-20
10 1 11-20
11 11 11-20
12 11 11-20
... ... ...

より明示的なINDEX()の指定

今回はINDEX()の表計算を「Tableau(down)」のまま使いましたが、実はこのままだとSales以外のメジャーでソートしたりすると崩れてしまします。以下のようにすると、より明示的にCity-Stateを合計Salesの降順で並べて番号をつける、と指定することができます。

RankingGroupNameでフィルターする

VIZに選択している「RankingGroupName」の10個だけを表示するためにフィルターに「RankingGroupName」を入れます。

適当に「1-10」を選んでおくといいと思います。

右クリックして「Show Filter」を選択。

右側にFilterが表示されます。これを指定されている形式に変えていきます。

フィルターの右上にある▼をクリックし「Single Value(slider)」を選択。

同様にCustomizeにて「Show "All" Value」と「Show slider」のチェックを外す。

加えて、「Edit Title」にてタイトルを「Select cities by rank.」に変更。

するとこんな感じに指定されている形式まで持っていことができました。

微修正

色の変更

AllにてColorをクリックし「More colors...」を選択。

「RGB Sliders」にて16進数での色指定が可能なので指定されている「ED7470」を入れてOK。

ヘッダの除去

軸を右クリックして「Show Header」のチェックを外す。

グラフ上の軸を除去

グラフ上で適当な場所を右クリックして「Format」を選択。日本語だと「書式」。

「Lines」の設定にて「Sheet」の「Zero Lines」をNoneに。

同様に「Columns」の「Grid Lines」もNoneに。

「Borders」設定にて、「Columns」の「Columns Divider」の「Pane」をNoneに。

ラベルを表示、書式も編集

「Show mark labels」をチェック。

書式にて「SUM(Sales)」を選択。

「Pane」の「Defaul」の「Numbers」で書式を以下のように設定。

他のメジャーについても同様に書式を変更する。

軸の範囲の固定

ここが今回の二つ目の肝。ここではリファレンスラインを使って軸の範囲を固定させます。現状ではランキングが下がっていくごとに軸の範囲が小さくなっていくと思います。これを1-10グループの時と同じにしておく作業です。

各メジャーにおける最大値をリファレンスラインとして設置することで実現します。そのためには以下の計算式を作る必要があります。「Profit」だけはマイナスの値もあるので、「Min Profit axis」を作っています。




それらを各メジャーの「Detail」に入れてリファレンスラインとして追加します。リファレンスラインは「Label」と「Line」をNoneにすることで表示上、見えないようにしています。


他のメジャーも同様にリファレンスラインを追加して軸を固定します。

Profitのみゼロラインを作る

これもリファレンスラインで作ります。Profitだけ以下のようにリファレンスラインを追加します。

ダッシュボードを作成

以下のレイアウトで組むといい感じになります(左下のItem hierarchyを参考にしてください)。

終わりに

スクロールバーは長すぎると今どこにいるのか見失いがちなので、とても良い表現方法の一つだと思う。またリファレンスラインで軸の範囲を固定したりゼロラインを作るというのは新鮮な使い方で目から鱗だった。やっぱりWorkoutWednesdayは勉強になる。
今回はかなり細かくまとめたけれど細か過ぎて時間かかり過ぎなので、次はもう少しポイント絞って簡素にまとめてみたいと思う。