Tableau「FIXED関数」をわかりやすく解説|フィルター無視や複数条件を自在に制御するLOD表現とは?

Tableau ダッシュボードで「合計が合わない」「フィルターで数が変わる」と悩んだとき、最も多い原因が 集計の粒度(Level of Detail = LOD) の理解不足です。

FIXED 関数は、この“粒度”を明示的に固定して、どんな表示やフィルターでもブレない値を返すための重要な関数です。

この記事では、直感的な例 → 実務ユースケース → LOD関数との違い → フィルター順序 → FAQ → パフォーマンス注意点の順に、豊富な事例とともに解説します。

また、検索需要の高い「複数条件の指定」や「フィルターとの関係」「COUNTDとの組み合わせ」「IF文との併用例」「実務的な落とし穴と対策」まで、現場視点で網羅しています。

目次

FIXED関数とは?── “粒度ブレ”を防ぐ仕組み

たとえば「田中さんの家電購入数」を可視化したいとします。

サブカテゴリで表示すると「1個」なのに、カテゴリ単位で表示すると「2個」になる──そんな現象、見覚えがありませんか?

これは表示の粒度(Detail)によって集計が変わっていることによるものです。

FIXED関数は、集計の粒度を“ロック”することで、こうした不整合を防ぎます。

  • 構文{ FIXED [ディメンションA], [ディメンションB] : 集計関数 }
  • 作用:ビューの表示設定や通常のフィルターよりも“前”に計算される
用語意味(補足)
LOD(粒度)データの詳細さ・集計単位
ディメンション集計単位の軸(顧客名・商品名など)
メジャー集計対象(売上・数量など)

表で確認:FIXEDを使うと何が変わる?

データ例

顧客カテゴリサブカテゴリ個数
山田家具椅子1
田中家電コピー機1
田中家電電話機1
石田事務用品クリップ1

表A:顧客 × サブカテゴリ(サブカテゴリ粒度)

顧客サブカテゴリ個数
山田椅子1
田中コピー機1
田中電話機1
石田クリップ1

表B:顧客 × カテゴリ(カテゴリ粒度)

顧客カテゴリ個数
山田家具1
田中家電2
石田事務用品1

FIXEDを使うと:

{ FIXED [顧客], [カテゴリ] : COUNT([サブカテゴリ]) }

このように書くことで、ビューの表示粒度に関係なく、常に「田中 × 家電 = 2」で固定されます。

FIXED関数の実務ユースケース(基礎と応用)

ユースケース計算フィールド例ポイント
全体売上シェア{ FIXED : SUM([売上]) }全体合計で割って構成比率算出
カテゴリ別ランキング{ FIXED [カテゴリ] : SUM([売上]) }表示に依存しないランキング
トップN商品の維持{ FIXED [商品] : SUM([売上]) }フィルター後でも元の上位を保持
年別売上・前年比{ FIXED [年] : SUM([売上]) }LOOKUPと組み合わせて安定した前年比
顧客別累計売上{ FIXED [顧客] : SUM([売上]) }明細レベルでも常に累計
月別ユニーク注文件数{ FIXED [月] : COUNTD([注文ID]) }ユニーク件数が崩れない
複数条件(顧客 × 年){ FIXED [顧客], [年] : SUM([売上]) }クロス集計時にも一貫性のある計算が可能
IF文で条件制御{ FIXED [顧客] : SUM( IF [状態] = "完了" THEN [売上] END ) }条件付き集計に使うと柔軟性が増す

高度な応用例

  • 部門ごとの前年比+全社平均比較
    • SUM([売上]) / { FIXED [部門] : LOOKUP(SUM([売上]), -1) }
    • SUM([売上]) / { FIXED : AVG(LOOKUP(SUM([売上]), -1)) }
  • 商品カテゴリ別の売上構成比(年度固定)
    • { FIXED [カテゴリ], [年] : SUM([売上]) } / { FIXED [年] : SUM([売上]) }
  • エリア内ランキング + 全体順位
    • { FIXED [エリア], [顧客] : RANK(SUM([売上])) }
    • { FIXED [顧客] : RANK(SUM([売上])) }
  • フィルター後のカウントを維持する
    • 通常フィルターを適用してもFIXEDが影響を受けないように、フィルターをコンテキスト化する:
    { FIXED [顧客] : COUNTD([注文ID]) }
    • さらに、IF文と組み合わせることで動的なフィルター動作も可能:
    { FIXED [顧客] : COUNTD( IF [状態] = "完了" THEN [注文ID] END ) }

COUNT / COUNTD との組み合わせ

たとえば「顧客ごとのユニーク注文件数」を求めたい場合は次のように記述します:

{ FIXED [顧客] : COUNTD([注文ID]) }

このように書けば、ビューやフィルターが変わっても、常に安定したカウントが出せます。

INCLUDE / EXCLUDE / FIXED の違い

関数粒度の扱い主な用途
FIXEDビューに関係なくロック安定した分母・累計・前年比など
INCLUDEビューより“細かく”明細含めた平均や構成比など
EXCLUDEビューより“粗く”グループ化・カテゴリ別集計など

FIXED関数とフィルターの順序

FIXED関数は、通常のフィルターよりも“先に”計算されます。

データ → コンテキストフィルター
→ FIXED(ここで集計)
→ 通常のフィルター
→ 表示

つまり、フィルターで除外されてもFIXEDではカウント済みになるということです。

→ フィルターを「コンテキスト」に昇格させれば影響させられます。

よくある質問(FAQ)

Q. IF関数と何が違うの?
A. IFは表示行ベースの条件分岐ですが、FIXEDは集計粒度自体を固定するため、ビューが変わっても安定します。

Q. フィルターしても値が変わらないのは不具合?
A. FIXEDはフィルターより前に計算されるため仕様です。影響させたい場合はコンテキストフィルターを使ってください。

Q. FIXEDでパフォーマンスが落ちる?
A. 複数ディメンションやCOUNTDを含むFIXEDは計算量が増え、特にLive接続では遅延の原因になります。

Q. COUNTDやネストの多用はNG?
A. COUNTDやFIXEDのネストは可能ですが、可読性・速度ともに落ちるため最小限に抑えましょう。

パフォーマンス改善のベストプラクティス

  • ディメンション数は最小限に:必要以上の細かさは重くなります
  • ネストは避ける:FIXED内に別のFIXEDは避けた方がよい
  • Extractに変換する:Live接続で重いと感じたらまず抽出に切り替えましょう

まとめ:FIXED関数は “意図した粒度” を守るための最重要機能

  • 表示粒度やフィルターに左右されない、安定した計算が可能
  • 前年比・構成比・ランキング・シェア率などの基礎になる
  • 他のLOD関数(INCLUDE/EXCLUDE)と使い分けると分析精度が格段に向上

Tableauの分析で「なぜ数が合わないのか?」と悩んだら、まず疑うべきは“粒度”の設計です。

FIXED関数は、数値のブレを防ぎ、分析の信頼性を高める“土台”となる存在です。

Comment

コメントする

目次