Tableau計算の“土台”を固める:演算子を押さえるだけで計算は壊れない

はじめに:なぜ“演算子”が効くのか
計算の品質は、どの演算子を/どの順番で/どのデータ型に対して使うかでほぼ決まります。関数やフィールドと同じくらい、**演算子(+ - * / % ^ = != <> AND OR NOT () など)**はTableau計算の基本部品。ここを正しく押さえるだけで、KPIのブレや“思ってたのと違う”誤判定がグッと減ります。この記事は、落とし穴→回避法の順で、迷わず使える設計指針をまとめた“ポケットリファレンス”です。


用語のミニ整理

  • 関数SUM(), IF() のような命令

  • フィールド[売上] などデータ列

  • 演算子+ - * / % ^ = != <> AND OR NOT () などの記号

  • リテラル"文字", #2025-09-18#, true, Null のような定数


1) クイックリファレンス:演算子の“意味”と定番用途

算術:+ - * / % ^

  • +加算に加え文字列連結・**日付加算(日数)**も

    • 例:'東京' + '本社''東京本社'#2025-04-15# + 15#2025-04-30#

  • -減算/符号反転日付−日付=日数

    • 例:#2025-04-15# - #2025-04-08#7

  • %剰余(余り)整数のみ9 % 2 = 1

  • ^べき乗6^3 = 216POWER()相当)

比較:== (=), != (<>), >, <, >=, <=

  • 文字列・数値・日付の大小や一致を判定し、TRUE/FALSE/NULLを返す

  • NULLが絡むと結果がNULLになり得る

論理:AND / OR / NOT

  • 短絡評価ANDで左がFALSEなら右を評価しない)

  • 三値論理(TRUE/FALSE/NULL)に注意

集合テスト:IN

  • リスト・セット・複合フィールドに対するメンバーシップ判定

    • 例:[地域] IN ('東日本','西日本')

制御構文(実質ロジック演算子)

  • IF/THEN/ELSEIF/ELSE/END, CASE/WHEN/THEN/ELSE/END

コメント

  • 行末 //、複数行 /* ... */

リテラル書式の要点

  • 文字列:シングル/ダブルクォート

  • 日付:#YYYY-MM-DD#

  • 真偽:true/false

  • 欠損:Null

  • クォート中のクォートは二重化でエスケープ(例:'O''Hanrahan'


2) “どの順番で計算されるか”——優先順位と括弧

強い → 弱い の順:

  1. 単項マイナス(符号反転)

  2. べき乗 ^

  3. 乗除剰余 * / %

  4. 加減 + -

  5. 比較 = != <> > < >= <=

  6. NOT

  7. AND

  8. OR

同順位は左から右。迷ったら括弧で明示が最強。

  • 例:2*1+2(2*1)+2=4(2*(1+2))=6

注:ここでの“順序”は式の中の話。Tableau全体のフィルターやLODの処理順とは別物です。


3) 型とリテラルの実務ポイント(型が合えば壊れない

  • 連結は + でOK:[市] + ', ' + [都道府県]。数値を混ぜるなら STR()で文字化

  • 日付+日数:[日付] + 7日付−日付=日数。期間差は DATEDIFF() も◎。

  • %整数限定。IDの偶奇判定などに便利。

  • 浮動小数の等値比較は危険:丸め誤差対策で ROUND() や閾値比較を。

  • 日付は日付型で比較#...# or DATE())。文字列のまま比較しない。


4) NULLと三値論理:IFが“想定外に通らない”ワケ

  • AND/ORNULLを伝播。条件式がNULLだと、IF (条件) は真判定にならず、THENに入らないことがある。

  • 対策

    • 判定:ISNULL([列])

    • 代替:IFNULL([列], 代替)、数値は ZN([数値])

    • IIF(test, then, else, [unknown])NULL時の戻りを明示

例:ゼロ除算とNULLの安全化

[安全な粗利率] =
IF ZN(SUM([売上])) = 0 THEN
Null // 0割りはNull返し
ELSE
SUM([粗利]) / SUM([売上])
END

5) そのまま貼れる“比較・集合・文字列”レシピ

一致・不一致・範囲

// 一致(= と == は同義)
[VIP顧客] = [会員ランク] = 'PLATINUM'

// 不一致(!= と <> は同義)
[返品対象] = [注文状態] <> 'Delivered'

// 範囲(閉区間/当月だけ)
[当月大型案件] =
[受注金額] >= 10^6
AND DATETRUNC('month',[受注日]) = DATETRUNC('month',TODAY())

複数候補を一発判定(IN)

[主要地域] = [地域] IN ('東日本','西日本','中部')

文字列の組み合わせ・部分一致

[氏名(表示)] = [姓] + ' ' + [名] [年度ラベル] = STR(DATEPART('year',[日付])) + '年'
[先頭一致] = STARTSWITH([品目名], '特選')
[末尾一致] = ENDSWITH([品目名], '改')
[包含] = CONTAINS([備考], '至急')

日付の足し引き・差

[配送予定日] = [受注日] + 7
[経過日数] = DATETRUNC('day',[本日]) - DATETRUNC('day',[初回購入日])

剰余で「偶数だけ」

[偶数受注?] = INT([受注番号]) % 2 = 0

6) “集計と非集計の混在”エラーを秒速で直す

「集計(SUM など)と非集計を混在できません」

解法は3択:

  1. 両辺を集計SUM([売上]) > SUM([目標])

  2. 非集計側を代表値化SUM([売上]) > ATTR([目標])(同粒度で単一値)

  3. LODで粒度を固定{FIXED [顧客ID] : SUM([売上])} > 100000

設計の鉄則:「どの粒度で比較するか」を先に決める。分母はLODで固定してから比較すると、フィルターでブレません。


7) 優先順位の罠:括弧ひとつで救える誤判定

  • IF A OR B AND C 問題
    既定では ANDOR より強い → A OR (B AND C) と解釈。
    意図が (A OR B) AND C なら 括弧必須

  • 単項マイナスと冪
    -2^2-(2^2)= -4(冪が先)。(-2)^2=4 にしたいなら括弧。

  • 除算と加算の取り違え
    売上/目標+1(売上/目標)+1。伸び率なら (売上/目標) - 1 が意図に近い。


8) IF / CASE / IIF の使いどころ

  • IF/ELSEIF/ELSE:最も読みやすい。NULLは多くの場合ELSE側へ。

  • CASE:単一の式をテーブル参照感覚でスッキリ書ける。

  • IIFIIF(test, then, else, unknown)NULL時の戻りまで設計できる。


9) 具体シナリオ(貼って使えるテンプレ)

“主要カテゴリ以外はその他”+“高粗利を強調”

[主要カテゴリ?] = [カテゴリ] IN ('家具','機器','事務用品')

[表示カテゴリ] =
IF [主要カテゴリ?] THEN [カテゴリ] ELSE 'その他' END

[高粗利?] =
IIF(
SUM([売上]) = 0,
Null, // 分母ゼロはNull
SUM([粗利]) / SUM([売上]) >= 0.35,
false // unknown(NULL)はfalse扱い
)

“週次で偶数週だけ配信”

[偶数週?] = DATEPART('week', [基準日]) % 2 = 0

“顧客別の初回からの経過日数”

[初回購入日] = { FIXED [顧客ID] : MIN([注文日]) }
[初回からの経過日数] =
DATETRUNC('day',[注文日]) - DATETRUNC('day',[初回購入日])

10) 文字列・日付・数値の“型またぎ”で躓かない

  • 数値⇔文字列:STR(), INT(), FLOAT()明示変換。連結は全部文字列に寄せる

  • 日付⇔文字列/数値:DATE() で実日付化。見た目はフォーマットで整える。

  • 比較前の正規化:全角/半角・大小文字・空白のトリムを前処理。

  • 浮動小数の等値:ROUND() または ABS(x-y) < 1e-9 のしきい値で。


11) パフォーマンス&保守性:速く・読みやすく

  • OR の連鎖は IN に置換(A='x' OR A='y'A IN ('x','y'))。

  • 重い条件は**上流(データソース/コンテキスト)**で絞る。

  • 括弧で意図を固定し、“あと読み”で迷わない式に。

  • コメントで「なぜこの閾値?」「NULLの扱いは?」を残す。


12) トラブルシューティング早見

  • 「集計と非集計を混在」 → 粒度をそろえる(SUM vs SUMATTRFIXED)。

  • 「条件が効かない」 → 条件式がNULLになっていないか(ISNULL で確認)。

  • 「文字列連結でエラー」 → 数値は STR() してから + で結合。

  • 「日付計算がずれる」 → リテラルは #...#、比較は同じ粒度へ DATETRUNC

  • 「論理が意図と違う」優先順位を見直し、括弧で固定。


13) 5分でできる“安全な計算”チェックリスト

  • ☐ 優先順位は意図通り(必要なら括弧

  • NULL時の振る舞いを定義(IFNULL/ZN/IIF(..., unknown)

  • 粒度統一(集計/非集計の混在なし)

  • 型を明確化STR/DATE/INT

  • ☐ 複数候補は IN で簡潔に

  • コメントで根拠を残す(//, /* */


まとめ

  • 演算子の意味と優先順位を押さえるだけで、計算の安定感は段違い。

  • +連結/日付加算にも使える、%整数限定^べき乗

  • NULLの三値論理短絡評価を理解すれば、IFの“想定外”は激減。

  • 候補列挙は IN、複雑ロジックは IF/CASE/IIFNULL時の戻りまで設計。

  • 迷ったら括弧とコメント。未来の自分と同僚が救われます。

このガイドをブックマークしておけば、次に「式が意図と違う…」となった時、5分で復旧できます。現場は“速く、正しく、壊れない”が正義です。

📩 専門コンサルタントに相談してみませんか?
Tableauのライセンス選定や運用設計に少しでも不安がある方は、一度プロに相談してみるのがおすすめです。

  • どのライセンスを選べばいいか分からない

  • 導入したものの活用しきれていない

  • Power BIとの違いを整理したい

当社ではTableau導入から定着・活用まで一気通貫で支援します。業種・業務フローに応じた最適設計をご提案可能です。
▶ 詳細なサービス内容やご相談希望の方は、専用ページをご覧ください。(クリックしてください))

相談は無料です。お気軽にご連絡ください。

関連記事

この記事へのコメントはありません。

カテゴリー

アーカイブ