Tableau“期間指定”を壊れなくする関数&設計 完全ガイド

はじめに:期間指定は“定義×関数×運用”の三点セット

数値が正しくても、期間の切り方が揺れると意思決定はブレます。
本記事は、よくある期間指定を関数と設計パターンに分解し、そのまま貼れる式運用上の注意までを一気通貫でまとめました。目的は「だれが見ても同じ範囲が選ばれる」こと。まずは鉄板の関数から。


1. 期間指定で“最初に覚える”基本関数(最小セット)

TODAY() // 今日(日付)
NOW() // 現在日時
DATE([文字/日時]) // 実日付に正規化
DATETIME([文字/日付]) // 実日時に正規化
DATEADD('month', -1, [基準日]) // 1ヶ月前
DATEDIFF('day', [開始], [終了]) // 日数差
DATETRUNC('month', [日付]) // 月初に丸め
DATENAME('weekday', [日付]) // 曜日の名称(表示用)
DATEPART('weekday', [日付]) // 曜日の番号(計算用)
MAKEDATE(2025, 4, 1) // 日付生成
DATEPARSE('yyyy-MM-dd', [文字列]) // 文字列→日付(型があいまいな時)

原則

  • 集計/比較は DATEPART/DATETRUNC、表示は DATENAME

  • 相対期間TODAY()/NOW() を基準に DATEADD

  • 期間の“境目”(月初/週初/四半期初)は DATETRUNC で丸めてから 比較。


2. 目的別レシピ(貼って使える)

以降の例では日付列を [日付] とします。ブール式はフィルターとして使えます。

2-1. 直近 N 日 / 週 / 月 / 四半期

// パラメータ [期間タイプ]('day','week','month','quarter')と [N](整数)
[直近N内?] =
DATEDIFF([期間タイプ], [日付], TODAY()) BETWEEN 0 AND [N] - 1

完成月のみを対象にしたい場合は、後述「完了月/完了週」参照。

2-2. 今日 / 昨日 / 今週 / 先週 / 今月 / 先月

[今日?] = DATETRUNC('day', [日付]) = DATETRUNC('day', TODAY())
[昨日?] = DATETRUNC('day', [日付]) = DATEADD('day', -1, DATETRUNC('day', TODAY()))
[今週?] = DATETRUNC('week', [日付]) = DATETRUNC('week', TODAY())
[先週?] = DATETRUNC('week', [日付]) = DATEADD('week', -1, DATETRUNC('week', TODAY()))
[今月?] = DATETRUNC('month', [日付]) = DATETRUNC('month', TODAY())
[先月?] = DATETRUNC('month', [日付]) = DATEADD('month', -1, DATETRUNC('month', TODAY()))

2-3. WTD / MTD / QTD / YTD(To-Date)

[WTD?] = DATETRUNC('week', [日付]) = DATETRUNC('week', TODAY())
AND [日付] <= TODAY()
[MTD?] = DATETRUNC(‘month’, [日付]) = DATETRUNC(‘month’, TODAY())
AND [日付] <= TODAY()

[QTD?] = DATETRUNC(‘quarter’, [日付]) = DATETRUNC(‘quarter’, TODAY())
AND [日付] <= TODAY()

[YTD?] = DATETRUNC(‘year’, [日付]) = DATETRUNC(‘year’, TODAY())
AND [日付] <= TODAY()

To-Dateは当日を含みます。完了月/完了四半期だけにしたい場合は次章。

2-4. “完了”月/四半期/年(当月は含まない)

[完了月?] =
DATETRUNC('month',[日付]) = DATEADD('month', -1, DATETRUNC('month', TODAY()))
[直近完了四半期?] =
DATETRUNC(‘quarter’,[日付]) =
IF DATETRUNC(‘month’, TODAY()) = DATETRUNC(‘quarter’, TODAY())
THEN DATEADD(‘quarter’, -1, DATETRUNC(‘quarter’, TODAY()))
ELSE DATETRUNC(‘quarter’, TODAY())
END

2-5. ローリング12ヶ月(当月まで or 直近完了月まで)

// 当月まで
[R12M?] = [日付] >= DATEADD('month', -11, DATETRUNC('month', TODAY()))
AND [日付] <= TODAY()
// 直近完了月まで(当月を除く)
[R12M完了?] =
DATETRUNC(‘month’, [日付]) BETWEEN
DATEADD(‘month’, -12, DATETRUNC(‘month’, TODAY()))
AND DATEADD(‘month’, -1, DATETRUNC(‘month’, TODAY()))

2-6. 同期間(前年)比較:MTD/完了月/四半期/年

// 例:前年同月(完了月基準)
[前年同月?] =
DATETRUNC('month',[日付]) =
DATEADD('year', -1, DATEADD('month', -1, DATETRUNC('month', TODAY())))
// 例:前年MTD(同日まで)
[前年MTD?] =
DATETRUNC(‘month’,[日付]) = DATEADD(‘year’, -1, DATETRUNC(‘month’, TODAY()))
AND DATEPART(‘day’,[日付]) <= DATEPART(‘day’, TODAY())

// 例:前年同四半期(完了ベース)
[前年同四半期?] =
DATETRUNC(‘quarter’,[日付]) =
DATEADD(‘year’, -1,
IF DATETRUNC(‘month’, TODAY()) = DATETRUNC(‘quarter’, TODAY())
THEN DATEADD(‘quarter’, -1, DATETRUNC(‘quarter’, TODAY()))
ELSE DATETRUNC(‘quarter’, TODAY()) END )

2-7. 任意の開始/終了(パラメータ 2つで範囲指定)

// パラメータ [開始日] [終了日](日付型)
[期間内?] =
DATE([日付]) >= DATE([開始日]) AND DATE([日付]) <= DATE([終了日])

2-8. 週の起点を固定(Mon/Sun/ISO)

// “月曜起点の週”で当週判定(ロケールに依らず一定)
[今週(月曜起点)?] =
DATETRUNC('week', [日付], 'monday') = DATETRUNC('week', TODAY(), 'monday')
// ISO週番号での同週比較(例:前年同ISO週)
[前年同ISO週?] =
DATEPART(‘iso-week’,[日付]) = DATEPART(‘iso-week’, TODAY())
AND DATEPART(‘iso-year’,[日付]) = DATEPART(‘iso-year’, DATEADD(‘year’, -1, TODAY()))

2-9. 会計年度(起算月をずらす)

方法A:式でシフト

// パラメータ [FY開始月](1~12)
// 会計年の開始日
[FY開始] = MAKEDATE(
DATEPART('year', DATEADD('month', -([FY開始月]-1), [日付])),
[FY開始月], 1)
// FY・FQ・FY月
[FY] = DATEPART(‘year’, [FY開始])
[FQ開始] = DATETRUNC(‘quarter’, [FY開始])
[FY月初] = DATETRUNC(‘month’, [FY開始])

方法B:データソースの「会計年の開始月」設定(ワークブックのプロパティ)
→ 以後の DATETRUNC('year')DATEPART('quarter') が会計基準に従います。組織で統一するならこちら推奨

2-10. 営業日だけでの直近N(簡易・休日未考慮)

// 土日を除外(週起点は必要に応じて調整)
[営業日?] = DATEPART('weekday', [日付], 'monday') <= 5
[直近N営業日?] =
[営業日?] AND RUNNING_SUM( INT([営業日?]) ) // 表計算:日付昇順で
> RUNNING_SUM( INT([営業日?]) ) – [N]

完全な営業日制御は「営業日カレンダーテーブル」を用意し、関係で接続するのが現実解です。


3. “表示は少なく、分母は広く”の鉄則(Order of Operations)

  • 前年比/前月比など「前の点」を参照する表計算は、フィルターで消されると計算不能になります。

    • 解決1:表示フィルターは狭く、データソース/コンテキストで広めの期間を確保。

    • 解決2:前年値を LOD で保持してから比較。

// 例:前年同月の値をLODで保持(分母固定)
[前年同月の売上] =
{ FIXED DATETRUNC('month',[日付]) :
SUM( IF DATEADD('year',1, DATETRUNC('month',[日付])) = DATETRUNC('month', TODAY())
THEN [売上] END ) }
// 実務では「キー(月)」で2テーブル設計の方が読みやすいケースも多い

4. UIパターン:スイッチ1つで “To-Date / 完了 / ローリング”

// パラメータ [期間モード]('ToDate','Completed','Rolling')と [単位]('day','week','month','quarter'),[N] [期間内(モード)] =
CASE [期間モード] WHEN 'ToDate' THEN
DATETRUNC([単位],[日付]) = DATETRUNC([単位], TODAY())
AND [日付] <= TODAY()
WHEN 'Completed' THEN
DATETRUNC([単位],[日付]) = DATEADD([単位], -1, DATETRUNC([単位], TODAY()))
WHEN 'Rolling' THEN
[日付] >= DATEADD([単位], -([N]-1), DATETRUNC([単位], TODAY()))
AND [日付] <= TODAY()
END

同じダッシュボードで切り替え可能にすると、ユーザー教育コストが激減します。


5. 表示品質を上げる小ワザ

  • 等間隔の時間軸:日付軸は連続(緑ピル)+「欠損値を表示」。

  • 最終点ラベル:右端だけラベルで凡例いらず

  • 参照線/帯:目標・中央値・±3σ。期間比較の読み取りが加速。

  • 注釈:価格改定・キャンペーンなどイベントを線上に。

  • 点の間引き:長期×日粒度では線のみ→拡大時に点を表示。


6. 会計・ISO・ロケール差の“すれ違い”を避ける

  • 週の起点(Mon/Sun)とISO週は結果が変わります。

  • 会計年度はワークブックで統一(全員同じ結果に)。

  • 日付文字列必ず日付型へ正規化してから計算(DATE/DATEPARSE)。


7. パフォーマンスと運用(期間指定の影響が大きい)

  • 抽出(Hyper)+増分更新:日付キーでパーティション。

  • 初期表示は軽く:直近3〜6か月、月粒度、点なし。

  • コンテキストフィルターへ日付を昇格して、他のフィルターを効かせやすく。

  • 日付のJOIN増殖を避け、粒度が違うテーブルは関係で接続。


8. 実務テンプレ(そのまま貼れる20本)

// 1) 先々週
[先々週?] = DATETRUNC('week',[日付]) = DATEADD('week', -2, DATETRUNC('week', TODAY()))
// 2) 今四半期・先四半期・前年同四半期
[今Q?] = DATETRUNC(‘quarter’,[日付]) = DATETRUNC(‘quarter’, TODAY())
[先Q?] = DATETRUNC(‘quarter’,[日付]) = DATEADD(‘quarter’, -1, DATETRUNC(‘quarter’, TODAY()))
[前年同Q?] = DATETRUNC(‘quarter’,[日付]) = DATEADD(‘year’, -1, DATETRUNC(‘quarter’, TODAY()))

// 3) 直近nヶ月の“完了月だけ”
[Rn完了月?] =
DATETRUNC(‘month’,[日付]) BETWEEN
DATEADD(‘month’, -[n], DATETRUNC(‘month’, TODAY()))
AND DATEADD(‘month’, -1, DATETRUNC(‘month’, TODAY()))

// 4) “当月まで”の年初来累積(表示制御)
[YTD表示?] = [日付] <= TODAY()
[YTD] = RUNNING_SUM( IF [YTD表示?] THEN SUM([値]) END )

// 5) 前月差/前月比(表計算)
[MoM差] = SUM([値]) – LOOKUP(SUM([値]), -1)
[MoM%] = IIF(LOOKUP(SUM([値]), -1)=0, Null, [MoM差]/ABS(LOOKUP(SUM([値]), -1)))

// 6) 前年同月比(表計算)
[YoY差] = SUM([値]) – LOOKUP(SUM([値]), -12)
[YoY%] = IIF(LOOKUP(SUM([値]), -12)=0, Null, [YoY差]/ABS(LOOKUP(SUM([値]), -12)))

// 7) 直近30日移動平均
[MA30] = WINDOW_AVG(SUM([値]), -29, 0)

// 8) 期首~任意日(パラメータ[基準日])
[期首~基準日?] =
[日付] BETWEEN DATETRUNC(‘year’, [基準日]) AND [基準日]

// 9) “同曜日”比較(今週 vs 先週の同曜日)
[同曜日先週?] =
[日付] = DATEADD(‘week’, -1, TODAY())

// 10) カレンダー月×週番号(1~6)
[月内週番号] =
1 + INT( ( DATEPART(‘day’,[日付]) – 1 + (DATEPART(‘weekday’, DATETRUNC(‘month’,[日付]), ‘monday’) – 1) ) / 7 )


9. 15分で作る“期間切替ダッシュボード”最短手順

  1. 日付列を確認し、文字列は DATE/DATEPARSE で正規化

  2. パラメータ 期間タイプ('day'|'week'|'month'|'quarter')期間モード('ToDate'|'Completed'|'Rolling')N を作る。

  3. 計算 [期間内(モード)] を作成し、フィルター(True) に。

  4. 折れ線(列=日付[連続]、行=SUM(値))、最終点ラベルと**参照線(目標/中央値)**を追加。

  5. YoY/MoM の表計算を作り、タイルで併記。

  6. 「欠損値を表示」をオン、点は拡大時だけ表示。

  7. カスタムビュー(役職別)を保存し、サブスクを設定(抽出更新後に送付)。


10. よくあるつまずきと対処

  • 前年比が Null:表示範囲に前年分が無い → 13ヶ月を分母に確保 or LODで保持。

  • To-Date と完了月が混ざる:モードをパラメータ化して明示切替。

  • 週の起点が人によって違う:式で 'monday' 固定 or ISO週使用。

  • RLSで前年が見えない:分母をコンテキストに(または予め2テーブル設計)。

  • 表計算が重い:ウィンドウ幅を短縮、月粒度初期表示、抽出で安定化。


まとめ

  • 期間指定は**DATETRUNCで境目を揃え、DATEADDで相対化**するのが基本。

  • To-Date/完了/ローリングパラメータで切替できると、全員が同じ言葉で議論できる。

  • 会計年度・週起点・ISO週などの基準を統一し、分母は広く、表示は狭く(表計算は最後に効く)。

  • 最後は軽い初期表示サブスク/カスタムビューで“使われ続ける”運用へ。

📩 専門コンサルタントに相談してみませんか?
Tableauのライセンス選定や運用設計に少しでも不安がある方は、一度プロに相談してみるのがおすすめです。

  • どのライセンスを選べばいいか分からない

  • 導入したものの活用しきれていない

  • Power BIとの違いを整理したい

当社ではTableau導入から定着・活用まで一気通貫で支援します。業種・業務フローに応じた最適設計をご提案可能です。
▶ 詳細なサービス内容やご相談希望の方は、専用ページをご覧ください。(クリックしてください))

相談は無料です。お気軽にご連絡ください。

関連記事

この記事へのコメントはありません。

カテゴリー

アーカイブ