はじめに ― 計算フィールドでデータを自在に加工する
Tableauを使い始めたばかりのときは、データソースに存在するフィールドをそのままビューに配置することがほとんどです。 しかし実務では「売上から原価を引いた利益を計算したい」「氏名の姓だけを取り出したい」 「注文から納品までの日数を求めたい」といった要求が次々に出てきます。
こうしたニーズに応えるのが計算フィールドです。 数式を書いてデータソースに存在しない新しいフィールドを定義することで、 分析に必要な指標を自由に作り出すことができます。 Excelの関数に近い感覚で書けるものも多く、一度覚えると分析の幅が格段に広がります。
本記事では計算フィールドの基本概念から、実際の作成手順、よく使う関数カテゴリ、 条件分岐の書き方、集計との組み合わせ、実務でのユースケース、 そしてベストプラクティスまでを体系的に解説します。
計算フィールドとは
計算フィールドとは、Tableauのデータソースに新しい仮想フィールドを追加する機能です。 既存のフィールドや定数、関数を組み合わせた数式を定義することで、 データソースには存在しない値を動的に計算します。
たとえばデータソースに「売上」と「原価」のフィールドがあれば、[売上] - [原価]という計算フィールドを作ることで 「利益」というフィールドを新たに生み出せます。 このフィールドはビューにドラッグして使えるだけでなく、 フィルターや他の計算フィールドの素材としても利用できます。
計算フィールドには大きく2種類あります。
- 行レベル計算: データソースの各行に対して計算を行います。
[売上] * (1 - [割引率])のように各行の値を使う計算が該当します。 集計関数(SUM、AVGなど)を含まない計算フィールドは行レベル計算です。 - 集計計算: SUM・AVG・COUNTなどの集計関数を含む計算フィールドです。 ビューのディメンション構成に応じて集計レベルが決まります。
SUM([売上]) / SUM([数量])(平均単価)のような計算が典型例です。
この2種類の違いは後述する「行レベル計算 vs 集計計算」のセクションで詳しく説明します。 まずは計算フィールドの作り方を覚えましょう。
計算フィールドの作り方
計算フィールドの作成方法はシンプルで、いくつかの方法から好みの方を使えます。
作成画面の開き方
計算フィールドの作成ダイアログを開く方法は主に3つあります。
- メニューから: 上部メニューの「分析」→「計算フィールドの作成」をクリックします。
- データペインから: 左側のデータペインの空白部分を右クリックし、「計算フィールドの作成」を選択します。
- フィールドを右クリック: 既存フィールドを右クリックして「計算フィールドの作成」を選ぶと、 そのフィールドが数式に自動で入力された状態でダイアログが開きます。
計算エディタの使い方
計算フィールドの作成ダイアログ(計算エディタ)では、上部に計算フィールドの名前、 下部に数式を入力します。
- フィールドの参照: 既存のフィールドは角括弧で囲んで参照します。例:
[売上]、[顧客名]。 入力途中にサジェスト(候補表示)が出るので、フィールド名を完全に暗記していなくても大丈夫です。 - 関数の入力: エディタの右側に関数一覧が表示されています。関数名をダブルクリックすると数式に挿入されます。 また、関数名を直接タイプしてもサジェストが表示されます。
- エラーチェック: エディタ下部に計算の検証結果が表示されます。 数式にエラーがある場合は赤いエラーメッセージが表示され、OKボタンが非アクティブになります。 エラーメッセージをよく読むと、どこで何が間違っているかがわかります。
- コメント: 数式内に
//を書くと、それ以降の行がコメントとして扱われます。 複雑な計算フィールドには積極的にコメントを入れる習慣をつけましょう。
数式を入力してOKをクリックすると、計算フィールドがデータペインに追加されます。 行レベル計算は通常フィールドと同様に使え、集計計算は青い集計アイコンが付きます。
基本的な関数
Tableauの計算フィールドには多数の関数が用意されています。 ここでは実務でよく使う文字列関数、数値関数、日付関数の主要なものを紹介します。
文字列関数
文字列フィールドを加工・抽出するための関数です。 氏名の分割や、コードから特定の文字を取り出すケースでよく使います。
- LEFT(string, n): 文字列の左からn文字を取り出します。 例:
LEFT([商品コード], 3)→ 商品コードの先頭3文字(カテゴリコードなど)を抽出。 - RIGHT(string, n): 文字列の右からn文字を取り出します。 例:
RIGHT([郵便番号], 4)→ 郵便番号の下4桁を抽出。 - MID(string, start, length): 文字列のstart文字目からlength文字分を取り出します。 例:
MID([注文番号], 4, 6)→ 注文番号の4文字目から6文字を抽出。 - CONTAINS(string, substring): 文字列がsubstringを含む場合にTRUEを返します。 例:
CONTAINS([商品名], "セール")→ セール品かどうかをフラグ化。 - STARTSWITH(string, substring): 文字列がsubstringで始まる場合にTRUEを返します。
- LEN(string): 文字列の長さ(文字数)を返します。
- TRIM(string): 文字列の先頭・末尾の空白を削除します。 データのクリーニングに便利です。
- REPLACE(string, substring, replacement): 文字列内のsubstringをreplacementに置換します。
数値関数
数値の丸め・絶対値・べき乗などの計算に使います。
- ROUND(number, decimals): 指定した小数点以下の桁数で四捨五入します。 例:
ROUND([利益率], 2)→ 利益率を小数点以下2桁に丸める。 - ABS(number): 数値の絶対値を返します。 例:
ABS([前年差])→ 前年比の増減を絶対値で表示。 - CEILING(number): 小数を切り上げた整数を返します。
- FLOOR(number): 小数を切り捨てた整数を返します。
- SQRT(number): 平方根を返します。
- POWER(number, power): numberのpower乗を返します。
- ZN(expression): NULLを0に変換します。NULLを含む数値計算でよく使います。 例:
ZN([売上])→ 売上がNULLの場合に0として扱う。
日付関数
日付フィールドから特定の部分を取り出したり、日付の差分を計算したりするための関数です。 時系列分析に欠かせません。
- DATEPART(date_part, date): 日付から指定した部分を整数で返します。
date_partには'year'・'month'・'day'・'weekday'などを指定します。 例:DATEPART('month', [注文日])→ 注文月を1〜12の整数で返す。 - DATEDIFF(date_part, start_date, end_date): 2つの日付の差を指定した単位で返します。 例:
DATEDIFF('day', [注文日], [出荷日])→ 注文から出荷までの日数。date_partに'month'を指定すると月数差を返します。 - DATEADD(date_part, increment, date): 日付にincrementを加算した日付を返します。 例:
DATEADD('month', 3, [契約日])→ 契約日から3ヶ月後の日付。 - TODAY(): 今日の日付を返します。DATEDIFF と組み合わせて「経過日数」の計算でよく使います。
- NOW(): 現在の日時(タイムスタンプ)を返します。
- YEAR(date) / MONTH(date) / DAY(date): それぞれ年・月・日を整数で返す省略形の関数です。
条件分岐: IF/THEN/ELSE・CASE・IIF
条件によって異なる値を返したい場合に使うのが条件分岐の構文です。 Tableauには3種類の条件分岐の書き方があります。
IF/THEN/ELSE
最も汎用的な条件分岐です。複数条件の組み合わせにも対応しています。
基本構文:
IF [条件1] THEN [値1]
ELSEIF [条件2] THEN [値2]
ELSE [デフォルト値]
END使用例 — 売上規模の分類:
IF [売上] >= 1000000 THEN "大口"
ELSEIF [売上] >= 500000 THEN "中口"
ELSE "小口"
ENDELSEIFは何段階でも重ねることができますが、 条件が多い場合は後述のCASE式の方がすっきり書けることもあります。 ANDやORを使った複合条件も書けます(例: IF [地域] = "東日本" AND [売上] > 500000 THEN ...)。
CASE式
特定のフィールドの値によって分岐したい場合に、IF/THEN/ELSEよりもコンパクトに書けます。
基本構文:
CASE [フィールド名]
WHEN [値1] THEN [出力1]
WHEN [値2] THEN [出力2]
ELSE [デフォルト値]
END使用例 — 地域コードの日本語変換:
CASE [地域コード]
WHEN "E" THEN "東日本"
WHEN "W" THEN "西日本"
WHEN "C" THEN "中部"
ELSE "その他"
ENDCASE式はフィールドの値が特定の定数と一致するかを確認する用途に向いています。 範囲条件(100以上200未満など)や複合条件が必要な場合はIF/THEN/ELSEを使います。
IIF(インライン IF)
条件が真の場合と偽の場合の2択だけでよいシンプルなケースでは、 IIF関数を使って1行で書けます。
基本構文:
IIF([条件], [真の場合の値], [偽の場合の値])使用例 — 利益がプラスかどうか:
IIF([利益] > 0, "黒字", "赤字")IIFはExcelのIF関数に近い感覚で書けます。 条件分岐が2択だけであればIIFを使うとコードが短くなりますが、 3択以上の場合はIF/THEN/ELSEかCASEに切り替えましょう。
集計計算フィールド: SUM・AVG・COUNT
集計関数(SUM・AVG・COUNTなど)を含む計算フィールドを「集計計算フィールド」と呼びます。 ビューのディメンション構成に応じて自動的に集計されるため、 複雑な指標もシンプルな数式で表現できます。
主要な集計関数
- SUM([フィールド]): 数値フィールドの合計を返します。売上合計・数量合計などに使います。
- AVG([フィールド]): 数値フィールドの平均を返します。平均割引率・平均配送日数などに使います。
- COUNT([フィールド]): NULLでないレコード数を返します。注文件数・顧客数などのカウントに使います。
- COUNTD([フィールド]): フィールドの一意の値の個数を返します。 例:
COUNTD([顧客ID])→ ユニーク顧客数のカウント。 重複を除いた件数を求める場面でよく使います。 - MIN([フィールド]) / MAX([フィールド]): 最小値・最大値を返します。日付フィールドにも使え、
MIN([注文日])で初回注文日、MAX([注文日])で最終注文日が取得できます。
集計計算の組み合わせ例
集計関数を組み合わせることで、より高度な指標を計算できます。
- 平均単価:
SUM([売上]) / SUM([数量])― SUM([売上]) / COUNT([注文]) ではなく SUM / SUM で計算することで 数量加重の正確な単価が得られます。 - 利益率:
SUM([利益]) / SUM([売上])― 行レベルで利益率を計算してAVGを取るより、SUM/SUMの方が集計誤差が出ません。 - 返品率:
COUNTD([返品注文ID]) / COUNTD([注文ID])― ユニーク注文数に対する返品注文数の割合。
行レベル計算 vs 集計計算: 処理タイミングの違い
計算フィールドを作るとき、最も混乱しやすいのが「行レベル計算」と「集計計算」の違いです。 この2つは見た目が似ていても、データが処理されるタイミングが根本的に異なります。
行レベル計算が先に処理される
行レベル計算(SUM・AVGなどの集計関数を含まない計算フィールド)は、 データソースから各行が読み込まれた直後に計算されます。 つまり、集計が行われる前のデータに対して計算が適用されます。
例えば [売上] * (1 - [割引率]) という計算フィールドを作ると、 各行の売上に対して個別に割引を適用した後、集計されます。 これが「行レベル計算 → 集計」という処理順序です。
集計後に計算する場合
一方、集計計算フィールドは「集計した値に対して計算する」という処理順序になります。SUM([売上]) / SUM([数量]) という計算は、 まずSUM([売上])とSUM([数量])を集計してから、その商を計算します。
この違いが特に問題になるのは、平均値や比率の計算です。
注意が必要なパターン ― 利益率の計算:
- AVG([利益] / [売上]): 各行ごとに利益率を計算してから平均を取る(行レベル計算の後に集計)。 行ごとのウェイトが同じ扱いになるため、件数が多い小口取引が大口取引と同等の影響を持つ。
- SUM([利益]) / SUM([売上]): 合計利益を合計売上で割る(集計してから割り算)。 売上金額で加重された正確な利益率になる。通常こちらが正しい。
DA試験でも「行レベル計算と集計計算のどちらが正しい結果をもたらすか」という問題が出題されます。 処理タイミングの違いを理解しておくことが重要です。
よくあるユースケース
計算フィールドが実務でどのように使われるか、代表的なユースケースを3つ紹介します。
利益率の計算
最も基本的なユースケースです。利益率は利益を売上で割った値ですが、 前述のように行レベル計算と集計計算のどちらで求めるかに注意が必要です。
// 正しい利益率の計算(集計ベース)
SUM([利益]) / SUM([売上])
// パーセント表示したい場合
SUM([利益]) / SUM([売上]) * 100計算フィールドを作成後、書式設定でパーセント表示・小数点桁数を設定するとより見やすくなります。
ABC分析(顧客・商品の分類)
売上上位20%をAランク、次の30%をBランク、残り50%をCランクに分類するABC分析は、 CASE式や条件分岐と組み合わせて実装できます。 ただし、ランク付け自体にはテーブル計算のRANK関数を使う方が柔軟です。 計算フィールドでは閾値(上位20%など)をパラメーターと組み合わせて動的に設定する方法もあります。
売上規模による固定閾値でのABC分類の例:
IF SUM([売上]) >= 1000000 THEN "A"
ELSEIF SUM([売上]) >= 300000 THEN "B"
ELSE "C"
END年齢層分け(顧客の世代分類)
顧客の年齢フィールドから世代分類を作る計算フィールドはセグメント分析でよく使います。
IF [年齢] < 30 THEN "20代以下"
ELSEIF [年齢] < 40 THEN "30代"
ELSEIF [年齢] < 50 THEN "40代"
ELSEIF [年齢] < 60 THEN "50代"
ELSE "60代以上"
ENDこのような計算フィールドをディメンションとしてビューに配置すると、 世代別の売上分布などを簡単に可視化できます。
計算フィールドのベストプラクティス
計算フィールドを使いこなすために、実務で役立つベストプラクティスを紹介します。
命名規則を統一する
ワークブックに計算フィールドが増えてくると、名前が分かりにくいと管理が大変になります。 以下のような命名規則を決めておくと、チームでの共有がしやすくなります。
- プレフィックスで種類を示す: 集計計算には「[集計]」、分類計算には「[分類]」などのプレフィックスをつけると一目でわかります。 例:
[集計] 利益率、[分類] 顧客セグメント - 何を計算しているか明確な名前にする: 「計算1」「新しいフィールド」のような名前は避け、
[売上に対する利益率]のように内容がわかる名前にします。 - 補助計算フィールドは名前でわかるようにする: 他の計算フィールドの素材として使う中間計算には 先頭に「_」(アンダースコア)をつけて区別するチームもあります。
コメントを活用する
複雑な計算フィールドには、なぜその計算をしているかをコメントで残しておきましょう。 数ヶ月後に自分が見返したときや、他のメンバーが引き継いだときに理解しやすくなります。
// 利益率 = 利益合計 ÷ 売上合計
// 行レベルのAVGではなく集計ベースで計算することで
// 売上規模に応じた正確な利益率を算出
SUM([利益]) / SUM([売上])パフォーマンスを意識する
計算フィールドはビューが更新されるたびに再計算されます。 大規模なデータソースで複雑な計算フィールドを多用するとパフォーマンスが低下することがあります。 以下の点を意識しましょう。
- データソース計算を活用する: 可能であれば、Tableau上で計算するのではなくデータベース側(SQL)で事前計算しておくと パフォーマンスが向上します。
- LOD式はFIXEDを使いすぎない: LOD式(特にFIXED)はデータソースへの追加クエリを発行するため、 多用するとクエリ回数が増え遅くなります。 必要な場合のみ使い、不要なLOD式は削除しましょう。
- 計算フィールドのネストに注意: 計算フィールドの中で別の計算フィールドを参照する「ネスト」は便利ですが、 深くネストしすぎると最適化が効きにくくなります。 3段階以上のネストになる場合は設計を見直しましょう。
PassDojo Tableau実践入門で実践練習しよう
計算フィールドの概念を理解したら、実際にTableauを操作して手を動かすことが上達の近道です。 PassDojoのTableau実践入門では、計算フィールドの基礎から応用まで段階的に実践できる課題を用意しています。
Step04: 計算フィールドの基礎
Step04は計算フィールドの入門ステップです。 売上データを使って行レベルの計算フィールド(利益・利益率など)を作成し、 ビューに活用する課題に取り組みます。 「計算フィールドを作ったことがない」という方はまずStep04から始めましょう。
- 行レベルの計算フィールドの作成
- 数値関数(ROUND等)を使った計算
- 計算フィールドをビューに配置して集計に使う
Step22: 応用計算フィールド
Step22では条件分岐や複数関数を組み合わせた応用的な計算フィールドに挑戦します。 実務でよく使われるセグメント分類や複合指標の計算を通じて、 計算フィールドの応用力を養います。 DA試験レベルの計算問題にも対応できる力を身につけられます。
- IF/THEN/ELSEとCASE式を使った分類計算
- 日付関数を使った期間計算
- 集計計算フィールドの組み合わせ
Tableau実践入門で計算フィールドの実力を鍛える
Step04(基本計算)・Step22(応用計算)でTableauの計算フィールドを 実際に手を動かして習得しましょう。Step01は無料体験可能です。
模擬試験で計算フィールドの理解を確認する
計算フィールドの知識はTableau Desktop基礎試験・DA試験の両方で問われます。 PassDojoの模擬試験で本番形式の問題を解いて理解度を確認しましょう。
あわせて読みたい
※ 本記事はTableau Desktop基礎試験およびTableau Certified Data Analyst試験の学習を支援する目的で作成しています。 試験の最新情報・出題範囲はSalesforce(Tableau)の公式サイトをご確認ください。 記載の関数・構文はTableau Desktop 2024.x時点の仕様に基づいており、バージョンによって動作が異なる場合があります。