論理関数

この記事では、論理関数と Tableau での用途について紹介します。また、例を使用して論理計算を作成する方法を示します。

論理計算を使用する理由

論理計算を使用すると、特定の条件が true か false かを判断できます (ブール論理)。たとえば、特定の限界値に基づいて値を分類したい場合があります。

論理計算は次のようになります。

IF [Profit] > 0 
THEN 'Profitable'
ELSEIF [Profit] = 0 THEN 'Break even'
ELSE 'Loss'
END

Tableau で利用可能な論理関数と演算子

AND

構文<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

「(季節 = 春) と (季節 = 秋) の両方が同時に真である場合は、「黙示録なので履き物は関係ありません」と返します。」

多くの場合、IFIIF とともに使用されます。NOTOR も参照してください。

両方の式が TRUE の場合 (つまり FALSE でも NULL でもない場合)、結果は TRUE になります。いずれかの式が NULL の場合、結果は NULL になります。それ以外の場合、結果は FALSE になります。

AND 比較の結果がワークシートに表示される計算を作成すると、Tableau では TRUEFALSE と表示されます。この設定を変更するには、書式設定ダイアログ ボックスの [書式設定] エリアを使用してください。

AND 演算子は、「短絡評価」を採用しています。そのため、最初の式が FALSE として評価された場合、2 番目の式はまったく評価されません。このことは、最初の式が FALSE として評価されているときに、2 番目の式でエラーが発生した場合に役に立ちます。なぜならば、短絡評価が採用されている場合、2 番目の式は一度も評価されないからです。

CASE

構文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

「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」

IFIIF も参照してください。

WHENTHENELSEEND とともに使用されます。

ヒント: 多くの場合、グループを使用して複雑な CASE 関数と同じ結果を取得したり、前の例のように CASE を使用してネイティブのグループ化機能を置き換えたりすることができます。自身のシナリオで、どちらの方がパフォーマンスがよいかを確認できます。

ELSE

構文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

CASEWHENIFELSEIFTHENEND とともに使用されます。

ELSECASEIF のオプションです。ELSE が指定されていない計算では、<test> がいずれも true でない場合、計算全体で Null が返されます。

ELSE は条件 ([Season] = "Winter" など) を必要とせず、Null 処理の一種と考えることができます。

ELSEIF

構文[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

IFTHENELSEEND とともに使用されます。

ELSEIF は、追加の IF 句と考えることができます。ELSEIF はオプションであり、複数回繰り返すことができます。

ELSE とは異なり、ELSEIF には条件が必要です ([Season] = "Winter" など)。

END

定義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

「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」

CASEWHENIFELSEIFTHENELSE とともに使用されます。

IF

構文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 でない場合は、「スニーカー」を返します。」

IFIIF も参照してください。

ELSEIFTHENELSEEND とともに使用されます。

IFNULL

構文IFNULL(expr1, expr2)
出力<expr> の値のデータ型に応じて異なります。
定義

Null 以外の場合は <expr1> を返し、それ以外の場合は <expr2> を返します。

IFNULL([Assigned Room], "TBD")

「[割り当てられた部屋] フィールドが Null でない場合は、その値を返します。[割り当てられた部屋] フィールドが Null の場合は、代わりに「TBD」を返します。」

ISNULL と比較します。IFNULL は常に値を返します。ISNULL はブール値 (True または False) を返します。

ZN も参照してください。

IIF

構文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 でない場合は、「スニーカー」を返します。」

IFCASE も参照してください。

IIF には、(IF のように) ELSEIF や、(CASE のように) 繰り返される WHEN 句に相当するものはありません。代わりに、IIF ステートメントを <unknown> 要素としてネストすることで、複数のテストを順番に評価できます。最初 (一番外側) の true が返されます。

つまり、以下の計算では、A=A が true と評価されるとすぐに式の評価をやめるため、結果はオレンジではなく赤になります。

IIF('A' = 'A', 'Red', IIF('B' = 'B', 'Orange', IIF('C' = 'D', 'Yellow', 'Green')))

IN

構文<expr1> IN <expr2>
出力ブール値 (True または False)
定義<expr1> の値が <expr2> のいずれかの値と一致する場合、TRUE を返します。
SUM([Cost]) IN (1000, 15, 200)

「コスト フィールドの値は 1000、15、または 200 ですか?」

[Field] IN [Set]

「フィールドの値はセット内に存在しますか?」

<expr2> の値は、セット、リテラル値のリスト、または組み合わせフィールドにすることができます。

WHEN も参照してください。

ISDATE

構文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

構文ISNULL(expression)
出力ブール値 (True または False)
定義

<expression> が NULL の場合 (有効なデータが含まれていない場合)、true を返します。

ISNULL([Assigned Room])

「[割り当てられた部屋] フィールドは Null ですか?」

IFNULL と比較します。IFNULL は常に値を返します。ISNULL はブール値を返します。

ZN も参照してください。

MAX

構文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

構文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

構文NOT <expression>
出力ブール値 (True または False)
定義1 つの式で論理否定を実行します。
IF NOT [Season] = "Summer" 
THEN 'Don't wear sandals'
ELSE 'Wear sandals' 
END

「季節が夏でない場合は、「サンダルを履かないでください」を返します。そうでない場合は、「サンダルを履いてください」と返します。」

多くの場合、IFIIF とともに使用されます。ANDOR も参照してください。

OR

構文<expr1> OR <expr2>
出力ブール値 (True または False)
定義2 つの式の論理和を実行します。
IF [Season] = "Spring" OR [Season] = "Fall" 
THEN "Sneakers"
END

「(「季節」=「春」) または (「季節」=「秋」) のいずれかが true の場合、「スニーカー」を返します。」

多くの場合、IFIIF とともに使用されます。ANDNOT も参照してください。

いずれかの式が TRUE の場合、結果は TRUE になります。両方の式が FALSE の場合、結果は FALSE になります。両方の式が NULL の場合、結果は NULL になります。

OR 比較の結果がワークシートに表示される計算を作成すると、Tableau では TRUE や FALSE と表示されます。この設定を変更するには、書式設定ダイアログ ボックスの [書式設定] エリアを使用してください。

OR 演算子は、「短絡評価」を採用しています。そのため、最初の式が TRUE として評価された場合、2 番目の式はまったく評価されません。このことは、最初の式が TRUE として評価されているときに、2 番目の式でエラーが発生した場合に役に立ちます。なぜならば、短絡評価が採用されている場合、2 番目の式は一度も評価されないからです。

THEN

構文IF <test1> THEN <then1>
[ELSEIF <test2> THEN <then2>...]
[ELSE <default>]
END
定義IFELSEIFCASE の式の必須部分であり、特定の値またはテストが 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

「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」

CASEWHENIFELSEIFTHENELSEEND とともに使用されます。

WHEN

構文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

「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」

CASETHENELSEEND とともに使用されます。

CASE は次のような WHEN IN 構造もサポートします。

CASE <expression> 
WHEN IN <set1> THEN <then1>
WHEN IN <combinedfield> THEN <then2>
...
ELSE <default>
END

WHEN IN で比較される値は、セット、リテラル値のリスト、または組み合わせフィールドである必要があります。IN も参照してください。

ZN

構文ZN(expression)
出力<expression> のデータ型によって異なります。または 0 です。
定義Null でない場合は <expression> を返し、それ以外は 0 を返します。
ZN([Test Grade])

「テストの成績が Null でない場合は、その値を返します。テストの成績が Null の場合は、0 を返します。」

ZNIFNULL の特殊なケースであり、式が Null の場合の代替値は計算で指定されるのではなく、常に 0 になります。

ZN は、追加の計算を実行し、Null によって計算全体が Null になる場合に特に便利です。ただし、これらの結果を Null として解釈することは、必ずしも 0 と同義ではなく、欠損データを表す可能性があるので注意が必要です。

ISNULL も参照してください。


: これらのうちいくつかは、実際には論理演算子であり、青ではなく黒で表示されます。詳細については、「演算子の構文」を参照してください。

CASE、IF、IIF に関する注

通常、CASE は IF または IIF より簡単に使用できます。多くの場合、IF、IIF、CASE は同じ意味で使用できます。CASE 文は常に IF 文として再記述できますが、一般的に CASE 関数の方が理解しやすく簡潔です。ただし、各 ELSEIF は別のフィールドを参照する可能性があるため、すべての IF 文を CASE 文として記述できるわけではありません。

ヒント: これら 3 つの関数で同じロジックを使用した例を比較してみましょう。

CASEIFIIF
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

論理計算の作成

次の手順に従って、論理計算の作成方法を学習してください。

  1. Tableau Desktop で、Tableau に付属のサンプル - スーパーストア保存済みデータ ソースに接続します。
  2. ワークシートに移動します。
  3. [データ] ペインから、"州"[行] シェルフにドラッグします。
  4. [データ] ペインから、"カテゴリ"[行] シェルフにドラッグして、"State (州)" の右に配置します。
  5. [データ] ペインから、"売上"[列] シェルフにドラッグします。
  6. [分析] > [計算フィールドの作成] を選択します。
  7. 開いた計算エディターで、次の操作を実行します。
    • 計算フィールドに「KPI」と名前を付けます。
    • 次の式を入力します。
      SUM([Profit]) > 0

      メンバーが 1 人以上いるかどうかをこの計算で簡単に確認できます。1 人以上いる場合は true、いない場合は false が返されます。

    • 終了したら、[OK] をクリックします。
  8. 新しい計算フィールドが [データ] ペインの [メジャー] の下に表示されます。他のフィールドと同様に、このフィールドを 1 つ以上のビジュアライゼーションで使用できます。

  9. [データ] ペインから "KPI" を [マーク カード] の [色] にドラッグします。

    これで、州ごとにどのカテゴリーの売上が落ちているかを確認できるようになりました。

関連項目

キー プログレス インジケーターの視覚化

Tableau で使用する関数

Tableau 関数 (カテゴリ別)

Tableau 関数 (アルファベット順)

フィードバックをありがとうございます。フィードバックは正常に送信されました。ありがとうございます!