論理関数
この記事では、論理関数と 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" 「(季節 = 春) と (季節 = 秋) の両方が同時に真である場合は、「黙示録なので履き物は関係ありません」と返します。」 |
注 | 多くの場合、IF や IIF とともに使用されます。NOT と OR も参照してください。 両方の式が
注: |
CASE
構文 | CASE <expression>
|
出力 | <then> の値のデータ型に応じて異なります。 |
定義 |
|
例 |
「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | WHEN、THEN、ELSE、END とともに使用されます。 ヒント: 多くの場合、グループを使用して複雑な CASE 関数と同じ結果を取得したり、前の例のように CASE を使用してネイティブのグループ化機能を置き換えたりすることができます。自身のシナリオで、どちらの方がパフォーマンスがよいかを確認できます。 |
ELSE
構文 | CASE <expression>
|
定義 | IF 式または CASE 式で、テスト結果がいずれも true でない場合に返す既定値を指定するためのオプションの部分。 |
例 | IF [Season] = "Summer" THEN 'Sandals' CASE [Season] |
注 | CASE、WHEN、IF、ELSEIF、THEN、END とともに使用されます。
|
ELSEIF
構文 | [ELSEIF <test2> THEN <then2>] |
定義 | IF 式のオプションの部分であり、最初の IF に一致しない場合に追加の条件を指定するために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' |
注 |
|
END
定義 | IF 式または CASE 式を閉じるために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 CASE [Season] 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 |
IF
構文 | IF <test1> THEN <then1> |
出力 | <then> の値のデータ型に応じて異なります。 |
定義 | 一連の式をテストし、最初の真の |
例 | IF [Season] = "Summer" THEN 'Sandals' 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 |
注 |
IFNULL
構文 | IFNULL(expr1, expr2) |
出力 | <expr> の値のデータ型に応じて異なります。 |
定義 | Null 以外の場合は |
例 | IFNULL([Assigned Room], "TBD") 「[割り当てられた部屋] フィールドが Null でない場合は、その値を返します。[割り当てられた部屋] フィールドが Null の場合は、代わりに「TBD」を返します。」 |
注 | ISNULL と比較します。 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', 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらも true でない場合は、「スニーカー」を返します。」 IIF('Season' = 'Summer', 'Sandals', 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 |
注 |
つまり、以下の計算では、A=A が true と評価されるとすぐに式の評価をやめるため、結果はオレンジではなく赤になります。
|
IN
構文 | <expr1> IN <expr2> |
出力 | ブール値 (True または False) |
定義 | <expr1> の値が <expr2> のいずれかの値と一致する場合、TRUE を返します。 |
例 | SUM([Cost]) IN (1000, 15, 200) 「コスト フィールドの値は 1000、15、または 200 ですか?」 [Field] IN [Set] 「フィールドの値はセット内に存在しますか?」 |
注 |
WHEN も参照してください。 |
ISDATE
構文 | ISDATE(string) |
出力 | ブール値 (True または False) |
定義 | 指定された <string> が有効な日付の場合、true を返します。入力式は文字列 (テキスト) フィールドである必要があります。 |
例 | ISDATE("2018-09-22") 「文字列 2018-09-22 は適切にフォーマットされた日付ですか?」 |
注 | 有効な日付とみなされる日付は、計算を評価するシステムのロケール(新しいウィンドウでリンクが開く)によって異なります。例: アメリカでは:
イギリスでは:
|
ISNULL
構文 | ISNULL(expression) |
出力 | ブール値 (True または False) |
定義 |
|
例 | ISNULL([Assigned Room]) 「[割り当てられた部屋] フィールドは Null ですか?」 |
注 | IFNULL と比較します。 ZN も参照してください。 |
MAX
構文 | MAX(expression) または MAX(expr1, expr2) |
出力 | 引数と同じデータ型、または引数の一部が Null の場合 NULL 。 |
定義 | 2 つの引数の最大値を返します (2 つの引数は同じ型でなければなりません)。
|
例 | MAX(4,7) = 7 |
注 | 文字列の場合
データベースのデータ ソースでは、 日付の場合 日付の場合、 集計として
比較として
|
MIN
構文 | MIN(expression) または MIN(expr1, expr2) |
出力 | 引数と同じデータ型、または引数の一部が Null の場合 NULL 。 |
定義 | 2 つの引数の最小値を返します (2 つの引数は同じ型でなければなりません)。
|
例 | MIN(4,7) = 4 |
注 | 文字列の場合
データベースのデータ ソースでは、 日付の場合 日付の場合、 集計として
比較として
|
NOT
構文 | NOT <expression> |
出力 | ブール値 (True または False) |
定義 | 1 つの式で論理否定を実行します。 |
例 | IF NOT [Season] = "Summer" 「季節が夏でない場合は、「サンダルを履かないでください」を返します。そうでない場合は、「サンダルを履いてください」と返します。」 |
注 |
OR
構文 | <expr1> OR <expr2> |
出力 | ブール値 (True または False) |
定義 | 2 つの式の論理和を実行します。 |
例 | IF [Season] = "Spring" OR [Season] = "Fall" 「(「季節」=「春」) または (「季節」=「秋」) のいずれかが true の場合、「スニーカー」を返します。」 |
注 | 多くの場合、IF や IIF とともに使用されます。AND と NOT も参照してください。 いずれかの式が
注: |
THEN
構文 | IF <test1> THEN <then1>
|
定義 | IF 、ELSEIF 、CASE の式の必須部分であり、特定の値またはテストが true の場合に返す結果を定義するために使用されます。 |
例 | IF [Season] = "Summer" THEN 'Sandals' 「「季節」=「夏」の場合、「サンダル」を返します。そうでない場合は、次の式を確認します。「季節」=「冬」の場合、「ブーツ」を返します。どちらの式も true でない場合は、「スニーカー」を返します。」 CASE [Season] 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 |
WHEN
構文 | CASE <expression>
|
定義 | CASE 式の必須部分。<expression> と一致する最初の <value> を見つけ、対応する <then> を返します。 |
例 | CASE [Season] 「[季節] フィールドを確認してください。値が「夏」の場合は、「サンダル」を返します。値が「冬」の場合は、「ブーツ」を返します。[季節] フィールドの内容が計算内の選択肢と一致しない場合は、「スニーカー」を返します。」 |
注 | CASE、THEN、ELSE、END とともに使用されます。
CASE <expression>
|
ZN
構文 | ZN(expression) |
出力 | <expression> のデータ型によって異なります。または 0 です。 |
定義 | Null でない場合は <expression> を返し、それ以外は 0 を返します。 |
例 | ZN([Test Grade]) 「テストの成績が Null でない場合は、その値を返します。テストの成績が Null の場合は、0 を返します。」 |
注 |
ISNULL も参照してください。 |
注: これらのうちいくつかは、実際には論理演算子であり、青ではなく黒で表示されます。詳細については、「演算子の構文」を参照してください。
通常、CASE は IF または IIF より簡単に使用できます。多くの場合、IF、IIF、CASE は同じ意味で使用できます。CASE 文は常に IF 文として再記述できますが、一般的に CASE 関数の方が理解しやすく簡潔です。ただし、各 ELSEIF は別のフィールドを参照する可能性があるため、すべての IF 文を CASE 文として記述できるわけではありません。
ヒント: これら 3 つの関数で同じロジックを使用した例を比較してみましょう。
CASE | IF | IIF |
CASE [Region] | IF [Region] = 'West' THEN 1 | IIF([Region] = 'West', 1, |
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 (州)" の右に配置します。
- [データ] ペインから、"売上" を [列] シェルフにドラッグします。
- [分析] > [計算フィールドの作成] を選択します。
- 開いた計算エディターで、次の操作を実行します。
- 計算フィールドに「KPI」と名前を付けます。
- 次の式を入力します。
SUM([Profit]) > 0
メンバーが 1 人以上いるかどうかをこの計算で簡単に確認できます。1 人以上いる場合は true、いない場合は false が返されます。
- 終了したら、[OK] をクリックします。
- [データ] ペインから "KPI" を [マーク カード] の [色] にドラッグします。
これで、州ごとにどのカテゴリーの売上が落ちているかを確認できるようになりました。
新しい計算フィールドが [データ] ペインの [メジャー] の下に表示されます。他のフィールドと同様に、このフィールドを 1 つ以上のビジュアライゼーションで使用できます。