Tableau – IF, IIF, CASE(論理関数)を使いこなす
![](https://st-brain.com/wp-content/uploads/2022/02/case01-1-1024x559.png)
今回は、Tableauで計算フィールドを作成する際に頻出である、IF、IIF、CASEの使い方をご紹介します。
余談ですが、TableauではIF文もCASE文も、制御文ではなく「関数(論理関数)」という呼び方をするようです。
それでは、具体例を示しながら説明していきたいと思います。
使用データ
サンプルスーパーストア
IF文(IF関数)
IF <条件式> THEN <結果>
ELSEIF <条件式2> THEN <結果2>
ELSEIF <条件式3> THEN <結果3>
ELSE <それ以外>
END
<条件式>の部分には、論理式が使えます。
A AND B
A OR
B
NOT A
といった形です。
具体例で見てみましょう。
具体例 1. 「利益」がプラスなら「黒字」、イコールなら「プラマイゼロ」、マイナスなら「赤字」と表示する
IF [利益] > 0 THEN ‘黒字’
ELSEIF [利益] = 0 THEN ‘プラマイゼロ’
ELSE “赤字”
END
![](https://st-brain.com/wp-content/uploads/2022/02/if01.png)
具体例2. 「売上合計」が100,000円以上、「利益合計」が「1,000円以上」なら「目標達成」、そうでないなら「目標未達」と表示する
IF SUM([売上]) > 100000 AND SUM([利益]) > 1000 THEN ‘目標達成’
ELSE “目標未達”
END
![](https://st-brain.com/wp-content/uploads/2022/02/if02.png)
cf. 集計と非集計について
上記で、SUM()で囲うか囲わないかの違いが気になった方がいるかもしれまさせん。
この2つは、異なる意味を持っています。
上記の「利益」を使ったIF文で説明すると、
IF [利益] > 0 THEN ‘黒字’
ELSEIF [利益] = 0 THEN ‘プラマイゼロ’
ELSE “赤字”
END
は、非集計(SUMやAVGを使っていない)の状態です。一行ずつ判断しているイメージになります。
一方、
IF SUM([利益]) > 0 THEN ‘黒字’
ELSEIF SUM([利益]) = 0 THEN ‘プラマイゼロ’
ELSE “赤字”
END
という形で、利益をSUM()で囲った場合は、集計された状態に対して条件判定を行います。
どの単位で集計するかは、bizの状態(詳細度)に寄ります。
もし「カテゴリ別」の表やグラフなのであれば、カテゴリごとに利益を合計した上で、その合計値が0を上回っているかどうかで判断をします。
なお、Tableauでは同一フィールド内で「集計」と「非集計」を混在させることはできません。
例えばこんな計算式はNG(エラー)になります。
IF SUM([売上]) > 10000 AND [サブカテゴリ] = ‘テーブル’
THEN ‘売上10000以上のテーブル’
END
このケースでいえば、利益のSUM()を取って、1行1行で判断する方が意味的に良さそうです。
IF [売上] > 10000 AND [サブカテゴリ] = ‘テーブル’
THEN ‘売上10000以上のテーブル’
END
このあたりは、また別の記事でまとめたいと思います。
IIF
IIF ( <件式>, <結果>, <それ以外> )
条件が2択(真か偽か)で処理を振り分けるのであれば、IIF関数を使うことでより簡潔に書くことができます。
先ほどと同様の例を、IIF関数で記載してみます。
具体例1. 「売上合計」が100,000円以上、「利益合計」が「1,000円以上」なら「目標達成」、そうでないなら「目標未達」と表示する
IIF(SUM([売上]) > 100000 AND SUM([利益]) > 1000, ‘目標達成’, ‘目標未達’)
![](https://st-brain.com/wp-content/uploads/2022/02/iif01.png)
CASE
CASE文も、SQLでもお馴染みの基本構文になります。
CASE <条件>
WHEN <値> THEN <戻り値>
WHEN <値2> THEN <戻り値2>
WHEN <値3> THEN <戻り値3>
WHEN <値4> THEN <戻り値4>
ELSE <それ以外>
END
といった形です。
具体例1. 出荷年ごとに区分表示する
CASE YEAR([出荷日])
WHEN 2017 THEN ‘2017年出荷’
WHEN 2018 THEN ‘2018年出荷’
WHEN 2019 THEN ‘2019年出荷’
WHEN 2020 THEN ‘2020年出荷’
ELSE ‘それ以外’
END
![](https://st-brain.com/wp-content/uploads/2022/02/case01.png)
bizに投入すると区分表示ができます。
![](https://st-brain.com/wp-content/uploads/2022/02/case02.png)
具体例2. オーダー日を平日(月〜金)と休日(土日)で区分する
CASE LEFT(DATENAME(‘weekday’,[オーダー日]),3)
WHEN ‘Mon’ THEN ‘平日’
WHEN ‘Tue’ THEN ‘平日’
WHEN ‘Wed’ THEN ‘平日’
WHEN ‘Thu’ THEN ‘平日’
WHEN ‘Fri’ THEN ‘平日’
WHEN ‘Sat’ THEN ‘休日’
WHEN ‘Sun’ THEN ‘休日’
END
![](https://st-brain.com/wp-content/uploads/2022/02/case04.png)
少し分かり辛いですが、bizに投入すると平日と休日で区分ができます。
![](https://st-brain.com/wp-content/uploads/2022/02/case03.png)
CASE文は、同じ内容をIF文やIIF関数でも記載できますが、一般的にCASE文を使った方が簡潔に記載することができます。
いかがでしたか。
以下はtableauの公式ヘルプです。こちらも参考にしてみてくださいね。