この記事では、論理関数と Tableau での用途について紹介します。また、例を使用して論理計算を作成する方法を示します。
論理計算を使用すると、特定の条件が true か false かを判断できます (ブール論理)。たとえば、特定の限界値に基づいて値を分類したい場合があります。
論理計算は次のようになります。
IF [Profit] > 0
THEN 'Profitable'
ELSEIF [Profit] = 0 THEN 'Break even'
ELSE 'Loss'
END
構文 | <expr1> AND <expr2> |
定義 | 2 つの式の論理積を実行します (この論理計算は、両方が true の場合に true を返します)。 |
出力 | ブール値 (True または False) |
例 | IF [Season] = "Spring" AND "[Season] = "Fall" THEN "It's the apocalypse and footwear doesn't matter" END 「(季節 = 春) と (季節 = 秋) の両方が同時に真である場合は、「黙示録なので履き物は関係ありません」と返します。」 |
注 | 多くの場合、IF や IIF とともに使用されます。NOT と OR も参照してください。 両方の式が TRUE の場合 (つまり FALSE でも NULL でもない場合)、結果は TRUE になります。いずれかの式が NULL の場合、結果は NULL になります。それ以外の場合、結果は FALSE になります。 AND 比較の結果がワークシートに表示される計算を作成すると、Tableau では TRUE や FALSE と表示されます。この設定を変更するには、書式設定ダイアログ ボックスの [書式設定] エリアを使用してください。
注: AND 演算子は、「短絡評価」を採用しています。そのため、最初の式が FALSE として評価された場合、2 番目の式はまったく評価されません。このことは、最初の式が FALSE として評価されているときに、2 番目の式でエラーが発生した場合に役に立ちます。なぜならば、短絡評価が採用されている場合、2 番目の式は一度も評価されないからです。 |
構文 | CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>] END |
出力 | <then> の値のデータ型に応じて異なります。 |
定義 | expression を評価し、指定されたオプション (<value1> 、<value2> など) と比較します。value が式と一致した場合、CASE は対応する return を返します。一致しなかった場合は、(オプションの) 既定値を返します。既定値も一致した値もない場合は、Null を返します。
|
例 | CASE [Season] WHEN 'Summer' THEN 'Sandals' WHEN 'Winter' THEN 'Boots' ELSE 'Sneakers' END
「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | IF と IIF も参照してください。 WHEN、THEN、ELSE、END とともに使用されます。 ヒント: 多くの場合、グループを使用して複雑な CASE 関数と同じ結果を取得したり、前の例のように CASE を使用してネイティブのグループ化機能を置き換えたりすることができます。自身のシナリオで、どちらの方がパフォーマンスがよいかを確認できます。 |
構文 | CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>] END |
定義 | IF 式または CASE 式で、テスト結果がいずれも true でない場合に返す既定値を指定するためのオプションの部分。 |
例 | IF [Season] = "Summer" THEN 'Sandals' ELSEIF [Season] = "Winter" THEN 'Boots' ELSE 'Sneakers' END CASE [Season] WHEN 'Summer' THEN 'Sandals' WHEN 'Winter' THEN 'Boots' ELSE 'Sneakers' END |
注 | CASE、WHEN、IF、ELSEIF、THEN、END とともに使用されます。 ELSE は CASE と IF のオプションです。ELSE が指定されていない計算では、<test> がいずれも true でない場合、計算全体で Null が返されます。
ELSE は条件 ([Season] = "Winter" など) を必要とせず、Null 処理の一種と考えることができます。
|
構文 | [ELSEIF <test2> THEN <then2>] |
定義 | IF 式のオプションの部分であり、最初の IF に一致しない場合に追加の条件を指定するために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' ELSEIF [Season] = "Winter" THEN 'Boots' ELSEIF [Season] = "Spring" THEN 'Sneakers' ELSEIF [Season] = "Autumn" THEN 'Sneakers' ELSE 'Bare feet' END |
注 | IF、THEN、ELSE、END とともに使用されます。 ELSEIF は、追加の IF 句と考えることができます。ELSEIF はオプションであり、複数回繰り返すことができます。
ELSE とは異なり、ELSEIF には条件が必要です ([Season] = "Winter" など)。
|
定義 | IF 式または CASE 式を閉じるために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' ELSEIF [Season] = "Winter" THEN 'Boots' ELSE 'Sneakers' END 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 CASE [Season] WHEN 'Summer' THEN 'Sandals' WHEN 'Winter' THEN 'Boots' ELSE 'Sneakers' END 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | CASE、WHEN、IF、ELSEIF、THEN、ELSE とともに使用されます。 |
構文 | IF <test1> THEN <then1> [ELSEIF <test2> THEN <then2>...] [ELSE <default>] END |
出力 | <then> の値のデータ型に応じて異なります。 |
定義 | 一連の式をテストし、最初の真の <test> の <then> 値を返します。 |
例 | IF [Season] = "Summer" THEN 'Sandals' ELSEIF [Season] = "Winter" THEN 'Boots' ELSE 'Sneakers' END 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 |
注 | IF と IIF も参照してください。 ELSEIF、THEN、ELSE、END とともに使用されます。 |
構文 | IFNULL(expr1, expr2) |
出力 | <expr> の値のデータ型に応じて異なります。 |
定義 | Null 以外の場合は <expr1> を返し、それ以外の場合は <expr2> を返します。 |
例 | IFNULL([Assigned Room], "TBD") 「[割り当てられた部屋] フィールドが Null でない場合は、その値を返します。[割り当てられた部屋] フィールドが Null の場合は、代わりに「TBD」を返します。」 |
注 | ISNULL と比較します。IFNULL は常に値を返します。ISNULL はブール値 (True または False) を返します。 ZN も参照してください。 |
構文 | IIF(<test>, <then>, <else>, [<unknown>]) |
出力 | 式内の値のデータ型によって異なります。 |
定義 | 条件が満たされているかどうかを確認し (<test> )、テストが true の場合は <then> を返し、テストが false の場合は <else> を返し、テストが Null の場合は <unknown> のオプションの値を返します。オプションの unknown (不明) が指定されていない場合は、IIF は Null を返します。 |
例 | IIF([Season] = 'Summer', 'Sandals', 'Other footwear') 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、「その他の履物」を返します。」 IIF([Season] = 'Summer', 'Sandals', IIF('Season' = 'Winter', 'Boots', 'Other footwear') ) 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらも true でない場合は、「スニーカー」を返します。」 IIF('Season' = 'Summer', 'Sandals', IIF('Season' = 'Winter', 'Boots', IIF('Season' = 'Spring', 'Sneakers', 'Other footwear') ) ) 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 |
注 | IF と CASE も参照してください。 IIF には、(IF のように) ELSEIF や、(CASE のように) 繰り返される WHEN 句に相当するものはありません。代わりに、IIF ステートメントを <unknown> 要素としてネストすることで、複数のテストを順番に評価できます。最初 (一番外側) の true が返されます。
つまり、以下の計算では、A=A が true と評価されるとすぐに式の評価をやめるため、結果はオレンジではなく赤になります。 IIF('A' = 'A', 'Red', IIF('B' = 'B', 'Orange', IIF('C' = 'D', 'Yellow', 'Green')))
|
構文 | <expr1> IN <expr2> |
出力 | ブール値 (True または False) |
定義 | <expr1> の値が <expr2> のいずれかの値と一致する場合、TRUE を返します。 |
例 | SUM([Cost]) IN (1000, 15, 200) 「コスト フィールドの値は 1000、15、または 200 ですか?」 [Field] IN [Set] 「フィールドの値はセット内に存在しますか?」 |
注 | <expr2> の値は、セット、リテラル値のリスト、または組み合わせフィールドにすることができます。
WHEN も参照してください。 |
構文 | ISDATE(string) |
出力 | ブール値 (True または False) |
定義 | 指定された <string> が有効な日付の場合、true を返します。入力式は文字列 (テキスト) フィールドである必要があります。 |
例 | ISDATE("2018-09-22") 「文字列 2018-09-22 は適切にフォーマットされた日付ですか?」 |
注 | 有効な日付とみなされる日付は、計算を評価するシステムのロケール(新しいウィンドウでリンクが開く)によって異なります。例: アメリカでは: ISDATE("2018-09-22") = TRUE ISDATE("2018-22-09") = FALSE
イギリスでは: ISDATE("2018-09-22") = FALSE ISDATE("2018-22-09") = TRUE
|
構文 | ISNULL(expression) |
出力 | ブール値 (True または False) |
定義 | <expression> が NULL の場合 (有効なデータが含まれていない場合)、true を返します。
|
例 | ISNULL([Assigned Room]) 「[割り当てられた部屋] フィールドは Null ですか?」 |
注 | IFNULL と比較します。IFNULL は常に値を返します。ISNULL はブール値を返します。 ZN も参照してください。 |
構文 | MAX(expression) または MAX(expr1, expr2) |
出力 | 引数と同じデータ型、または引数の一部が Null の場合 NULL 。 |
定義 | 2 つの引数の最大値を返します (2 つの引数は同じ型でなければなりません)。 MAX は集計として単一フィールドにも適用できます。
|
例 | MAX(4,7) = 7 MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021# MAX([Name]) = "Zander" |
注 | 文字列の場合 MAX は、通常、アルファベット順で最後に来る値です。
データベースのデータ ソースでは、MAX の文字列値は、その列でデータベースが定義しているソート順が最も高い値です。 日付の場合 日付の場合、MAX は最新の日付です。MAX が集計の場合、結果には日付の階層がありません。MAX が比較の場合、結果には日付の階層が保持されます。 集計として MAX(expression) は集計関数であり、集計された単一の結果を返します。Viz では AGG(expression) と表示されます。
比較として MAX(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。
MIN も参照してください。
|
構文 | MIN(expression) または MIN(expr1, expr2) |
出力 | 引数と同じデータ型、または引数の一部が Null の場合 NULL 。 |
定義 | 2 つの引数の最小値を返します (2 つの引数は同じ型でなければなりません)。 MIN は集計として単一フィールドにも適用できます。
|
例 | MIN(4,7) = 4 MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986# MIN([Name]) = "Abebi" |
注 | 文字列の場合 MIN は、通常、アルファベット順で最初に来る値です。
データベースのデータ ソースでは、MIN の文字列値は、その列でデータベースが定義しているソート順が最も低い値です。 日付の場合 日付の場合、MIN は最も早い日付です。MIN が集計の場合、結果には日付の階層がありません。MIN が比較の場合、結果には日付の階層が保持されます。 集計として MIN(expression) は集計関数であり、集計された単一の結果を返します。Viz では AGG(expression) と表示されます。
比較として MIN(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。
MAX も参照してください。
|
構文 | NOT <expression> |
出力 | ブール値 (True または False) |
定義 | 1 つの式で論理否定を実行します。 |
例 | IF NOT [Season] = "Summer" THEN 'Don't wear sandals' ELSE 'Wear sandals' END 「季節が夏でない場合は、「サンダルを履かないでください」を返します。そうでない場合は、「サンダルを履いてください」と返します。」 |
注 | 多くの場合、IF や IIF とともに使用されます。AND と OR も参照してください。 |
構文 | <expr1> OR <expr2> |
出力 | ブール値 (True または False) |
定義 | 2 つの式の論理和を実行します。 |
例 | IF [Season] = "Spring" OR [Season] = "Fall" THEN "Sneakers" END 「(「季節」=「春」) または (「季節」=「秋」) のいずれかが true の場合、「スニーカー」を返します。」 |
注 | 多くの場合、IF や IIF とともに使用されます。AND と NOT も参照してください。 いずれかの式が TRUE の場合、結果は TRUE になります。両方の式が FALSE の場合、結果は FALSE になります。両方の式が NULL の場合、結果は NULL になります。 OR 比較の結果がワークシートに表示される計算を作成すると、Tableau では TRUE や FALSE と表示されます。この設定を変更するには、書式設定ダイアログ ボックスの [書式設定] エリアを使用してください。
注: OR 演算子は、「短絡評価」を採用しています。そのため、最初の式が TRUE として評価された場合、2 番目の式はまったく評価されません。このことは、最初の式が TRUE として評価されているときに、2 番目の式でエラーが発生した場合に役に立ちます。なぜならば、短絡評価が採用されている場合、2 番目の式は一度も評価されないからです。 |
構文 | IF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END |
定義 | IF 、ELSEIF 、CASE の式の必須部分であり、特定の値またはテストが true の場合に返す結果を定義するために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' ELSEIF [Season] = "Winter" THEN 'Boots' ELSE 'Sneakers' END 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 CASE [Season] WHEN 'Summer' THEN 'Sandals' WHEN 'Winter' THEN 'Boots' ELSE 'Sneakers' END 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | CASE、WHEN、IF、ELSEIF、THEN、ELSE、END とともに使用されます。 |
構文 | CASE <expression>
WHEN <value1> THEN <then1>
WHEN <value2> THEN <then2>
...
[ELSE <default>] END |
定義 | CASE 式の必須部分。<expression> と一致する最初の <value> を見つけ、対応する <then> を返します。 |
例 | CASE [Season] WHEN 'Summer' THEN 'Sandals' WHEN 'Winter' THEN 'Boots' ELSE 'Sneakers' END 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | CASE、THEN、ELSE、END とともに使用されます。 CASE は次のような WHEN IN 構造もサポートします。
CASE <expression> WHEN IN <set1> THEN <then1> WHEN IN <combinedfield> THEN <then2> ... ELSE <default> END WHEN IN で比較される値は、セット、リテラル値のリスト、または組み合わせフィールドである必要があります。IN も参照してください。
|
構文 | ZN(expression) |
出力 | <expression> のデータ型によって異なります。または 0 です。 |
定義 | Null でない場合は <expression> を返し、それ以外は 0 を返します。 |
例 | ZN([Test Grade]) 「テストの成績が Null でない場合は、その値を返します。テストの成績が Null の場合は、0 を返します。」 |
注 | ZN は IFNULL の特殊なケースであり、式が Null の場合の代替値は計算で指定されるのではなく、常に 0 になります。
ZN は、追加の計算を実行し、Null によって計算全体が Null になる場合に特に便利です。ただし、これらの結果を Null として解釈することは、必ずしも 0 と同義ではなく、欠損データを表す可能性があるので注意が必要です。
ISNULL も参照してください。 |
注: これらのうちいくつかは、実際には論理演算子であり、青ではなく黒で表示されます。詳細については、「演算子の構文」を参照してください。
CASE、IF、IIF に関する注
通常、CASE は IF または IIF より簡単に使用できます。多くの場合、IF、IIF、CASE は同じ意味で使用できます。CASE 文は常に IF 文として再記述できますが、一般的に CASE 関数の方が理解しやすく簡潔です。ただし、各 ELSEIF は別のフィールドを参照する可能性があるため、すべての IF 文を CASE 文として記述できるわけではありません。
ヒント: これら 3 つの関数で同じロジックを使用した例を比較してみましょう。
CASE | IF | IIF |
CASE [Region] WHEN 'West' THEN 1 WHEN 'East' THEN 2 WHEN 'South' THEN 3 WHEN 'North' Then 4 ELSE 5 END | IF [Region] = 'West' THEN 1 ELSEIF [Region] = 'East' THEN 2 ELSEIF [Region] = 'South' THEN 3 ELSEIF [Region] = 'North' THEN 4 ELSE 5 END | IIF([Region] = 'West', 1, IIF([Region] = 'East', 2, IIF([Region] = 'South', 3, IIF([Region] = 'North', 4, 5, 0) ) ) ) |
CASE の構造は非常にシンプルで、記述しやすく、理解しやすいです。ただし、式 (ここでは [地域]) は、IF や IIF とは異なり、論理演算にすることはできません。 CASE の場合でも、Null は IF の場合と同様に処理されます。 | IF THEN 構造では複数の ELSEIF 句が許可されるため、IIF よりも複数の評価がはるかに簡単になります。 Null 処理: 不明な結果 (null) はすべて、同じ ELSE 句によって false の結果として処理されます。ここで、指定された 4 つ以外の地域 (null を含む) には値 5 が割り当てられます。 | IIF 構造では、不明な結果を false の結果とは異なる方法で処理し、IF とは異なる構文を持ちます。具体的な Null 処理のトレードオフは、上記のように入れ子になるため、記述したり理解したりするのが難しくなる可能性があります。 Null 処理: 指定された 4 つ以外の Null でない地域には値 5 が割り当てられますが、Null 値には 0 が割り当てられます。 |
注: 多くの場合、グループを使用すると、複雑な CASE 関数と同じ結果を得ることができます。どちらを選んだ方がパフォーマンスがよいか、試して確認してみてください。
例
CASE 関数は、次のようなシナリオに役立ちます。
CASE LEFT(DATENAME('weekday',[Order Date]),3)
WHEN 'Sun' THEN 0
WHEN 'Mon' THEN 1
WHEN 'Tue' THEN 2
WHEN 'Wed' THEN 3
WHEN 'Thu' THEN 4
WHEN 'Fri' THEN 5
WHEN 'Sat' THEN 6
END
または、パラメーター(新しいウィンドウでリンクが開く)とともに使用する場合に、エンド ユーザーがグラフに表示するメジャーを選択できるようにします。
CASE [Choose a Measure]
WHEN "Sales" THEN SUM([Sales])
WHEN "Profit" THEN AVG([Profit])
WHEN "Quantity" THEN COUNT([Quantity])
WHEN "Shipping Cost" THEN MEDIAN([Shipping Cost])
END
次の手順に従って、論理計算の作成方法を学習してください。
- Tableau Desktop で、Tableau に付属のサンプル - スーパーストア保存済みデータ ソースに接続します。
- ワークシートに移動します。
- [データ] ペインから、"州" を [行] シェルフにドラッグします。
- [データ] ペインから、"カテゴリ" を [行] シェルフにドラッグして、"State (州)" の右に配置します。
- [データ] ペインから、"売上" を [列] シェルフにドラッグします。
- [分析] > [計算フィールドの作成] を選択します。
- 開いた計算エディターで、次の操作を実行します。
新しい計算フィールドが [データ] ペインの [メジャー] の下に表示されます。他のフィールドと同様に、このフィールドを 1 つ以上のビジュアライゼーションで使用できます。
- [データ] ペインから "KPI" を [マーク カード] の [色] にドラッグします。
これで、州ごとにどのカテゴリーの売上が落ちているかを確認できるようになりました。

キー プログレス インジケーターの視覚化
Tableau で使用する関数
Tableau 関数 (カテゴリ別)
Tableau 関数 (アルファベット順)