STEP 17:LOD表現(Level of Detail)の完全理解

🎯 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表現が強力なのか
課題 通常の集計 LOD表現
全体平均と比較したい ビューの粒度で平均が変わる {FIXED : AVG()}で全体を固定
顧客ごとの購入回数 ビューに顧客がないと計算できない {FIXED [顧客ID] : COUNT()}で計算
構成比を計算したい 表計算が必要で複雑 {EXCLUDE : SUM()}でシンプルに
初回購入日を知りたい 別途集計が必要 {FIXED [顧客ID] : MIN([日付])}
📊 LOD表現の3つの種類
種類 機能 イメージ 使用場面
FIXED 指定したレベルで固定 「顧客ID」で固定して集計 顧客分析、コホート分析
INCLUDE ビューのレベルに追加 店舗ビュー + 商品を追加 より細かい粒度で計算
EXCLUDE ビューのレベルから除外 商品ビュー − 商品を除外 構成比の計算

🔒 2. FIXED表現(最も重要)

FIXEDの基本構文

FIXED表現は、指定したディメンションのレベルで集計を固定します。ビューに何を配置しても、FIXEDで指定したレベルの集計結果が返されます。

📝 FIXED表現の構文
【基本構文】
{FIXED [ディメンション] : 集計関数([メジャー])}

【ディメンションなし(全体で固定)】
{FIXED : 集計関数([メジャー])}

【複数ディメンション】
{FIXED [ディメンション1], [ディメンション2] : 集計関数([メジャー])}
✅ FIXED表現の活用パターン
活用場面 計算式 結果
顧客別売上合計 {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 [ディメンション] : 集計関数([メジャー])}

【例:店舗ビューに商品レベルを追加】
{INCLUDE [商品名] : SUM([売上])}

→ ビュー:店舗別
→ 計算:店舗×商品 のレベルで集計してから店舗に戻す
📊 INCLUDEの動作イメージ
状況 説明
ビューの粒度 店舗別(渋谷店、新宿店、池袋店…)
INCLUDEで追加 商品名を追加 → 店舗×商品のレベルで計算
計算例 {INCLUDE [商品名] : AVG([売上])} → 各店舗で「商品ごとの平均売上」を計算し、その平均を店舗に戻す
✅ INCLUDE表現の活用パターン
活用場面 計算式 結果
商品別平均売上の平均 {INCLUDE [商品名] : AVG([売上])} 商品レベルで平均を計算
顧客別購入回数の合計 {INCLUDE [顧客ID] : COUNTD([注文ID])} 顧客レベルで購入回数を計算

➖ 4. EXCLUDE表現

EXCLUDEの基本構文

EXCLUDE表現は、ビューの粒度から指定したディメンションを除外して集計します。構成比を計算したり、より粗いレベルで集計したい場合に使用します。

📝 EXCLUDE表現の構文
【基本構文】
{EXCLUDE [ディメンション] : 集計関数([メジャー])}

【例:商品を除外して店舗レベルで集計】
{EXCLUDE [商品名] : SUM([売上])}

→ ビュー:店舗×商品
→ 計算:商品を無視して店舗レベルで集計
📊 EXCLUDEの最重要活用:構成比の計算

EXCLUDEの最も一般的な使い方は、構成比(シェア)の計算です。

計算 説明
分子 SUM([売上]) → 各商品の売上
分母 {EXCLUDE [商品名] : SUM([売上])} → 商品を除外した合計(=店舗合計)
構成比 SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])}
【計算フィールド】
名前: 売上構成比
計算式: SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])}

【結果例】
渋谷店 – 家電: 60%
渋谷店 – 衣料品: 25%
渋谷店 – 食品: 15%
✅ EXCLUDE表現の活用パターン
活用場面 計算式 結果
商品の構成比 SUM([売上]) / {EXCLUDE [商品名] : SUM([売上])} 店舗内での各商品のシェア
店舗の平均からの差 SUM([売上]) – {EXCLUDE [商品名] : AVG([売上])} 店舗平均との差額
月別の構成比 SUM([売上]) / {EXCLUDE [月] : SUM([売上])} 年間売上に対する月別シェア

⚖️ 5. 3つのLOD表現の比較

FIXEDとINCLUDE/EXCLUDEの違い

3つのLOD表現はそれぞれ異なる動作をします。正しく使い分けるために、違いを理解しましょう。

📊 3つのLOD表現の比較
種類 粒度の決まり方 フィルターの影響 主な用途
FIXED 指定したディメンションで固定 コンテキストフィルターのみ影響 顧客分析、コホート、全体比較
INCLUDE ビュー + 指定ディメンション すべてのフィルターが影響 より細かい粒度での計算
EXCLUDE ビュー − 指定ディメンション すべてのフィルターが影響 構成比、親レベルとの比較
💡 フィルターとLOD表現の関係
フィルターの種類 FIXEDへの影響 INCLUDE/EXCLUDEへの影響
コンテキストフィルター ✅ 影響する ✅ 影響する
ディメンションフィルター ❌ 影響しない ✅ 影響する
メジャーフィルター ❌ 影響しない ✅ 影響する

重要:FIXEDは多くのフィルターの影響を受けないため、「全体の合計」や「固定的な基準値」を計算するのに適しています。

📊 6. 実務活用例

実際のビジネスシーンでの活用

LOD表現は、顧客分析、売上分析、コホート分析など、さまざまな場面で活用できます。代表的な活用例を紹介します。

📊 活用例1: リピート顧客の特定
手順 作成するフィールド 計算式
1 購入回数 {FIXED [顧客ID] : COUNTD([注文ID])}
2 顧客タイプ IF [購入回数] >= 3 THEN “ロイヤル”
ELSEIF [購入回数] = 2 THEN “リピート”
ELSE “新規” END

活用:顧客タイプ別の売上分析、リピート率の向上施策の検討

📊 活用例2: 売上構成比の計算
手順 作成するフィールド 計算式
1 全体売上 {FIXED : SUM([売上])}
2 構成比 SUM([売上]) / [全体売上]
3 (書式設定) パーセンテージ、小数点以下1桁

活用:商品カテゴリ別の売上シェア、店舗別の売上貢献度

📊 活用例3: 平均以上/以下の判定
手順 作成するフィールド 計算式
1 全体平均売上 {FIXED : AVG([売上])}
2 売上レベル IF AVG([売上]) >= [全体平均売上] THEN “平均以上” ELSE “平均以下” END

活用:パフォーマンスの良い店舗・商品の特定、改善が必要な領域の発見

📊 活用例4: コホート分析(初回購入月別)
手順 作成するフィールド 計算式
1 初回購入日 {FIXED [顧客ID] : MIN([日付])}
2 初回購入月 DATETRUNC(‘month’, [初回購入日])
3 購入からの経過月数 DATEDIFF(‘month’, [初回購入日], [日付])

活用:顧客の獲得時期別のLTV分析、リテンション率の推移

✅ 7. ベストプラクティス

LOD表現を効果的に使うためのポイント

LOD表現は強力ですが、使い方を間違えると期待通りの結果が得られなかったり、パフォーマンスに影響したりすることがあります。

✅ Do(推奨)
推奨事項 理由
FIXEDを最初に覚える 最も使用頻度が高く、理解しやすい
波括弧 { } を忘れずに LOD表現の必須構文。なしだとエラー
分かりやすい名前をつける 「顧客別売上合計」など、何を計算しているか明確に
段階的に計算フィールドを作る 複雑な計算は複数のフィールドに分割して管理
フィルターの影響を理解する FIXEDはフィルターの影響を受けにくいことを意識
❌ Don’t(非推奨)
非推奨事項 問題点
必要以上にLOD表現を使う パフォーマンスが低下する可能性がある
複雑なネストを作る 可読性が下がり、メンテナンスが困難になる
波括弧を忘れる 通常の計算フィールドとして認識されエラーになる
フィルターの影響を無視する 期待と異なる結果になることがある
📊 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も使いこなせるようになりましょう!

📝 実践演習

演習 1 基礎

顧客ごとの売上合計を計算するLOD表現を作成してください。また、それを使って顧客を「10万円以上」「5万円以上」「5万円未満」の3つにランク分けしてください。

【計算フィールドの作成】
フィールド名 計算式
顧客別売上合計 {FIXED [顧客ID] : SUM([売上])}
顧客ランク IF [顧客別売上合計] >= 100000 THEN “10万円以上”
ELSEIF [顧客別売上合計] >= 50000 THEN “5万円以上”
ELSE “5万円未満” END
演習 2 応用

各商品の売上構成比を計算してください。ビューには「商品カテゴリ」と「売上」が表示されているものとします。

【計算フィールドの作成】
フィールド名 計算式
方法1: FIXED使用 全体売上: {FIXED : SUM([売上])}
構成比: SUM([売上]) / [全体売上]
方法2: EXCLUDE使用 SUM([売上]) / {EXCLUDE [商品カテゴリ] : SUM([売上])}

書式設定:パーセンテージ、小数点以下1桁

チャレンジ 発展

顧客の「初回購入日」を計算し、初回購入月ごとに顧客をグループ化してください。さらに、各コホート(初回購入月グループ)の累計売上を計算してください。

【計算フィールドの作成】
フィールド名 計算式
初回購入日 {FIXED [顧客ID] : MIN([日付])}
初回購入月 DATETRUNC(‘month’, [初回購入日])
コホート別売上 {FIXED [初回購入月] : SUM([売上])}
【ビューの作成】
1 「初回購入月」を行シェルフにドラッグ
2 「売上」を列シェルフにドラッグ(SUM)
3 「顧客ID」をラベルにドラッグ(COUNTD)→ 顧客数を表示

結果:初回購入月ごとのコホート別売上と顧客数が表示される

❓ よくある質問

Q1: LOD表現と通常の集計の違いは何ですか?
ビューの粒度に依存するかどうかです。

通常の集計(SUM([売上])):ビューに配置したディメンションによって集計レベルが変わる
LOD表現({FIXED [顧客ID] : SUM([売上])}):指定したレベルで固定され、ビューの粒度に影響されない

例えば、FIXEDで顧客別に集計すると、ビューに店舗を追加しても顧客別の集計値は変わりません。
Q2: 波括弧 { } を忘れるとどうなりますか?
エラーになります。

波括弧はLOD表現の必須構文です。波括弧なしだと、Tableauは通常の計算フィールドとして認識しようとし、FIXEDやINCLUDEなどのキーワードが認識されずエラーになります。

正しい書き方:{FIXED [顧客ID] : SUM([売上])}
間違い:FIXED [顧客ID] : SUM([売上])
Q3: FIXEDとINCLUDE/EXCLUDEの使い分けがわかりません。
基本的にはFIXEDから始めてください。

FIXED:特定のレベルで固定(最も使用頻度が高い)
INCLUDE:ビューよりも細かい粒度で計算したい場合
EXCLUDE:構成比など、ビューから一部を除外して計算したい場合

初心者はまずFIXEDを完全にマスターしてから、INCLUDE/EXCLUDEに進むことをお勧めします。
Q4: {FIXED : SUM([売上])}のディメンション部分が空なのはなぜですか?
「全体」で固定するためです。

ディメンションを指定しない場合、データソース全体で集計されます。これは「全体の合計」や「全体の平均」を取得したい場合に使用します。

例:
・{FIXED : SUM([売上])} → 全データの売上合計
・{FIXED : AVG([売上])} → 全データの売上平均
Q5: フィルターをかけてもLOD表現の結果が変わらないのはなぜですか?
FIXEDは多くのフィルターの影響を受けないためです。

FIXEDはコンテキストフィルター以外のフィルターの影響を受けません。フィルターの影響を受けさせたい場合は、そのフィルターを「コンテキストに追加」するか、INCLUDEまたはEXCLUDEを使用してください。
Q6: LOD表現を使うとパフォーマンスが遅くなりますか?
複雑なLOD表現は影響することがあります。

大量のデータに対して複雑なLOD表現を使用すると、計算に時間がかかることがあります。パフォーマンスを最適化するには:

・必要な場合のみLOD表現を使用
・複雑なネストは避ける
・抽出ファイルを使用する
・可能であれば事前に集計したデータを使用
Q7: LOD表現の結果を別の計算フィールドで使えますか?
はい、使えます。

LOD表現の結果を保存した計算フィールドは、他の計算フィールドで参照できます。これにより、複雑な計算を段階的に構築できます。

例:
・計算1: 顧客別売上 = {FIXED [顧客ID] : SUM([売上])}
・計算2: 顧客ランク = IF [顧客別売上] >= 100000 THEN “VIP” ELSE “一般” END
📝

学習メモ

BIツール入門 - Step 17

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE