勉強のために参加している、WorkoutWednesday というオンラインイベントで出題される問題のうち、
自分が解いたものについて、解答のポイントを整理しているメモです。
WorkoutWednesdayおもしろそう、勉強になりそうと思っているが、いっぱいあってどれから手をつけたらええんやろ、となっている方の参考になればと思い公開しています。
解いたら順次更新。気が向いたらもう少し詳細な解答手順等載せられたらいいな。
WorkoutWednesdayについての説明はこちらの公式サイトを参照。
目次
項目説明
Week1-10
Week11-20
Week21-30
Week31-40
Week41-
項目説明
以下の「ポイント」には解答のネタバレが含まれていますので、イチから自分でチャレンジしようという方は気を付けてください。
Week1-10
Week8
チャレンジはこちら
難易度
★★☆☆☆(かんたん)
ポイント
- DashboardExtension - Brush Filter を使えるかどうか
- ヘッダ用に、最新日付と最後の日付をLOD計算で取ってくる
- 増えた/減ったは普通に引き算すればよい
- 日付の書式設定(英語に合わせる)
- 軸線、列の網掛けの設定
業務役立ち度
★☆☆☆☆
- 書式設定や、データ上の最大、最小日付を取ってくるのは使うかな
Week9
チャレンジはこちら
難易度
★★★★★(むずかしい)
ポイント
- マップレイヤーを使う(すべての国、パラメータ選択した国、ドーナツ外側、ドーナツ内側)
- すべての国のレイヤーは国を選択していないときだけ、それ以外は何か国を選択したときだけ表示させる
- 国名パラメータ 選択解除したら「ALL」等の値にすることで制御
- すべての国は、「ALL」になっているときだけ、選択された国はパラメータと一致するときだけ値を入れるようにすると、「すべての国」「パラメータ選択した国」それぞれどちらかのレイヤしか値が入らなくなる
業務役立ち度
★☆☆☆☆
- マップを多用する業務ならレイヤの知識を深めるのによいかもしれない。ここまで細かい制御は業務ではやらないかも。。。
Week10
チャレンジはこちら
難易度
★★★★☆(ややむずかしい)
ポイント
- セットコントロールを2つ作り、1つ目、2つ目の製品を選ばせる
- セットに含まれる製品が1つ以上あるオーダーを求める(数を数えて1以上)
- セット2つ目の選択肢をコンテキストに含まれるものにしないといけない(コンテキストフィルタ化するためにFIXEDを使う)
- トップのバナーにフィルタを転用できない(FIXEDを使うと割合計算ができない)ので別のフィルタを適用する
業務役立ち度
★★★★☆
- 典型的なマーケットバスケット分析のvizなので、この手法は抑えておくと使いどころがあるかも。
Week11-20
Week11
チャレンジはこちら
難易度
★★☆☆☆(かんたん)
ポイント
- 複数データの結合、ピボット(どれを左にするか)
- ページセレクタ
- 対数軸の設定
- テキスト表(ヘッダ非表示)をハイライターに使う
- UPPER関数の使用
- 浮動オブジェクトの順序
業務役立ち度
★★★★☆
Week12
チャレンジはこちら
難易度
★★☆☆☆(かんたん)
ポイント
- Include文を適切に使えるか
- クリックしても選択されないダミー制御(これは知ってるか知らないかの世界)
- ハイライトアクションでやる方法はYoutube動画やブログ記事参照
- マークアニメーションを設定
業務役立ち度
★★★★☆
- クリックしても反転しない、というギミックは覚えて損ナシ
Week13
チャレンジはこちら
難易度
★★★★★(むずかしい)
ポイント
- マリメッコチャートの応用
- LODを使い、利益が出ているオーダーを取り出す
- 二重軸+符号反転を使って棒グラフを積み上げる
- 黒字オーダーの割合>売上 の順でどう並び替えるか(オーダー割合を極大値にして足す)
- 横軸を売上の累計割合に、サイズを売上の割合に
業務役立ち度
★☆☆☆☆
- このチャート実業務で使ったことないので。。。
Week14
チャレンジはこちら
難易度
★★★★☆(ややむずかしい)
ポイント
*バスケット分析
*2回目購買をFIXED LOD表現を使って出す
*パラメータ選択したサブカテを購入しているオーダーIDをセット等で抜き出す、パラメータ選択していないサブカテのみ表示する 等がポイント
- パラメータを使ったシートの切り替え
- ツリーマップをレイアウトコンテナ内で幅ゼロにする方法(行列にdummyを入れとくとゼロになる( 小ネタ )
・パラメータアクションを使ったトグルボタン(ダミーアクション付き)
業務役立ち度
★★★★★
- 「2回目の購買」をLOD計算で出す、はかなり使う
- ツリーマップ等、普段行列シェルフに何も入れないチャートをパラメータ切り替えで非表示にした際、幅・高さをゼロにするテクニックはいろいろなところで使える
- トグルボタンも使い道色々
Week15
チャレンジはこちら
難易度
★★★☆☆(ふつう)
ポイント
- 日付フィールドのフォーマット(MakeTime関数)
- FIXEDを使い、時系列を無視した全体の集計値を出してリファレンスラインを引く
業務役立ち度
★★★☆☆
- バナーとスパークラインを組み合わせて表示するこのvizレイアウトは業務で使えそう(使った)
Week16
チャレンジはこちら
難易度
★★☆☆☆(かんたん)
ポイント
- クイックLOD表現が使えるか
- クイックLODでAVGを最初から表示する方法(既定のプロパティ)
- メジャー値の正負によるもツールヒント文字列の出し分け(above or below)
業務役立ち度
★☆☆☆☆
- (個人的意見)クイックLODは「わかってて使う」分にはよいが、理屈わからず使うと危険かな。。。
Week17
チャレンジはこちら
難易度
★★★★★(むずかしい)
ポイント
- 二重軸で点をうち、列の境界線の横にラベルを出す
- 世代ごとの人口ランクを「密度」で出す
- メジャーを不連続にしてヘッダに入れる
- 小数点を含む値の文字列化(集計しないとroundの結果がおかしくなる)
業務役立ち度
★☆☆☆☆
- 1シートでやらずにシート分けてダッシュボード化すればよいだけの話。
- もちろん勉強にはなるのでやって損はない。
Week18
チャレンジはこちら
難易度
★★★☆☆(ふつう)
ポイント
- vizを再現するのではなくてパフォーマンスチューニングしろって話
- いろいろやりようはあるが、、、
- データソースでできること:抽出作成時に未使用のフィールドを非表示に、ブレンドの代わりにリレーションシップを使う、データソースフィルタを入れて件数を絞る
- ダッシュボードでできること:下の明細表はどこかの州をクリックするまで非表示にする
- 上記だけでも結構早くなる。
業務役立ち度
★★★★☆
- データソースフィルタ使うとか、明細を最初から出さない、等は業務vizの性能向上にも有用。
Week19
チャレンジはこちら
難易度
★★★★☆(ややむずかしい)
ポイント
- マップレイヤーの使用
- 地域を計算フィールドで分割して違う色の枠線を付ける
- 計算フィールド化した地域のNULL値の処理(色の凡例などから非表示)
- パラメータアクション
- ディメンションをラベルに入れる際の注意(集計単位にならないよう属性、メジャー化)
- マップレイヤーの「選択項目を無効にする」オプション
業務役立ち度
★★☆☆☆
- ディメンションをラベルに入れるときにvizLODに含まないようにする、というテクニックは業務でも有用。
- あとはマップをどこまで使うか、か
Week20
チャレンジはこちら
難易度
★★★★★★(とてもむずかしい)
ポイント
- 日付計算がエグい 前年、前月の同じ曜日の日付を取ってくる
- 前年の同じ日を取得する方法は ブログ参照
- 前月の同じ日(週でtruncして同じ週を取ってきて、曜日が一致するものを取ってくる)
- 取得した日付をWINDOW関数でExpandする(しないと線グラフのフィルタができない)
- 線グラフ下部に同じシートでラベルを表示する(-500あたりに無理やりマークを作って透明にしてラベル出す等)
業務役立ち度
★★☆☆☆
- めちゃくちゃ勉強になるが、ここまで計算を使うか、というと微妙な話
- 小売業では「同じ曜日」が重要な要素になったりするが、そもそもMDカレンダーとかあるはずでそれ結合してしまえばよい話だし、、
Week21-30
Week22
チャレンジはこちら
難易度
★★★★★(むずかしい)
ポイント
- ちょっと異色のチャレンジ。可視化に必要なDesktop上のデータ処理スキルが求められる
- 正規表現でベッドルーム数を数える(いったんベッドルームを含む表現を探していって特定の文字列に置換し後で取り出す)
- ヒットやつがなくなるまで、正規表現を試行錯誤で作り上げていく
- 可視化のポイント:ビンの軸を、ビンのサイズだけずらす(0-100だったら100にする)
- sys_numbin関数(隠し関数)を使う(Data+Scienceの記事 参照)
業務役立ち度
★★☆☆☆
- Desktopでここまで正規表現で処理するというかというと微妙?
- binをずらすテクニックは使いどころあるかも
Week23
チャレンジはこちら
難易度
★★★☆☆(ふつう)
ポイント
- 年初来の売上高または前年売上から年間売上着地を見積もる(サブカテゴリ単位にトグルにで切り替え)
- 年初来の日数、1年間の日数(うるう年があるから365固定はダメ)の日付計算
- セットIN/OUTによるメジャーの切り替え、セットアクションによるインタラクティブ
- セットIN/OUTによるツールヒント値の切り替え
- ガントチャートを利用したブレットグラフ(目標値のツールヒント設定)
- 軸線の書式設定
業務役立ち度
★★★★☆
- YTDの売上から着地見込みを出す、というのは業務有用性◎
- セットアクションを使いこなせるようになると表現の幅がぐっと広がるので、そのユースケースという意味でも◎
Week31-40
工事中
Week41-
Week41
チャレンジはこちら
難易度
★★★☆☆(ふつう)
ポイント
- パラメータでNを指定した売上TOPNが、売上全体の何%を占めるか、をドーナツチャートで表したうえで、TOPNとそれ以外でサブカテゴリごとの売上とその小計を棒グラフ(長さは一定)で表現する
- ドーナツチャートは標準的な作成方法でOK(ラベルに表示するTOPNの表記を可変にするために計算フィールドを作る必要がある。この手のラベル用計算フィールドをいくつか用意するのがちと面倒)
- 棒グラフはプレースホルダ(MIN(1))で作る。長さが要るのでMIN(0)はダメです。
- TOP5/その他 はTOP Nのセットにいるかどうかで判別すればよい
- 順位(#1~)はINDEX()で作成
- SUBTOTALはアナリティクスペイン標準の小計行でOK
- 各棒グラフ+小計に表示するラベルを計算式で出し分ける。いろいろやりかたありそうだが、「その行におけるサブカテゴリの数が1かどうか」を小計か明細行かの判断基準として以下の計算式としてみた
IF countd([Sub-Category])<>1 THEN "SUBTOTAL FOR GROUP" ELSE MIN([Sub-Category]) END
業務役立ち度
★★★☆☆
- このドーナツはあまり使わないかもしれないが、、、
- プレースホルダを使い、同じ長さの棒にディメンションとメジャーを両方記述するテクニックは使いどころアリ
Week44
チャレンジはこちら
難易度
★★★★☆(ややむずかしい)
ポイント
- 「月、四半期、年」単位での現在の利益サマリをバナー表示し、サブカテゴリごとの利益TOP/BOTTOM5を棒グラフで表示する
- 今月など、最新値を取ってくるにはLOD計算を使う
- 棒グラフに表示する値は、バナークリック時にパラメータアクションでメジャーネームをパラメータに設定し、パラメータ値に応じて表示するメジャーを出し分ければよい
- TOP5/BOTTOM5のサブカテゴリでセットを作成しておき、どちらかにいればサブカテゴリ名、どちらにもいなければ"Everyone Else"とするような計算式を書いてそれを棒グラフの集計単位とすればよい
// [Sub-Category Bottom5] , [Sub-Category Top5]はセットの名称
IF [Sub-Category Bottom5] or [Sub-Category Top5] THEN [Sub-Category]
ELSE "Everyone Else" END
- サブカテゴリ名を利益がプラスであれば左側、マイナスであれば右側に出すのがちょっと大変。ラベル位置のプレースホルダとして下記の計算式を作っておき、列に設定して色を透明にする方法がある
//[c_BarProfitforDisplay]は棒グラフの長さに相当する利益
IF [c_BarProfitforDisplay]>=0 THEN -1 ELSE 1 END
業務役立ち度
★★★★☆
- 今月の売上、等をLOD計算で算出するテクニックは頻出
- ラベルの位置を左右で出し分けるテクニックは以外と使いどころあるのでは?
Week46
チャレンジはこちら
難易度
★★★☆☆(ふつう)
ポイント
- 今年度、昨年度の売上を棒グラフにした上で、その差を(細い)棒で表現する
- 棒グラフ+ガントチャートの2重軸で表現可能(これはよく使うテクニック)
- (いろいろやり方はあるが)大きい方の売上を列に配置し、(最新年の売上-1年前の売上の絶対値)×-1をサイズにしてあげると表現したい細い棒グラフができる
- カテゴリの間にスキマを作る必要あり(私も最初気づかず、一緒にチャレンジしている方に指摘してもらって「スキマつくるんかー」と気づきました)
- やりかたは単純で、必ずNULLになるアドホック計算(MIN(NULL) など)を入れてあげるだけ(プレースホルダなんだからいつものMIN(0)!ってやるとラベルが消えなくてハマる
- 地味に「2021年、2020年をハードコーディングしてはダメ」という指定があるので、データ内の最新年とその1年前をLOD計算を使ってとってくる必要あり
業務役立ち度
★★★★★
- 棒グラフ+ガントで差を表現するこの形はブレットチャートの代わりにもなるし、使いどころ◎
- 基本的なことだが、「データ内の最新年」等をLOD計算で取得する方法は実務で非常によく使う
Week47
チャレンジはこちら
難易度
★★★☆☆(ふつう)
要件
- Thanksgiving Dayに行われたNFLの試合結果をvizに表現する
- 勝敗をロリポップチャートで、「勝ち数-負け数」の累計をエリアチャートで表現する
ポイント
- Win->1, Loss->-1 として数値化し、棒グラフ+円 でロリポップチャートを作る
- グラフの軸に文字を出す(Win, Tie, Loss)ために、軸の数値形式にベタ文字を書く
- Total Game等の数値は、LOD計算またはWINDOW表計算を使って算出した値を不連続にして配置
- 累計のエリアチャートは、勝敗を数値化したものを単にRunningSumすればよい
業務役立ち度
★★★☆☆
- ロリポップチャートは難しくないし見た目のにぎやかしになるので、使いどころアリ
- 軸に文字を表示するテクニック、私もまだ使ったことないけど、今後使いたくなるかも
Week48
チャレンジはこちら
難易度
★★★★☆(ややむずかしい)
ポイント
- クリスマスツリーを背景イメージとし、各記事へのリンクをツリー飾りとしてXY軸上に配置する
- 飾り=WOW運営メンバーが選んだお気に入りのチャレンジ
- 飾りをクリックするとURLアクションでそのチャレンジページを開く
- 年ごとの飾り数(チャレンジ数)を棒グラフにし、色をグラデーションで塗る(これが難しい)
- テクニックはKevin & Ken Flerlageさんのブログ記事参照
業務役立ち度
★★★★☆
- XY座標+背景イメージを使ったviz表現は業務でも使いどころアリ
- 棒グラフ内でグラデーション色をつけるテクニックはどうかな…使えるとカッコイイ?
Week49
チャレンジはこちら
難易度
★★★★☆(やや難しい)
要件
- いわゆるマーケットバスケット分析のviz作成
- 同じオーダーIDで一緒に購買されたサブカテゴリをマトリクス表示する
- そのサブカテゴリの組で購買されたオーダーIDあたりの売上平均をそれぞれツールヒントに表示する
- リレーションを使わないといけない(MUST use logical data modeling)
- LOD表現は使ってはいけない(You are also NOT ALLOWED to use LODs, Table calculations only)
- ツールヒントにも気を配る必要あり(これがまた大変)
ポイント
-
マーケットバスケット分析を行う際の定番の所作としてOrderデータ同士を結合する(といっても物理的な結合禁止の制約があるのでリレーションを使う)
-
組み合わせた2つのOrderデータのサブカテゴリでクロス分析を行うが、2つ目(列になるほう)のサブカテゴリには「NONE」がある(=そのオーダーでは1つのサブカテゴリしか購入されなかった)ため、計算フィールドでNONEを作っておく(計算例: IIF([サブカテゴリ(2つ目のデータ)], 'NONE')
-
Index()を使って、列番号<=行番号 となるデータのみにフィルタすることで、左下のデータのみ表示できる
//行番号,列番号はそれぞれ下記の表計算関数を書くだけ
Index()
//左下のみをフィルタする計算
//計算の方向を、列番号は「表(横)」、行番号は「表(下)」とする
[列番号] <= [行番号]
- カラーパレットは「Color Brewer Blue Purple」を使用するように指定がある。Color Brewerに対応したパレット設定はTableauコミュニティで配布されているものを有難く使おう。(今回は BuPu 9 Color Seq Palette を使用すると問題とほぼ同じ色になる)
- カスタムカラーパレットの作成方法はオンラインヘルプ参照。
- 行に設定したサブカテゴリ、列に設定したサブカテゴリの平均売上を計算してツールヒントに入れる(LOD計算使えないので、 SUM([売上]) / COUNTD([オーダーID]) と愚直に計算する
- ツールヒント文字列の調整。よく見ると、列のサブカテゴリが「NONE」か「それ以外」で、ツールヒントに入る固定文字列が微妙に違う(SUB-CATEGORY/SUB-CATEGORIES, NONEの場合に一番下の行(列の売上)のコロンが消える))
- しょうがないのでがんばって計算式で出し分ける
//ツールヒントのCATEGORY/CATEGORIES
IF ISNULL([サブカテゴリ(2つ目データ)]) THEN "SUB-CATEGORY"
ELSE "SUB-CATEGORIES" END
//ツールヒントのコロン
IF NOT ISNULL([サブカテゴリ(2つ目データ)]) THEN ":" END
業務役立ち度
★★★★☆
- バスケット分析vizは作れたほうがよい(何度も同じこと書いてスミマセン)
- 地味に、「条件によってツールヒントやラベルの文字列を出し分ける」というのは、業務で使用するケースも多いのでは
Week50
チャレンジはこちら
難易度
★★★☆☆(ふつう)
要件
- カテゴリを選択すると、選択したもののみサブカテゴリごとにドリルダウンする + 売上の傾向を表す線グラフをカテゴリでフィルタする
- さらにサブカテゴリも選択すると、線グラフをサブカテゴリでフィルタする
- 選択解除するとドリルダウン、線グラフのフィルタが解除される
ポイント
- 棒グラフのドリルダウンといえば直感的にはSet Actionだが、、、これで突き進むとフィルタで悩む(できるけど、結局パラメータアクションを使うことになる。)
- 結果的にはパラメータアクションのみで実装可能
- 考えどころは線グラフのフィルタ。「何も選択されていないとき」「カテゴリだけフィルタしたとき」「サブカテゴリでフィルタしたとき」のフィルタ条件をひとまとめにする必要がある
業務役立ち度
★★★★★
- アクションを使ったドリルダウンはもはや定番と言っても良いかと
- パラメータアクションを使用する際、「選択項目を解除した際に固定の値を入れる(今回は空白とかallとかに相当するもの)テクニックも、パラメータアクションを使ったフィルタを行う際にはよく使う
Week51
チャレンジはこちら
難易度
★★★☆☆(ふつう)
要件
- 過去にWOWに投稿された数を、年・週・曜日ごとのヒートマップで表現する
- 色は、投稿数のパーセンタイル値
- 各セルをクリックすると、その日に投稿された数を2種類の棒グラフで詳細表示する(クリックするまで、または選択解除したら棒グラフは消え、ヒートマップが画面全体に戻る)
- 棒グラフでは、「問題が出題されたその週のvizかどうか」を区別する必要がある
ポイント
- まずは、投稿日時(TimeStamp)から「年」「曜日」「週」の3つのディメンションを作る
- 曜日は「Sun」「Mon」等の短縮形で表す必要があるが、日本語版のTableauDesktopで普通に書式設定「省略形」を用いると、「日・月・…」と日本語になってしまう。(別にこのままでもいいんだけど)題意にラクに合わせるには「ワークブックロケールの変更」を行う
- 「ファイル」>「ワークブック ロケール」から、「英語(アメリカ合衆国)」を選択すると、日付書式が英語表記となる
- 週(Week Submitted)は、Timestampをそのまま列シェルフに持っていき「週」に変えてしまうと、「01」等の表記にうまく変わらない(私では理由までわかりませんでした。。。)ので、計算フィールドを作成(単純に DATEPART('week', [Timestamp]) でOK)すると数値型になるので、書式設定で左ゼロ埋めを行ってあげる。
- 投稿数の色分けはレコード数で行えばよいが、パーセンタイル値を簡易表計算で算出する。全セルを対象とするので、表計算の方向は「表(横から下へ)」または「表(下から横へ)」を選択。
- 棒グラフのディメンション、色分けに使用する「Same Week」は、年及び週が同じであることを確認すればよい
year([Timestamp]) = [Challenge Year]
and
DATEPART('week',[Timestamp]) = [Challenge Week]
- ダッシュボード組み立てでは、棒グラフ2つを横に並べる水平方向レイアウトコンテナの高さを固定しないことがポイント。固定してしまうと、選択解除してもヒートマップが広がらない。
- ダッシュボードアクション(フィルタアクション)では、選択解除したときに「すべての値を除外」すること
業務役立ち度
★★☆☆☆
- メインのシート(ヒートマップ)で何かを選択するまで、他のシートを表示させない、というテクニックは使いどころがあるかな
- (小売業だと独自のMDカレンダーと結合して最初から数値になってるかもですが)不連続の週数を用いる際の書式設定は知ってて損はない?