1. 移動平均とは?(Tableauでの位置づけ)
移動平均(Moving Average)は、直近N期間の平均で折れ線の“ガタつき”をならし、傾向(トレンド)を読みやすくする手法です。
似ている概念にランニング平均(累積平均 / Running Average)がありますが、こちらは開始から現在までの平均で、期間が進むほど新しい値の影響が薄まります。短期の動きを見たいときは「移動平均」、長期の安定度合いを見たいときは「ランニング平均」が向きます。
典型用途
EC/アプリ:日次売上・CVRの7日移動平均
製造:不良率の月次移動平均(季節要因を平滑化)
コンタクトセンター:着信数・一次解決率の週次移動平均
2. まずは最短ルート:クイックテーブル計算で作る
前提
-
列(Columns):
注文日
→ 月(連続) -
行(Rows):
売上
(SUM([売上])
) -
マーク:
線
(Line)
手順(3ヶ月後方移動平均の例)
-
表示中の折れ線を右クリック → 「クイックテーブル計算」→「移動平均」
-
マークカードの**「売上」ピル右の▽→「表計算を編集…」**
-
「計算の種類」:移動平均
-
「前」= 2 / 「後」= 0(= 直近3ヶ月の後方移動平均)
-
**「次元を指定」で日付(注文日)にチェック、計算の方向を表(横)**に設定
-
必要に応じて**「パーティション」**にカテゴリ・地域などを設定(部門ごとに別計算)
中心移動平均(例:13ヶ月)にしたい場合
「前」= 6 / 「後」= 6(奇数期間推奨。偶数期間は曲線が半期ぶんズレるため注意)
3. 一段深く:計算式で“実務用”の移動平均を作る
クイック計算は速い反面、細かい制御(期間可変、欠損処理、中心化の奇数推奨など)がしづらい。実務では計算フィールド+パラメータで作ると拡張性が高く、ダッシュボード化もスムーズです。
3-1. 期間をパラメータ化(後方N期間)
-
パラメータを作成
-
名前:
移動平均_期間
-
データ型:整数 / 既定値:
7
(日次なら7、月次なら3や13が定番)
-
-
計算フィールド「移動平均(後方N)」を作成
// 直近N期間の後方移動平均(NULLをそのまま保持)
WINDOW_AVG(
SUM([売上]),
-[移動平均_期間] + 1, 0
)
-
Compute Using(計算の方向)を日付に設定し、カテゴリや地域でパーティション。
NULLの扱い
先頭N-1期間は値が足りずNULLになります。早期期間も平均を出したい場合は、平均分母が不足しない条件で出す式に変更します。
3-2. “データが揃ったときだけ表示”する安全版
IF WINDOW_COUNT(
SUM([売上]),
-[移動平均_期間] + 1, 0
) = [移動平均_期間]
THEN
WINDOW_AVG(SUM([売上]), -[移動平均_期間] + 1, 0)
END
こうすると先頭N-1期間の見かけ上の過小評価を避け、意思決定の誤読を防げます。
3-3. 中心移動平均(位相ずれを抑える)
WINDOW_AVG(
SUM([売上]),
-INT(([移動平均_期間] - 1) / 2),
INT(([移動平均_期間] - 1) / 2)
)
-
奇数期間が推奨(7、13など)。偶数期間は中心が定義しづらく、線が半期間ぶん遅れる印象になります。
3-4. ランニング平均(比較用)
RUNNING_AVG(SUM([売上]))
-
長期傾向の把握に有効。ただし直近変動に鈍感になります。
4. フィルターと順序の落とし穴(Order of Operations)
Tableauは表計算が最後に評価されます。
たとえば「直近12ヶ月だけを表示」する通常フィルターを先にかけると、移動平均の計算に必要な過去データが落ちて先頭側が低く歪みます。
解決策1:表計算フィルターで絞る
「最後に」絞ることで過去データを保持し、正しい平均を出せます。
LAST() < 12 // 末尾12カ月を表示(降順/昇順の向きに注意)
-
この計算フィールドをフィルターに置き、Trueだけ表示。
解決策2:コンテキスト化で順序を調整
相対日付などをコンテキストフィルターにすると、他のフィルター順序を調整しやすくなります。
ただし「計算に必要なデータは残す」という原則を守って設定してください。
5. 欠損値・日付の穴(Data Densification)への対処
-
日粒度で土日や祝日が欠損すると、ウィンドウ内の実データ数が減り平均が偏ることがあります。
-
軸の右クリック → 「欠損値を表示」(Show Missing Values)で日付行を密化し、NULLとして存在させると平均の算出意図が明確になります。
-
ただしNULLを0埋め(ZN)すると平均が過小化します。集計ロジックと意図(休業日は売上が0?未観測?)を決め、式側で
WINDOW_COUNT
による分母管理を行うのが安全です。
6. 原系列と移動平均を重ねる(読みやすい視覚設計)
-
行棚の
SUM([売上])
をCtrl+ドラッグで複製 -
一方を**移動平均(計算式またはクイック計算)**に変更
-
片方を右クリック → 「二重軸」→「軸の同期」
-
マーク:原系列=細線 / 移動平均=太線・不透明度高め
-
凡例で名称を**「原系列」「移動平均(7日)」**のようにリネーム
比較を誤らせないため、軸は必ず同期。系列の色・線種は明確に。
7. 応用①:指数移動平均(EMA)をTableauで
EMAは直近ほど重みを大きくする平滑化。急な変化に追随性があり、異常検知や短期トレンドの把握に向きます。
準備
-
パラメータ
EMA_α
(小数 / 0.05〜0.3推奨、既定値0.2) -
計算フィールド「EMA(売上)」:
IF FIRST() = 0 THEN
SUM([売上]) // 初期値:最初の行は実測値
ELSE
// 公式:EMA_t = EMA_{t-1} + α * (X_t - EMA_{t-1})
PREVIOUS_VALUE(0) + [EMA_α] * ( SUM([売上]) - PREVIOUS_VALUE(0) )
END
-
Compute Usingは日付。カテゴリ等はパーティションに。
αの解釈
大きい(0.3〜0.5):敏感(ノイズも拾いやすい)
小さい(0.05〜0.2):滑らか(反応は遅い)
8. 応用②:ユーザーが期間を変えられるUI
-
移動平均_期間
をパラメータコントロールとして表示 -
トグル用パラメータを追加(
移動平均の種類
:"SMA" / "中心SMA" / "EMA"
) -
CASE式で分岐して1本の計算にまとめる:
CASE [移動平均の種類]
WHEN "SMA" THEN
WINDOW_AVG(SUM([売上]), -[移動平均_期間]+1, 0)
WHEN "中心SMA" THEN
WINDOW_AVG(SUM([売上]),
-INT(([移動平均_期間]-1)/2),
INT(([移動平均_期間]-1)/2))
WHEN "EMA" THEN
PREVIOUS_VALUE(0) + [EMA_α] * ( SUM([売上]) - PREVIOUS_VALUE(0) )
END
-
ダッシュボードに**スライダー(期間)とラジオ(種類)**を置けば、非エンジニアでも自在に分析。
9. 実務での期間選定ガイド
-
日次:7日(週次周期を平滑)/14・28日(週期×倍数)
-
週次:4週(おおよそ1ヶ月)/13週(四半期)
-
月次:3ヶ月(短期)/6ヶ月(季節性を半期で)/13ヶ月(強推奨:奇数で中心化)
-
中心移動平均は季節性の強い系列(小売・需要・トラフィック)で効果大。意思決定の位相ズレを抑えます。
10. 部門別に同時計算(パーティション設計)
-
計算の編集 → 特定の次元で、日付=アドレス指定、カテゴリ/地域=パーティション
-
これにより部門ごとに独立した移動平均が出ます(部門間の混線を防止)。
11. よくある“ハマりどころ”と対策
-
値が思ったより低い
-
先頭側でデータが足りず分母が小さい/ゼロ埋めで過小化。
→WINDOW_COUNT
で分母を保証する式に切替。
-
-
動かすと線がズレる
-
計算の方向が未設定。
→ 「表(横)」や「ペイン(横)」で日付方向を明示。
-
-
部門を追加したら突然変わった
-
パーティションが増えたことで計算範囲が分割された。
→ 「特定の次元」で区切り方を再確認。
-
-
12ヶ月だけ出したら平均が崩れた
-
フィルターが先に適用され、過去データが落ちた。
→LAST()
などの表計算フィルターで最後に絞る。
-
-
NULLが混ざり不均一
-
欠損日の扱いが未定義。
→ 欠損値表示+NULLのまま平均 orWINDOW_COUNT
で完全ウィンドウ時のみ表示。
-
12. KPIでの読み方(意思決定につなげる)
-
原系列 × 移動平均の乖離に注目:
-
原系列が移動平均を上抜け:上昇局面の初動
-
下抜け:減速のシグナル
-
-
EMAは初動の検出に強い。アラート条件に
-
例:
SUM([売上]) < [EMA(売上)]*0.9
で急減アラート
-
13. パフォーマンス最適化
-
大量データでは下ごしらえ(事前集計)を検討:
-
FIXED
LOD で日次→月次の中間テーブルを作る -
抽出(Extract)+列型の最適化
-
-
不要な表計算の重複を避ける:
-
同じウィンドウを複数回使う場合は計算フィールドを共通化
-
14. そのまま使えるスニペット集(コピペ可)
直近N期間の後方SMA(完全ウィンドウのみ)
IF WINDOW_COUNT(SUM([値]), -[N]+1, 0) = [N] THEN
WINDOW_AVG(SUM([値]), -[N]+1, 0)
END
中心SMA(奇数N推奨)
WINDOW_AVG(SUM([値]), -INT(([N]-1)/2), INT(([N]-1)/2))
ランニング平均
RUNNING_AVG(SUM([値]))
指数移動平均(EMA, αパラメータ)
IF FIRST() = 0 THEN
SUM([値])
ELSE
PREVIOUS_VALUE(0) + [α] * ( SUM([値]) - PREVIOUS_VALUE(0) )
END
末尾12期間だけ表示(表計算フィルター)
LAST() < 12
15. まとめ
-
クイックテーブル計算でまず動かし、計算式で実務用に強化
-
期間はパラメータで操作できるようにし、中心化は奇数が基本
-
フィルター順序と欠損値の扱いを決めてから共有
-
目的は“線をきれいにする”ではなく、意思決定の初動を早めること。
移動平均は作って終わりではなく、アラート・コメント・アクションまで設計して初めて価値になります。
📩 専門コンサルタントに相談してみませんか?
Tableauのライセンス選定や運用設計に少しでも不安がある方は、一度プロに相談してみるのがおすすめです。
「どのライセンスを選べばいいか分からない」
「導入したものの活用しきれていない」
「Power BIとの違いを整理したい」
こうしたお悩みに対し、当社ではTableau導入から定着・活用までを一気通貫で支援しています。業種や業務フローに応じた最適なライセンス構成と活用方法をご提案可能です。
▶ 詳細なサービス内容やご相談希望の方は、
こちらの専用ページをご覧ください。
相談は無料です。お気軽にご連絡ください。
コメント