カレンダーUIをTableauで作る — パラメーターアクション2本で実現するインタラクティブ日付選択【#WOW2026 Week13】

難易度: 中級〜上級
今週のお題
#WOW2026 Week 13のテーマは「Let’s Viz Tsukurima Show!」。JTUG(Japan Tableau User Group)の「ビズ作りましょう!」企画とのコラボチャレンジで、Sample Superstoreの受注データを使いながら、Tableauでインタラクティブなカレンダーダッシュボードを10分で作り上げる課題です。
Requirements(要件一覧)
- ダッシュボードサイズ:1000 × 800 px
- Point 1 — カレンダー作成: Order Dateを使ってDecember 2025のカレンダーを作成する。年月ヘッダー・曜日ヘッダーを表示し、データのない日付は非表示にする
- Point 2 — 日付選択→地域別売上バーチャート: カレンダーの日付を選択したとき、地域別Salesの横棒グラフを表示する。ラベルに「Sales」と選択日付を含め、タイトルとグラフの間に#VizTSロゴを配置する
- Point 3 — 週次バーチャート: 選択した週の下に、曜日別Salesの横棒グラフを表示する。全7曜日を常時表示し、全日付が1画面に収まるようにする
- オプション: 日付のセルを円形背景で装飾、選択状態を濃い色で表現、同じ日付をクリックするとグラフを非表示にするトグル機能
作成したダッシュボード
今週の技術テーマ
パラメーターアクション(Parameter Actions)
このチャレンジの核心はパラメーターアクションです。通常のフィルターアクションはビューをフィルタリングしますが、パラメーターアクションは「マークをクリックした値をパラメーターに書き込む」ことができます。
なぜパラメーターアクションを使うのか?
カレンダーの日付セルをクリックしたとき、「その日付」と「その週番号」という2種類の情報を同時に他のシートに渡す必要があります。フィルターアクションだけでは複数の異なる型の値を同時に扱うのが難しく、パラメーターアクションを2本組み合わせることでこれを実現しています。
要件ごとの実装方法
Point 1 — カレンダーの作成
Tableauでカレンダーを作るには、日付の「週番号」を行、「曜日番号」を列に配置します。
- 列:
DATEPART('weekday', [Order Date])→ 1(日)〜7(土) - 行:
DATEPART('week', [Order Date])→ 週番号 - テキストマーク:
DAY([Order Date])→ セルに日付の「日」部分を表示 - データなし日の非表示: ビューにOrder Dateが存在しない日は自動的に非表示(データドリブンで制御)
年月ヘッダーはテキストオブジェクトで固定表示し、曜日ヘッダーは列ヘッダーをカスタムラベルで上書きします。
Point 2 — パラメーターアクション:日付選択→地域別バーチャート
ワークブックには2つのパラメーターと2本のパラメーターアクションが定義されています。
パラメーター:
p.select date(パラメーター2): date型、初期値 #2025-12-17#
p.select week num(パラメーター1): integer型、初期値 51
計算フィールド(フィルター用):
f.date: [Parameters].[パラメーター 2] = [Order Date]
→ 選択した日付と一致するレコードのみを抽出
f.week: DATEPART('week', [Order Date]) <= [Parameters].[パラメーター 1]
→ 選択した週番号以下の週のデータを抽出
パラメーターアクション(設定):
- カレンダーシートのマークをクリック →
p.select dateにクリックした日付を書き込み - カレンダーシートのマークをクリック →
p.select week numにその週番号を書き込み
地域別バーチャートのシートは f.date = TRUE でフィルタリングされており、カレンダーをクリックするたびに表示データが切り替わります。
Point 3 — 2枚のカレンダーシートをパラメーターで切り替える(実装の核心)
このダッシュボードの最大のポイントは、カレンダーシートを2枚用意し、パラメーター p.select week num によって表示する週を切り替えている点です。
- カレンダーSheet A(選択週以外):
f.week = FALSE(選択週より前の週)のデータを表示。通常の日付数字のみ表示 - カレンダーSheet B(選択週):
f.week = TRUE(選択週に一致)のデータを表示。この行にSales by Regionのバーチャートと#VizTSロゴが埋め込まれる
ダッシュボード上でSheet AとSheet Bを縦に並べることで、「選択した週の行だけバーチャートが表示される」カレンダーUIを実現しています。1枚のシートで表現しようとするとレイアウトが複雑になりますが、シートを分割することでそれぞれのビューをシンプルに保てます。
Point 4 — 週次バーチャート(全7曜日常時表示)
全7曜日を常時表示するには、データが存在しない曜日もゼロ値で表示させる工夫が必要です。
DATEPART('weekday', [Order Date])を列に配置し、f.weekフィルターを適用- 曜日軸は固定(
Show Missing Values)で全7日を強制表示
詰まったポイントと解決策
カレンダーの列を揃える — 空白列の表示
最も手間がかかったのが空白列(データのない曜日)の表示です。
Tableauはデフォルトでデータが存在しないマークを非表示にするため、注文のない曜日のセルが消えてカレンダーのグリッドが崩れます。例えばDecember 2025の第1週では日曜日に注文がなければ、その列が詰められてしまいます。
解決策: 列に配置した DATEPART('weekday', ...) フィールドを右クリック → 「Show Missing Values(欠損値を表示)」 をオンにする。
これにより、データのない曜日でも列が固定幅で表示され、7列のグリッドが崩れなくなります。行(週番号)側も同様に「Show Missing Values」を適用すると、すべての週で行の高さが揃います。
パラメーターアクションのトリガー設定
パラメーターアクションは「Select(選択)」「Hover(ホバー)」「Menu」の3種類から選べます。カレンダーで「同じ日付を再クリックでグラフ非表示」を実現するには、選択解除時の挙動(Clearing the selection will: の設定)を「Keep current value」ではなく特定の値(例:NULLや初期値)に戻すよう設定する必要があります。
この技術の応用場面
パラメーターアクションは、カレンダー以外にも幅広く応用できます。
- 動的な期間比較: 棒グラフのバーをクリックして「比較対象年」をパラメーターに渡し、前年比チャートをリアルタイムで切り替える
- ドリルダウン型ダッシュボード: 上位カテゴリをクリックすると、下位の詳細チャートが連動して切り替わるナビゲーション
- 動的な閾値設定: スライダーや散布図のマークをクリックして、KPI目標値やアラートラインをインタラクティブに変更する
Tableau Public プロフィール: https://public.tableau.com/app/profile/tamaball38175/vizzes


Thanks for ones marvelous posting! I genuinely enjoyed reading it, you are
a great author.I will make certain to bookmark your blog and will come back
in the foreseeable future. I want to encourage you continue your great
job, have a nice afternoon!
Thank you very much for your kind comment. I’m really glad to hear that you enjoyed the post.
Recently, I’ve been particularly interested in solutions that combine Tableau and AI, and I plan to share more content on this topic as well. I hope you’ll visit again soon.
Thanks again for your support, and have a wonderful day!