![見出し画像](https://assets.st-note.com/production/uploads/images/173921369/rectangle_large_type_2_ea7fae17a28690df4ad9b1ab7bd55979.png?width=1200)
私の場合…WOW2025 Week6
今回は、キーとなるテクニックが盛りだくさんのお題です。
大きなところでは、「ダイナミックゾーンビジビリティ(ちょっと変形)」「INDEX関数」「セットを使ったフィルター」の3つです。
それ以外にも細かいTipsが随所にちりばめられていて、なかなかサックリとはいかない感じです。
▼今回のお題
お題のVizを覗いてみましたが、私とは全然ちがうとてもスマートな方法で作成されていました!
私の場合、カテゴリの棒グラフと商品別の棒グラフ用の各種計算式を共用で実装できずそれぞれ作ることにしたのですが、同じ計算式でできる手順になっていました。
とてもスマート…さすがArakawaさん。
ということで、いつもお伝えしていますが、ぜひぜひいろんな人のVizを覗いてみることをおススメします。
といいつつも、以下、私の手順です。
ひとつずつ、じっくりやっていきたいと思います。
1.全体を眺める
・カテゴリ別のBANと棒グラフが上下にならんでいる
・これらは2024年の売上
・棒グラフは2023年の売上が点線で表示→リファレンスライン
・カテゴリごとに売上の降順で並んでいる
・カテゴリーでフィルター→「すべて」があるのでパラメーターではない?
・フィルターで「すべて」を外すと横から商品別の売上棒グラフが出現→ダイナミックゾーンビジビリティ(以降、DZV)
・商品別の棒グラフ、最新年(2024年とは限らない)の売上とそのひとつ前の実績のある年(必ず1年前とは限らない)で構成
・フィルターで選択したカテゴリのみBANと棒グラフが表示
2.サブカテゴリ別の棒グラフを作る
要件定義に「2024年」と「2023年」の比較と明記されているんですが、ハードコーディングせずにトライしていきます。
最新年とその次に売上のある年
まずは、最新年とその次に売上のある年を求める計算式を作ります。
データを読み込んだ後、新しいシートを開きます。
以下2つの計算式を作ってそれぞれ名付けます。
最新年:[Latest Year]
//Latest Year
{ FIXED [Category]: MAX(DATEPART('year', [Order Date]))}
その次に売上のある年:[Previous Year]
//Previous Year
{ FIXED [Category]:
MAX(IF DATEPART('year', [Order Date])<>[Latest Year]
THEN DATEPART('year', [Order Date])
END)
}
<計算式の考え方>
・カテゴリーに固定して
・オーダー年が最新年と違う場合に
・オーダー年を計算する
・その中の最大値
「最新年を除いたものの中で一番最新の年」という考え方
データペインにある[Latest Year]を右クリックして「ディメンションに変換」をクリックします。
[Previous Year]も同様にディメンションに変更しておきます。
2024年と2023年の売上
「計算フィールドの作成」から計算式を作り以下のように名付けます。
2024年の売上:[Sales in 2024]
//Sales in 2024
IF DATEPART('year', [Order Date])=[Latest Year]
THEN [Sales]
END
2023年の売上:[Sales in 2023]
//Sales in 2023
IF DATEPART('year', [Order Date])=[Previous Year]
THEN [Sales]
END
2024年の売上棒グラフ
今回の棒グラフはカテゴリ別にサブカテゴリの売上が降順にならんでいます。
普通に、カテゴリを「列」にサブカテゴリを「行」に入れると、棒ブラフの並びに隙間ができてしまいますし、どれかひとつのカテゴリで並び変えると、他のカテゴリの並びがぐちゃぐちゃになります。
![](https://assets.st-note.com/img/1738842696-d5rzWn94FtYUSq0ycjp6fHsG.jpg?width=1200)
そこで登場するのが「INDEX関数」です。
左側のデータペインから[Category]を「列」に配置します。
続いて[Sales in 2024]を「列」([Category]の横)に配置します。(自動で合計)
「行」の空白部分をダブルクリックすると、直接計算式を書けるようになるので[INDEX()]と計算式を書きます。
[Sub-Category]を「マーク」の詳細に入れます。
すると、横一列に丸印が並んだ状態になります。
![](https://assets.st-note.com/img/1738842245-VB1ycTM9FX0zIthoj2d4RiDs.jpg?width=1200)
「行」にある[INDEX()]を右クリックして「表計算の編集」を選びます。
「表計算」の画面で、「特定のディメンション」の「Sub-Category」にのみチェックを入れます。
同じく「表計算」の画面で、「並べ替え順序」の「カスタム」を選び「Sales in 2024」の「合計」で「降順」を選びます。
「行」にある[INDEX()]を右クリックし「不連続」を選びます。(緑→青)
これで、カテゴリ別にサブカテゴリを売上の高い順に並べることができます。
![](https://assets.st-note.com/img/1738843058-P0vqR7spuDcZztVAd2gErkO4.jpg?width=1200)
2023年の売上の点線
左側のデータペインから[Sales in 2023]を「マーク」の「詳細」に入れます。
「アナリティクス」タブをクリックして、「リファレンスライン」をグラフの上にドラッグすると「リファレンスラインの追加」画面が表示されるので、「セル」の上で色が変わったところでドロップします。
「リファレンスライン、バンド、またはボックスの編集」画面で以下の画像のように設定します。
※線の種類は、大きめの点線で一番細い太さ、色は黒色の不透明100%
![](https://assets.st-note.com/img/1738843607-S4sT5qUlHYDug37oXwxeVIOL.jpg?width=1200)
棒グラフの色は、2024年と2023年の前年比成長率で色分けされています。
前年比成長率を求める計算式を作ります。
新しく計算式をつくり[YoY]と名付けます。
//YoY
(SUM([Sales in 2024])-SUM([Sales in 2023]))/SUM([Sales in 2023])
[YoY]を「マーク」の「色」に入れます。
![](https://assets.st-note.com/img/1738911156-8lr0RYTa3C9Z2SMKGimjFAnL.jpg?width=1200)
ラベルの設置
「マーク」の「ラベル」に[Sub-Category]と[Sales in 2024]を入れます。
「ラベル」をクリックして「テキスト」をクリックします。「ラベルの編集」画面で、レイアウトを左寄せにします。
数値の書式設定の変更
左側のデータペインにある[Sales in 2024]を右クリックし、「規定のプロパティ」から「数値形式」を選びます。
「規定の数値形式」画面で、「通貨(カスタム)」を選び「プレフィックス」を「¥」から「$」に上書きします。
[Sales in 2023]も同様に書式を変更します。
次に[YoY]を右クリックし、「規定のプロパティ」から「数
値形式」を選びます。
「規定の数値形式」画面で、「カスタム」を選び「書式設定」に以下情報を書き込みます。
+0.0%;-0.0%
<カスタムの書式設定>
カスタムの書式設定は、プラス数値、マイナス数値、ゼロを「;」で区切って書式を定義します。
こんな感じです。
↓↓
プラス数値;マイナス数値;ゼロ
今回の場合だと、プラス数値のところに「+」を付けたいので、カスタムの書式設定を使いました。
![](https://assets.st-note.com/img/1738911537-BpVmJtuNZi28dUcT6SxFoIXW.jpg?width=1200)
軸を整える
「列」にある[Category]を右クリックして、「ヘッダーの表示」のチェックを外します。
「行」にある[INDEX()]も同様に「ヘッダーの表示」のチェックを外します。
横軸をダブルクリックして「軸の編集」画面で「タイトル」を空白にします。
線を整える
上部メニューの「書式設定」をクリックし「枠線」を選びます。
「枠線の書式設定」で「列の境界線」の「ヘッダー」を「なし」にします。
これで、棒グラフは完成です。
ツールヒントを整える
次に「マーク」の「ツールヒント」に[Latest Year]を入れます。(自動で属性になる)
「ツールヒント」をクリックし、「テキスト」で以下画面のとおり設定します。
![](https://assets.st-note.com/img/1739015404-r4NcDzLbBSIO8eWAGx1Uhql5.jpg?width=1200)
3.フィルターをセットする
今回のフィルターには「すべて」が含まれているので、パラメーターではないな、と思いました。
残りはディメンションフィルターかセットなんですが、ヒントに「ディメンションフィルターではない」とあるので、セットを使うことにしました。
左側のデータペインの[Category]を右クリックし「作成」から「セット」を選びます。
「セットの作成」ですべてのカテゴリにチェックを入れて「OK」をクリックします。
[Category セット]を「フィルター」に配置します。
「フィルター」に配置した[Category セット]を右クリックして「セットの表示」を選択します。
右側に表示されたセットの凡例をポチポチして、フィルターがうまく動いていることを確認します。
タイトルを変更する
シートの左上にあるタイトルをダブルリックし、「タイトルの編集」画面でお題のVizを参考にタイトルを変更します。
(私の場合、1行名は15ポイント、2行名は10ポイントの斜め字)
最後に、シート名を「sub-categry」に変更します。
4.BANをつくる
BANの作りはいろいろありますが、今回は文字色が[YoY](前年比成長率)の色と同じ、というところがポイントです。
新しくシートを開きます。
データペインから[Category]を「列」に配置します。
「マーク」の「テキスト」に[Latest Year][Sales in 2024][YoY]を入れます。
次に「マーク」の「色」に「YoY」を入れます。
画面表示を「ビュー全体」にしておきます。
![](https://assets.st-note.com/img/1739015492-9SyOwf5cL7FpJXbRNCnuVgBP.jpg?width=1200)
「列」にある[Category]を右クリックし「書式設定」を選びます。
「ヘッダー」のタブで「フォント」を「14P」の「太字」「黒色」に変更し、「配置」を「左」にします。
「マーク」の「ラベル」をクリックし「ラベルの編集」画面で以下の画面のとおり設定します。
(2行目は20P、その他の行は12P、左寄せ)
![](https://assets.st-note.com/img/1739015809-IlSeEm4ciqKb6FA2sMaPDYuB.jpg?width=1200)
「マーク」の「ツールヒント」をクリックして「ツールヒントの表示」のチェックを外します。
表の上部にあるフィールドラベル(「Category」の文字)を右クリックし「フィールドラベル」の非表示をクリックします。
シート名を「BAN」に変更します。
BANも、カテゴリのフィルターと連動する必要があります。
「Sub-Category」シートに戻り、「フィルター」にある「Category セット」を右クリックし、「適用先ワークシート」の「選択したシート」を選びます。
「フィルター適用」画面で「BAN」にチェックをいれ「OK」をクリックします。
これでBANは完成です。
5.プロダクト一覧の棒グラフを作る
プロダクト一覧の棒グラフは、よくよく見ると2024年の売上の棒グラフではありません。
この辺り、要件に詳し記載がないので、カテゴリーの棒グラフに合わせてもいいのですが、”可能な限りお題のVizを再現する”というポリシーに則り、プロダクトごとに最新の年の売上になるよう棒グラフを作成していきます。
少し状況が複雑なので、棒グラフを作る前に表の状態で確認しながら計算式をつくっていきます。
新しいシートを開き、「行」に[Product Name]と[Orde Date]を不連続の年(青色、「年(Order Date)」)として配置します。
続いて、表に[Sales]をドロップします。(自動で合計になる)
プロダクトによって売上のある年とない年があるのが分かります。
![](https://assets.st-note.com/img/1739016326-LOBEIvz5aWShiP1tmUfq326k.jpg?width=1200)
プロダクトごとの売上最新年
新しく計算式をつくり[Latest Year_Product]とします。
//Latest Year_Product
{ FIXED [Product Name]:MAX(DATEPART('year', [Order Date]))}
[Latest Year_Product]を右クリックし「ディメンションに変換」を選びます。
続いて、[Latest Year_Product]を「行」に配置します。
プロダクトごとに売上のある最新年が表示されていることを確認します。
![](https://assets.st-note.com/img/1739016670-qK72pHadjhMe9YCDIGARuUFx.jpg?width=1200)
プロダクトごとの売上最新年のひとつ前の売上年
この場合の「ひとつ前」は単純に最新年-1年ではなく、「最新年のひとつ前に売上のある年」です。
計算式の考え方としては、「最新年を除いたものの中で一番最新の年」になります。(カテゴリ別売上の時と同じ)
新しく計算式をつくり[Previous Year_Product]と名付けます。
//Previous Year_Product
{ FIXED [Product Name]:
MAX
(IF DATEPART('year', [Order Date])<[Latest Year_Product]
THEN DATEPART('year', [Order Date])
END)
}
[Previous Year_Product]を右クリックし「ディメンションに変換」を選びます。
[Previous Year_Product]を「行」に配置します。
最新年のひとつ前に売上のあった年(必ずしも1年前とは限らない)が表示されていることを確認します。
![](https://assets.st-note.com/img/1739017029-u0IH7CWRbes6TSt4FGrfOmUB.jpg?width=1200)
それぞれの年の売上、前年比成長率を計算する
新しく計算式をつくり、それぞれ以下のように名前をつけます。
最新年の売上:[Sales in Latest Year]
//Sales in Latest Year
IF DATEPART('year', [Order Date])=[Latest Year_Product]
THEN [Sales]
END
最新年のひとつ前の年の売上:[Sales in Previous Year]
//Sales in Previous Year
IF DATEPART('year', [Order Date])=[Previous Year_Product]
THEN [Sales]
END
前年比成長率:[YoY_Product]
//YoY_Product
(SUM([Sales in Latest Year])-SUM([Sales in Previous Year_Product]))
/SUM([Sales in Previous Year_Product])
データペインから[Sales in Latest Year]を表の[Sales]の上にドロップします。
「マーク」の下に「メジャーバリュー」が自動生成されます。
「メジャーバリュー」に[Sales in Previous Year]を入れます。
最新年(黄色下線)、最新年のひとつ前の売上年(緑色下線)に売上が表示されることを確認します。
![](https://assets.st-note.com/img/1739023270-3pvLKte9FcOGV4WoduswqfXx.jpg?width=1200)
[YoY_Product]については、この状態でメジャーバリューに追加してもうまく計算されないので(空白になってしう)、一旦ここでの検証は省略します。
表を使っての検証はこれで完了です。
棒グラフをつくる
新しくシートを開きます。
左側のデータペインから[Sales in Latest Year]を「列」にいれます。(自動で合計になる)
つづいて、[Product Name]を「行」に入れます。
横軸のタイトル「Sales in Previous Year」にカーソルをあわせるとタイトルの横に三本線のアイコンが表示されるので、それをクリックして、売上の降順に並べ替えます。
「マーク」の「色」に[YoY_Product]を入れます。
次に、「マーク」の「詳細」に[Sales in Previous Year]を入れます。
左側の「アナリティクス」タブをクリックして、「リファレンスライン」をグラフの上にドラッグすると「リファレンスラインの追加」画面が表示されるので、「セル」の上で色が変わったところでドロップします。
「リファレンスライン、バンド、またはボックスの編集」画面で以下の画像のように設定します。
※線の種類は、大きめの点線で一番細い太さ、色は黒色の不透明100%
![](https://assets.st-note.com/img/1739095833-IC21dWz7rOw803nAmelkcXoN.jpg?width=1200)
「マーク」の「ラベル」に[Sales in Latest Year]を入れます。
続けて「ツールヒント」に[Latest Year_Product]を入れます。(自動で属性になる)
左側のデータペインにある[Sales in Latest Year]を右クリックし、「規定のプロパティ」から「数値形式」を選びます。
「規定の数値形式」画面で、「通貨(カスタム)」を選び「プレフィックス」を「¥」から「$」に上書きします。
[Sales in Previous Year]も同様に書式を変更します。
次に[YoY_Product]を右クリックし、「規定のプロパティ」から「数
値形式」を選びます。
「規定の数値形式」画面で、「カスタム」を選び「書式設定」に以下情報を書き込みます。
+0.0%;-0.0%
「マーク」の「ツールヒント」をクリックし、以下画面のように設定します。
![](https://assets.st-note.com/img/1739096435-1FOEglmsPQXSKpHt6cAYUZdw.jpg?width=1200)
商品名が長いので、できる限りすべての文字が見えるよう、フィールドラベルの横幅と高さを広げます。
フィールドラベルの一番上にある「Product Name」の文字を右クリックして「行のフィールドラベルの非表示」をクリックします。
「マーク」の「サイズ」をクリックして棒グラフの幅を少し小さくします。
横軸をダブルクリックして、「軸の編集」画面でタイトルを空白にします。
![](https://assets.st-note.com/img/1739096784-lvZLkM8UQFoyG9DjJbH7PsTW.jpg?width=1200)
シートの左上にあるタイトル文字をダブルクリックして、「タイトルの編集」画面でお題のVizを参照してタイトルを書きます。
シート名を「product」に変更します。
商品別売り上げの棒グラフも、カテゴリのフィルターと連動する必要があります。
「Sub-Category」シートに戻り、「フィルター」にある「Category セット」を右クリックし、「適用先ワークシート」の「選択したシート」を選びます。
「フィルター適用」画面で「product」にチェックをいれ「OK」をクリックします。
これで必要なグラフはすべて整いました。
6.ダッシュボードを作る
ダッシュボードの構成は、上部にタイトルとフィルター、その下は、フィルターがすべての場合はBANとサブカテゴリ別売上の棒グラフ、すべて以外の時は左側にBANとサブカテゴリ別売上の棒グラフ、右側に商品別売上の棒グラフに切り替わります。
フィルターがすべての時とそれ以外の時で表示されるシートを切り替えるのは、DZV(ダイナミックゾーンビジビリティ)機能を使うことで簡単にできます。
DZVはざっくり言うと、指定した条件に一致した時にそのシートやコンテナを表示させる機能です。
シート切り替え用の計算式を作る
まずは、シート切り替えのための計算式を作ります。
今回は、「Category セット」で「すべてが選択されていない」時に「product」シート表示させたいので、「すべてが選択されていない」状態を計算式で表す必要があります。
考え方としては「すべてが選択されていない→選択されているカテゴリ数はすべてのカテゴリ数より少ない」と読み替えます。
新しく計算式を作り、それぞれ以下のように名付けます。
選択されているカテゴリ数:[# of Selected Category]
//# of Selected Category
{COUNTD(IIF([Category セット],[Category],NULL))}
すべてのカテゴリ数:[# of Total Category]
//# of Total Category
{COUNTD([Category])}
[Show_Product]
//Show_Product
{MAX([# of Selected Category]<[# of Total Category])}
「[# of Selected Category]<[# of Total Category]」という計算式だとブール値にもかかわらずDZVで指定できません。
それが、なぜかFIXED関数でラップすることで指定できるようになります。(MAXはFIXED関数が集計計算でないと使えないため便宜上つけているだけで計算には影響がありません。MINとか他の計算式でも大丈夫です)
この原理の詳しい話は、お題のヒントにあったブログに記載があるので参照してください。
私もずっと、ブール値なのにDZVで指定できない計算式があるのが謎だったのですが、今回のこのブログで解決しました!
ダッシュボードに配置する
新しくダッシュボードを開き、「ダッシュボード」の「サイズ」を「固定」にし、幅:1000px、高さ:800pxにセットします。
今回はダッシュボードサイズの指定はありませんでしたが、見る人の環境によってサイズが変わってしまうと意図していない表示になる可能性があるので、標準的な横長サイズで固定しておきます。
左側の「オブジェクト」から①「水平コンテナ」を選び、タイトルの下に配置します。
①「水平コンテナ」の中に②「垂直コンテナ」を配置し、②「垂直コンテナ」の中に「BAN」と「sub-category」を配置します。
続いて、①「水平コンテナ」の中に「product」シートを配置します。
※DZVでは、同じコンテナに配置されているシートやコンテナの間で有効になるので(消えたり現れたりする)ので、表示をコントロールするためにどのコンテナにどのシートを配置するかが重要になってきます。
なので、今回はコンテナに番号を振りました。
左側の「オブジェクト」から「テキスト」を選び、先ほどの①「水平コンテナ」の上に配置し、お題のVizを参考にタイトルを記入します。
「BAN」シートのタイトル文字を右クリックして「タイトルの非表示」を選びます。
フィルターを整える
右側に自動でできた「Category セット」のフィルターを選択し、グレーのタブの「▼」をクリックします。「浮動」を選択し、タイトル文字の横に移動させておきます。
もう一度「Category セット」を選択し、グレーのタブの「▼」をクリックします。「複数の値(ドロップダウン)」を選択します。
タイトルをダブルクリックして「Select Category」と変更します。
フィルターは背景が薄いグレーになっているので、色を変更します。
「Category セット」を選択し、左側メニューの「レイアウト」タブで「バックグラウンド」で薄いグレーに変更します。
残った右側の凡例はコンテナごと削除します。
DZVの設定をする
必要なシートがすべて配置された状態で全体のバランスを整えます。
シート「sub-category」とシート「product」のバランスは、4:5くらいのイメージです。
![](https://assets.st-note.com/img/1739143902-RywY0t34A8oglVCaDIchFNOP.jpg?width=1200)
「product」シートを選択します。(グレーの枠)
左側メニューの「レイアウト」タブにある「値を使用して表示状態を制御する」にチェックし、[Show_Product]を選択します。
![](https://assets.st-note.com/img/1739144242-qmKF7WSGy2wHtoEXuCZMIDxQ.jpg?width=1200)
フィルターの状態が「すべて」を選択しているので、設定が完了した瞬間に「product」シートが消えます。
フィルターで「Furniture」のチェックを外してみると、「product」シートが表示されると思います。
これで指定の要件はすべてクリアできているのですが、試しにフィルターのチェックをすべて外してみると…
両方のシートのタイトルが残ったままになります。
![](https://assets.st-note.com/img/1739144741-KL41ckmvPbUyFToqCrs7R3g5.jpg?width=1200)
あまり美しくないので、最後にこの状態の時にタイトル以外が表示されないように設定します。
2つのグラフが格納されている①「水平コンテナ」に対してDZVを設定します。
カテゴリーが1つ以上選択されている時にだけ①「水平コンテナ」を表示させます。
「sub-category」シートに戻り、新しい計算式を作り[Show_Chart]と名付けます。
※今回もDZVで指定できるようFIXED関数でラップします。
//Show_Chart
{MAX([# of Selected Category]>0)}
ダッシュボードに戻り、①「水平コンテナ」を選択します。(青色の枠)
この状態で、左側メニューの「レイアウト」タブにある「値を使用して表示状態を制御する」にチェックし、[Show_Chart]を選択します。
これで、フィルターが「なし」の時はタイトルだけが表示される状態になります。
最後に、お題のVizをよく観察して、それぞれのシートの間の余白を調整します。
・「BAN」と「sub-category」の間
・「BAN」&「sub-category」と「product」の間
・タイトルとグラフとの間
少し細かいですが、ダッシュボードにおいて余白はとても重要です!
ダッシュボードの名前を「WOW2025 W6」と変更すれば完成です。
Tableau Publicにパブリッシュしたら、WOWのトラッカーに登録するのも忘れずに!
▼WOWトラッカー
https://workout-wednesday.com/track-submission/