はじめに:なぜ“演算子”が効くのか
計算の品質は、どの演算子を/どの順番で/どのデータ型に対して使うかでほぼ決まります。関数やフィールドと同じくらい、**演算子(+ - * / % ^ = != <> 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 = 216
(POWER()
相当)
比較:== (=), != (<>), >, <, >=, <=
-
文字列・数値・日付の大小や一致を判定し、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) “どの順番で計算されるか”——優先順位と括弧
強い → 弱い の順:
-
単項マイナス(符号反転)
-
べき乗
^
-
乗除剰余
* / %
-
加減
+ -
-
比較
= != <> > < >= <=
-
NOT
-
AND
-
OR
同順位は左から右。迷ったら括弧で明示が最強。
-
例:
2*1+2
は(2*1)+2=4
、(2*(1+2))=6
注:ここでの“順序”は式の中の話。Tableau全体のフィルターやLODの処理順とは別物です。
3) 型とリテラルの実務ポイント(型が合えば壊れない)
-
連結は
+
でOK:[市] + ', ' + [都道府県]
。数値を混ぜるならSTR()
で文字化。 -
日付+日数:
[日付] + 7
、日付−日付=日数。期間差はDATEDIFF()
も◎。 -
%
は整数限定。IDの偶奇判定などに便利。 -
浮動小数の等値比較は危険:丸め誤差対策で
ROUND()
や閾値比較を。 -
日付は日付型で比較(
#...#
orDATE()
)。文字列のまま比較しない。
4) NULLと三値論理:IFが“想定外に通らない”ワケ
-
AND/OR
はNULLを伝播。条件式が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択:
-
両辺を集計:
SUM([売上]) > SUM([目標])
-
非集計側を代表値化:
SUM([売上]) > ATTR([目標])
(同粒度で単一値) -
LODで粒度を固定:
{FIXED [顧客ID] : SUM([売上])} > 100000
設計の鉄則:「どの粒度で比較するか」を先に決める。分母はLODで固定してから比較すると、フィルターでブレません。
7) 優先順位の罠:括弧ひとつで救える誤判定
-
IF A OR B AND C 問題
既定ではAND
がOR
より強い →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:単一の式をテーブル参照感覚でスッキリ書ける。
-
IIF:
IIF(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
vsSUM
/ATTR
/FIXED
)。 -
「条件が効かない」 → 条件式がNULLになっていないか(
ISNULL
で確認)。 -
「文字列連結でエラー」 → 数値は
STR()
してから+
で結合。 -
「日付計算がずれる」 → リテラルは
#...#
、比較は同じ粒度へDATETRUNC
。 -
「論理が意図と違う」 → 優先順位を見直し、括弧で固定。
13) 5分でできる“安全な計算”チェックリスト
-
☐ 優先順位は意図通り(必要なら括弧)
-
☐ NULL時の振る舞いを定義(
IFNULL/ZN/IIF(..., unknown)
) -
☐ 粒度統一(集計/非集計の混在なし)
-
☐ 型を明確化(
STR/DATE/INT
) -
☐ 複数候補は
IN
で簡潔に -
☐ コメントで根拠を残す(
//
,/* */
)
まとめ
-
演算子の意味と優先順位を押さえるだけで、計算の安定感は段違い。
-
+
は連結/日付加算にも使える、%
は整数限定、^
はべき乗。 -
NULLの三値論理と短絡評価を理解すれば、IFの“想定外”は激減。
-
候補列挙は
IN
、複雑ロジックは IF/CASE/IIF でNULL時の戻りまで設計。 -
迷ったら括弧とコメント。未来の自分と同僚が救われます。
このガイドをブックマークしておけば、次に「式が意図と違う…」となった時、5分で復旧できます。現場は“速く、正しく、壊れない”が正義です。
📩 専門コンサルタントに相談してみませんか?
Tableauのライセンス選定や運用設計に少しでも不安がある方は、一度プロに相談してみるのがおすすめです。
-
どのライセンスを選べばいいか分からない
-
導入したものの活用しきれていない
-
Power BIとの違いを整理したい
当社ではTableau導入から定着・活用まで一気通貫で支援します。業種・業務フローに応じた最適設計をご提案可能です。
▶ 詳細なサービス内容やご相談希望の方は、専用ページをご覧ください。(クリックしてください))
相談は無料です。お気軽にご連絡ください。
コメント