🎯 STEP 17: LOD表現(Level of Detail)の完全理解
Tableauの最強機能!集計のレベルを自在にコントロール
📋 このステップで学ぶこと
- LOD表現とは何か、なぜ強力なのか
- FIXED表現(固定レベル)の使い方
- INCLUDE表現(レベルを追加)の使い方
- EXCLUDE表現(レベルを除外)の使い方
- LOD表現と通常の集計の違い
- 実務での活用例(顧客分析、構成比、コホート分析)
ゴール:LOD表現を使って、ビューの粒度に依存しない高度な計算ができるようになる
📍 1. LOD表現とは
LOD表現の定義と役割
LOD表現(Level of Detail Expression)は、ビューの集計レベルとは独立して、任意のレベルで集計を行う機能です。通常の集計関数がビューの粒度(行や列に何を配置しているか)に依存するのに対し、LOD表現は指定したレベルで固定的に計算されます。
LOD表現はTableauの中でも最も強力な機能の1つで、これを使いこなせるかどうかで分析の幅が大きく変わります。
学校のテストで「自分の点数」と「クラス全体の平均点」を比較したい場合を考えてみましょう。
生徒A: 80点
生徒B: 75点
生徒C: 90点
…
【通常の集計】
AVG([点数]) → 生徒ごとにその人の点数が表示される
【LOD表現】
{FIXED : AVG([点数])} → どの生徒を見ても「クラス全体の平均点 82点」が表示される
ポイント:LOD表現を使うと、「全体の平均」と「個人の点数」を同時に比較できます!
| 課題 | 通常の集計 | LOD表現 |
|---|---|---|
| 全体平均と比較したい | ビューの粒度で平均が変わる | {FIXED : AVG()}で全体を固定 |
| 顧客ごとの購入回数 | ビューに顧客がないと計算できない | {FIXED [顧客ID] : COUNT()}で計算 |
| 構成比を計算したい | 表計算が必要で複雑 | {EXCLUDE : SUM()}でシンプルに |
| 初回購入日を知りたい | 別途集計が必要 | {FIXED [顧客ID] : MIN([日付])} |
| 種類 | 機能 | イメージ | 使用場面 |
|---|---|---|---|
| FIXED | 指定したレベルで固定 | 「顧客ID」で固定して集計 | 顧客分析、コホート分析 |
| INCLUDE | ビューのレベルに追加 | 店舗ビュー + 商品を追加 | より細かい粒度で計算 |
| EXCLUDE | ビューのレベルから除外 | 商品ビュー − 商品を除外 | 構成比の計算 |
🔒 2. FIXED表現(最も重要)
FIXEDの基本構文
FIXED表現は、指定したディメンションのレベルで集計を固定します。ビューに何を配置しても、FIXEDで指定したレベルの集計結果が返されます。
{FIXED [ディメンション] : 集計関数([メジャー])}
【ディメンションなし(全体で固定)】
{FIXED : 集計関数([メジャー])}
【複数ディメンション】
{FIXED [ディメンション1], [ディメンション2] : 集計関数([メジャー])}
| 活用場面 | 計算式 | 結果 |
|---|---|---|
| 顧客別売上合計 | {FIXED [顧客ID] : SUM([売上])} | 各顧客の累計売上額 |
| 顧客別平均購入額 | {FIXED [顧客ID] : AVG([売上])} | 各顧客の平均購入金額 |
| 初回購入日 | {FIXED [顧客ID] : MIN([日付])} | 各顧客が最初に購入した日 |
| 購入回数 | {FIXED [顧客ID] : COUNTD([注文ID])} | 各顧客の注文回数 |
| 全体の売上合計 | {FIXED : SUM([売上])} | データ全体の売上合計(固定値) |
| 全体の平均売上 | {FIXED : AVG([売上])} | データ全体の平均売上(固定値) |
顧客の購入金額に基づいて、VIP・一般・ライトに分類する計算フィールドを作成します。
| 手順 | 作成するフィールド | 計算式 |
|---|---|---|
| 1 | 顧客別売上合計 | {FIXED [顧客ID] : SUM([売上])} |
| 2 | 顧客ランク | IF [顧客別売上合計] >= 100000 THEN “VIP” ELSEIF [顧客別売上合計] >= 30000 THEN “一般” ELSE “ライト” END |
結果:どのビューでも、各顧客が正しいランクで表示される
➕ 3. INCLUDE表現
INCLUDEの基本構文
INCLUDE表現は、ビューの粒度に指定したディメンションを追加して集計します。現在のビューよりも細かいレベルで計算したい場合に使用します。
{INCLUDE [ディメンション] : 集計関数([メジャー])}
【例:店舗ビューに商品レベルを追加】
{INCLUDE [商品名] : SUM([売上])}
→ ビュー:店舗別
→ 計算:店舗×商品 のレベルで集計してから店舗に戻す
| 状況 | 説明 |
|---|---|
| ビューの粒度 | 店舗別(渋谷店、新宿店、池袋店…) |
| INCLUDEで追加 | 商品名を追加 → 店舗×商品のレベルで計算 |
| 計算例 | {INCLUDE [商品名] : AVG([売上])} → 各店舗で「商品ごとの平均売上」を計算し、その平均を店舗に戻す |
| 活用場面 | 計算式 | 結果 |
|---|---|---|
| 商品別平均売上の平均 | {INCLUDE [商品名] : AVG([売上])} | 商品レベルで平均を計算 |
| 顧客別購入回数の合計 | {INCLUDE [顧客ID] : COUNTD([注文ID])} | 顧客レベルで購入回数を計算 |
➖ 4. EXCLUDE表現
EXCLUDEの基本構文
EXCLUDE表現は、ビューの粒度から指定したディメンションを除外して集計します。構成比を計算したり、より粗いレベルで集計したい場合に使用します。
{EXCLUDE [ディメンション] : 集計関数([メジャー])}
【例:商品を除外して店舗レベルで集計】
{EXCLUDE [商品名] : SUM([売上])}
→ ビュー:店舗×商品
→ 計算:商品を無視して店舗レベルで集計
EXCLUDEの最も一般的な使い方は、構成比(シェア)の計算です。
| 計算 | 説明 |
|---|---|
| 分子 | SUM([売上]) → 各商品の売上 |
| 分母 | {EXCLUDE [商品名] : SUM([売上])} → 商品を除外した合計(=店舗合計) |
| 構成比 | SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])} |
名前: 売上構成比
計算式: SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])}
【結果例】
渋谷店 – 家電: 60%
渋谷店 – 衣料品: 25%
渋谷店 – 食品: 15%
| 活用場面 | 計算式 | 結果 |
|---|---|---|
| 商品の構成比 | SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])} | 店舗内での各商品のシェア |
| 店舗の平均からの差 | SUM([売上]) – {EXCLUDE [商品名] : AVG([売上])} | 店舗平均との差額 |
| 月別の構成比 | SUM([売上]) / {EXCLUDE [月] : SUM([売上])} | 年間売上に対する月別シェア |
⚖️ 5. 3つのLOD表現の比較
FIXEDとINCLUDE/EXCLUDEの違い
3つのLOD表現はそれぞれ異なる動作をします。正しく使い分けるために、違いを理解しましょう。
| 種類 | 粒度の決まり方 | フィルターの影響 | 主な用途 |
|---|---|---|---|
| FIXED | 指定したディメンションで固定 | コンテキストフィルターのみ影響 | 顧客分析、コホート、全体比較 |
| INCLUDE | ビュー + 指定ディメンション | すべてのフィルターが影響 | より細かい粒度での計算 |
| EXCLUDE | ビュー − 指定ディメンション | すべてのフィルターが影響 | 構成比、親レベルとの比較 |
| フィルターの種類 | FIXEDへの影響 | INCLUDE/EXCLUDEへの影響 |
|---|---|---|
| コンテキストフィルター | ✅ 影響する | ✅ 影響する |
| ディメンションフィルター | ❌ 影響しない | ✅ 影響する |
| メジャーフィルター | ❌ 影響しない | ✅ 影響する |
重要:FIXEDは多くのフィルターの影響を受けないため、「全体の合計」や「固定的な基準値」を計算するのに適しています。
📊 6. 実務活用例
実際のビジネスシーンでの活用
LOD表現は、顧客分析、売上分析、コホート分析など、さまざまな場面で活用できます。代表的な活用例を紹介します。
| 手順 | 作成するフィールド | 計算式 |
|---|---|---|
| 1 | 購入回数 | {FIXED [顧客ID] : COUNTD([注文ID])} |
| 2 | 顧客タイプ | IF [購入回数] >= 3 THEN “ロイヤル” ELSEIF [購入回数] = 2 THEN “リピート” ELSE “新規” END |
活用:顧客タイプ別の売上分析、リピート率の向上施策の検討
| 手順 | 作成するフィールド | 計算式 |
|---|---|---|
| 1 | 全体売上 | {FIXED : SUM([売上])} |
| 2 | 構成比 | SUM([売上]) / [全体売上] |
| 3 | (書式設定) | パーセンテージ、小数点以下1桁 |
活用:商品カテゴリ別の売上シェア、店舗別の売上貢献度
| 手順 | 作成するフィールド | 計算式 |
|---|---|---|
| 1 | 全体平均売上 | {FIXED : AVG([売上])} |
| 2 | 売上レベル | IF AVG([売上]) >= [全体平均売上] THEN “平均以上” ELSE “平均以下” END |
活用:パフォーマンスの良い店舗・商品の特定、改善が必要な領域の発見
| 手順 | 作成するフィールド | 計算式 |
|---|---|---|
| 1 | 初回購入日 | {FIXED [顧客ID] : MIN([日付])} |
| 2 | 初回購入月 | DATETRUNC(‘month’, [初回購入日]) |
| 3 | 購入からの経過月数 | DATEDIFF(‘month’, [初回購入日], [日付]) |
活用:顧客の獲得時期別のLTV分析、リテンション率の推移
✅ 7. ベストプラクティス
LOD表現を効果的に使うためのポイント
LOD表現は強力ですが、使い方を間違えると期待通りの結果が得られなかったり、パフォーマンスに影響したりすることがあります。
| 推奨事項 | 理由 |
|---|---|
| FIXEDを最初に覚える | 最も使用頻度が高く、理解しやすい |
| 波括弧 { } を忘れずに | LOD表現の必須構文。なしだとエラー |
| 分かりやすい名前をつける | 「顧客別売上合計」など、何を計算しているか明確に |
| 段階的に計算フィールドを作る | 複雑な計算は複数のフィールドに分割して管理 |
| フィルターの影響を理解する | FIXEDはフィルターの影響を受けにくいことを意識 |
| 非推奨事項 | 問題点 |
|---|---|
| 必要以上にLOD表現を使う | パフォーマンスが低下する可能性がある |
| 複雑なネストを作る | 可読性が下がり、メンテナンスが困難になる |
| 波括弧を忘れる | 通常の計算フィールドとして認識されエラーになる |
| フィルターの影響を無視する | 期待と異なる結果になることがある |
| やりたいこと | 使うLOD | 例 |
|---|---|---|
| 特定のレベルで固定して計算 | FIXED | 顧客別の累計売上 |
| 全体の合計/平均を取得 | FIXED(空) | {FIXED : SUM([売上])} |
| 構成比を計算 | EXCLUDE | カテゴリ別の売上シェア |
| より細かい粒度で計算 | INCLUDE | 商品レベルの平均売上 |
| フィルターに影響されない計算 | FIXED | 初回購入日、顧客ランク |
📝 STEP 17 のまとめ
- LOD表現:ビューの粒度とは独立して集計を行う強力な機能
- FIXED:指定したレベルで固定(最も重要)
- INCLUDE:ビューのレベルにディメンションを追加
- EXCLUDE:ビューのレベルからディメンションを除外
- 構文:必ず波括弧 { } で囲む
- 活用:顧客分析、構成比、コホート分析、平均比較
LOD表現はTableauの最強機能の1つです。特にFIXEDを使いこなせれば、ほとんどの分析ニーズに対応できます。
覚えておくべき3つのパターン:
・{FIXED [顧客ID] : SUM([売上])} → 顧客別の集計
・{FIXED : SUM([売上])} → 全体の合計
・SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])} → 構成比
まずはFIXEDから始めて、徐々にINCLUDE、EXCLUDEも使いこなせるようになりましょう!
📝 実践演習
顧客ごとの売上合計を計算するLOD表現を作成してください。また、それを使って顧客を「10万円以上」「5万円以上」「5万円未満」の3つにランク分けしてください。
| フィールド名 | 計算式 |
|---|---|
| 顧客別売上合計 | {FIXED [顧客ID] : SUM([売上])} |
| 顧客ランク | IF [顧客別売上合計] >= 100000 THEN “10万円以上” ELSEIF [顧客別売上合計] >= 50000 THEN “5万円以上” ELSE “5万円未満” END |
各商品の売上構成比を計算してください。ビューには「商品カテゴリ」と「売上」が表示されているものとします。
| フィールド名 | 計算式 |
|---|---|
| 方法1: FIXED使用 | 全体売上: {FIXED : SUM([売上])} 構成比: SUM([売上]) / [全体売上] |
| 方法2: EXCLUDE使用 | SUM([売上]) / {EXCLUDE [商品カテゴリ] : SUM([売上])} |
書式設定:パーセンテージ、小数点以下1桁
顧客の「初回購入日」を計算し、初回購入月ごとに顧客をグループ化してください。さらに、各コホート(初回購入月グループ)の累計売上を計算してください。
| フィールド名 | 計算式 |
|---|---|
| 初回購入日 | {FIXED [顧客ID] : MIN([日付])} |
| 初回購入月 | DATETRUNC(‘month’, [初回購入日]) |
| コホート別売上 | {FIXED [初回購入月] : SUM([売上])} |
| 1 | 「初回購入月」を行シェルフにドラッグ |
| 2 | 「売上」を列シェルフにドラッグ(SUM) |
| 3 | 「顧客ID」をラベルにドラッグ(COUNTD)→ 顧客数を表示 |
結果:初回購入月ごとのコホート別売上と顧客数が表示される
❓ よくある質問
・通常の集計(SUM([売上])):ビューに配置したディメンションによって集計レベルが変わる
・LOD表現({FIXED [顧客ID] : SUM([売上])}):指定したレベルで固定され、ビューの粒度に影響されない
例えば、FIXEDで顧客別に集計すると、ビューに店舗を追加しても顧客別の集計値は変わりません。
波括弧はLOD表現の必須構文です。波括弧なしだと、Tableauは通常の計算フィールドとして認識しようとし、FIXEDやINCLUDEなどのキーワードが認識されずエラーになります。
正しい書き方:{FIXED [顧客ID] : SUM([売上])}
間違い:FIXED [顧客ID] : SUM([売上])
・FIXED:特定のレベルで固定(最も使用頻度が高い)
・INCLUDE:ビューよりも細かい粒度で計算したい場合
・EXCLUDE:構成比など、ビューから一部を除外して計算したい場合
初心者はまずFIXEDを完全にマスターしてから、INCLUDE/EXCLUDEに進むことをお勧めします。
ディメンションを指定しない場合、データソース全体で集計されます。これは「全体の合計」や「全体の平均」を取得したい場合に使用します。
例:
・{FIXED : SUM([売上])} → 全データの売上合計
・{FIXED : AVG([売上])} → 全データの売上平均
FIXEDはコンテキストフィルター以外のフィルターの影響を受けません。フィルターの影響を受けさせたい場合は、そのフィルターを「コンテキストに追加」するか、INCLUDEまたはEXCLUDEを使用してください。
大量のデータに対して複雑なLOD表現を使用すると、計算に時間がかかることがあります。パフォーマンスを最適化するには:
・必要な場合のみLOD表現を使用
・複雑なネストは避ける
・抽出ファイルを使用する
・可能であれば事前に集計したデータを使用
LOD表現の結果を保存した計算フィールドは、他の計算フィールドで参照できます。これにより、複雑な計算を段階的に構築できます。
例:
・計算1: 顧客別売上 = {FIXED [顧客ID] : SUM([売上])}
・計算2: 顧客ランク = IF [顧客別売上] >= 100000 THEN “VIP” ELSE “一般” END
学習メモ
BIツール入門 - Step 17