---
schema_version: "1"
id: 9c45d592f9822020e9f71d2641bdb39d9be2b09013d156027cbd8bda5cdd4f43
title: 逻辑函数
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/pro/desktop/functions_functions_logical.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_logical.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 3ea172b3748ed7d32df2670508608b42f6780dd5f4b64fc94bb2a5820bdb683b
description: Reference for Tableau logical functions such as IF, CASE, and AND.
---
[跳转到主要内容](#main-content)

# 逻辑函数

本文介绍 Tableau 中的逻辑函数及其用途。它还使用示例来演示如何创建逻辑计算。

## 为什么使用逻辑计算

逻辑计算允许您确定某个特定条件为真还是假（布尔逻辑）。例如，您可能希望根据某些截止值对值进行分类。

逻辑计算可能如下所示：

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

## Tableau 中的可用逻辑函数和运算符

### AND

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>&lt;expr1&gt; AND &lt;expr2&gt;</code></td></tr><tr><td>定义</td><td>对两个表达式执行逻辑合取运算。（如果两边都为 true，则逻辑测试返回 true。）</td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>示例</td><td><pre>IF [Season] = "Spring" AND "[Season] = "Fall" <br>THEN "It's the apocalypse and footwear doesn't matter" <br>END</pre><p><i>“如果（Season = Spring）和（Season = Fall）同时为 true，则返回“It's the apocalypse and footwear doesn't matter”。</i></p></td></tr><tr><td>说明</td><td><p>通常与 <a href="#IF" class="xref">IF</a> 和 <a href="#IIF" class="xref">IIF</a> 一起使用。另请参见 <a href="#NOT" class="xref">NOT</a> 和 <a href="#OR" class="xref">或者</a>。</p><p>如果两个表达式都为 <code>TRUE</code>（即不为 <code>FALSE</code> 或 <code>NULL</code>），则结果为 <code>TRUE</code>。如果任一表达式为 <code>NULL</code>，则结果为 <code>NULL</code>。在所有其他情况下，结果都为 <code>FALSE</code>。</p><p>如果所创建的计算中的 <code>AND</code> 比较结果显示在工作表上，则 Tableau 显示 <code>TRUE</code> 和 <code>FALSE</code>。如果要更改此情况，请使用设置格式对话框中的“设置格式”区域。</p><p class="note"><b>注意</b>：<code>AND</code> 运算符使用<i>短路计算</i>。这表示如果第一个表达式计算为 <code>FALSE</code>，则根本不会计算第二个表达式。如果第二个表达式在第一个表达式为 <code>FALSE</code> 时产生错误，则这可能十分有用，因为在这种情况下从不计算第二个表达式。</p></td></tr></tbody></table>

### CASE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code><b>CASE</b> &lt;expression&gt; 
                        <br>WHEN &lt;value1&gt; THEN &lt;then1&gt; 
                        <br>WHEN &lt;value2&gt; THEN &lt;then2&gt; 
                        <br>...
                        <br>[ELSE &lt;default&gt;]<br>END</code></td></tr><tr><td>输出</td><td>取决于 <code>&lt;then&gt;</code> 值的数据类型。</td></tr><tr><td>定义</td><td><p>对 <code>expression</code> 进行求值，并将其与指定选项（<code>&lt;value1&gt;</code>、<code>&lt;value2&gt;</code> 等）进行比较。遇到一个与表达式匹配的 <code>value</code> 时，CASE 返回相应的 <code>return</code>。如果未找到匹配值，则返回（可选）默认值。如果不存在默认值并且没有任何值匹配，则会返回 Null。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve"><code><b>CASE</b> [Season] <br>WHEN 'Summer' THEN 'Sandals' <br>WHEN 'Winter' THEN 'Boots' <br>ELSE 'Sneakers' <br>END</code></pre><p><i>“看看“Season”字段。如果值为 Summer，则返回 Sandals。如果值为 Winter，则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项，则返回 Sneakers。”</i></p></td></tr><tr><td>说明</td><td><p>另请参见 <a href="#IF" class="xref">IF</a> 和 <a href="#IIF" class="xref">IIF</a>。</p><p>与 <a href="#WHEN" class="xref">WHEN</a>、<a href="#THEN" class="xref">THEN</a>、<a href="#ELSE" class="xref">ELSE</a> 和 <a href="#END" class="xref">END</a> 结合使用。</p><blockquote><p>[!TIP]</p><p><b>提示</b>：很多时候，您可以使用组来获得与复杂 CASE 函数相同的结果，或者使用 CASE 来替换本机分组功能，例如前面的示例。您可能想测试哪个更适合您的场景。</p></blockquote></td></tr></tbody></table>

### ELSE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>CASE &lt;expression&gt; 
							<br>WHEN &lt;value1&gt; THEN &lt;then1&gt; 
							<br>WHEN &lt;value2&gt; THEN &lt;then2&gt; 
							<br>...
						<br>[<b>ELSE</b> &lt;default&gt;]<br>END</code></td></tr><tr><td>定义</td><td><code>IF</code> 或 <code>CASE</code> 表达式的一个可选部分，用于指定如果没有一个测试表达式为 true 则返回的默认值。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Summer"&nbsp;THEN&nbsp;'Sandals' <br>ELSEIF&nbsp;[Season] = "Winter"&nbsp;THEN&nbsp;'Boots' <br><b>ELSE</b>&nbsp;'Sneakers'&nbsp;<br>END</pre><pre>CASE [Season] <br>WHEN 'Summer' THEN 'Sandals' <br>WHEN 'Winter' THEN 'Boots' <br><b>ELSE</b> 'Sneakers' <br>END</pre></td></tr><tr><td>说明</td><td><p>与 <a href="#CASE" class="xref">CASE</a>、<a href="#WHEN" class="xref">WHEN</a>、<a href="#IF" class="xref">IF</a>、<a href="#ELSEIF" class="xref">ELSEIF</a>、<a href="#THEN" class="xref">THEN</a> 和 <a href="#END" class="xref">END</a> 一起使用</p><p><code>ELSE</code> 对于 <code>CASE</code> 和 <code>IF</code> 是可选的。在计算中，其中<code>ELSE</code>未指定，如果没有<code>&lt;test&gt;</code> 为 true 时，整体计算将返回 null。</p><p><code>ELSE</code>不需要条件（例如 <code>[Season] = "Winter"</code>）并且可以被认为是 null 处理的一种形式。</p></td></tr></tbody></table>

### ELSEIF

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>[<b>ELSEIF</b> &lt;test2&gt; THEN &lt;then2&gt;]</code></td></tr><tr><td>定义</td><td><code>IF</code> 表达式的一个可选部分，用于指定初始 IF 之外的附加条件。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Summer" THEN 'Sandals' <br><b>ELSEIF</b> [Season] = "Winter" THEN 'Boots' <br><b>ELSEIF</b> [Season] = "Spring" THEN 'Sneakers' <br><b>ELSEIF</b> [Season] = "Autumn" THEN 'Sneakers'<br>ELSE 'Bare feet' <br>END</pre></td></tr><tr><td>说明</td><td><p>与 <a href="#IF" class="xref">IF</a>、<a href="#THEN" class="xref">THEN</a>、 <a href="#ELSE" class="xref">ELSE</a> 和 <a href="#END" class="xref">END</a> 一起使用</p><p><code>ELSEIF</code> 可以被认为是额外的 <code>IF</code> 子句。<code>ELSEIF</code> 是可选的，并且可以重复多次。</p><p>与 <code>ELSE</code> 不同，<code>ELSEIF</code> 需要一个条件（例如 <code>[Season] = "Winter"</code>）。</p></td></tr></tbody></table>

### END

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>定义</td><td>用于结束一个 <code>IF</code> 或 <code>CASE</code> 表达式。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Summer"&nbsp;THEN&nbsp;'Sandals' <br>ELSEIF&nbsp;[Season] = "Winter"&nbsp;THEN&nbsp;'Boots' <br>ELSE&nbsp;'Sneakers'&nbsp;<br><b>END</b></pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则，请查看下一个表达式。如果 Season = Winter，则返回 Boots。如果两个表达式都不为 true，则返回 Sneakers。”</i></p><pre>CASE [Season] <br>WHEN 'Summer' THEN 'Sandals' <br>WHEN 'Winter' THEN 'Boots' <br>ELSE 'Sneakers' <br><b>END</b></pre><p><i><i>“看看“Season”字段。如果值为 Summer，则返回 Sandals。如果值为 Winter，则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项，则返回 Sneakers。”</i></i></p></td></tr><tr><td>说明</td><td><p>与 <a href="#CASE" class="xref">CASE</a>、<a href="#WHEN" class="xref">WHEN</a>、<a href="#IF" class="xref">IF</a>、<a href="#ELSEIF" class="xref">ELSEIF</a>、<a href="#THEN" class="xref">THEN</a> 和 <a href="#ELSE" class="xref">ELSE</a> 一起使用。</p></td></tr></tbody></table>

### IF

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code><b>IF</b> &lt;test1&gt; THEN &lt;then1&gt; <br>[ELSEIF &lt;test2&gt; THEN &lt;then2&gt;...]<br>[ELSE &lt;default&gt;] <br>END</code></td></tr><tr><td>输出</td><td>取决于 <code>&lt;then&gt;</code> 值的数据类型。</td></tr><tr><td>定义</td><td><p>测试一系列表达式，同时为第一个为 true 的 <code>&lt;test&gt;</code> 返回 <code>&lt;then&gt;</code> 值。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Summer"&nbsp;THEN&nbsp;'Sandals' <br>ELSEIF&nbsp;[Season] = "Winter"&nbsp;THEN&nbsp;'Boots' <br>ELSE&nbsp;'Sneakers'&nbsp;<br><b>END</b></pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则，请查看下一个表达式。如果 Season = Winter，则返回 Boots。如果两个表达式都不为 true，则返回 Sneakers。”</i></p></td></tr><tr><td>说明</td><td><p>另请参见 <a href="#IF" class="xref">IF</a> 和 <a href="#IIF" class="xref">IIF</a>。</p><p>与 <a href="#ELSEIF" class="xref">ELSEIF</a>、<a href="#THEN" class="xref">THEN</a>、<a href="#ELSE" class="xref">ELSE</a> 和 <a href="#END" class="xref">END</a> 一起使用</p></td></tr></tbody></table>

### IFNULL

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>IFNULL(expr1, expr2)</code></td></tr><tr><td>输出</td><td>取决于 <code>&lt;expr&gt;</code> 值的数据类型。</td></tr><tr><td>定义</td><td><p>如果 <code>&lt;expr1&gt;</code> 不为 null，则返回该表达式，否则返回 <code>&lt;expr2&gt;</code>。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">IFNULL([Assigned Room], "TBD")</pre><p><i>“如果“Assigned Room”（分配的房间）字段不为 null，则返回其值。如果“Assigned Room”（分配的房间）字段为 null，则返回 TBD。”</i></p></td></tr><tr><td>说明</td><td><p>与 <a href="#ISNULL" class="xref">ISNULL</a> 进行比较。<code>IFNULL</code> 始终返回一个值。<code>ISNULL</code> 返回一个布尔值（true 或 false）。</p><p>另请参见 <a href="#ZN" class="xref">ZN</a>。</p></td></tr></tbody></table>

### IIF

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code><b>IIF</b>(&lt;test&gt;, &lt;then&gt;, &lt;else&gt;, [&lt;unknown&gt;])</code></td></tr><tr><td>输出</td><td>取决于表达式中值的数据类型。</td></tr><tr><td>定义</td><td>检查是否满足条件（<code>&lt;test&gt;</code>），并在 test 为 true 时返回 <code>&lt;then&gt;</code>，在 test 为 false 时返回 <code>&lt;else&gt;</code>，如果 test 为 null 则为可选值 <code>&lt;unknown&gt;</code>。如果未指定可选的 unknown，<code>IIF</code> 将返回 null。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IIF([Season] = 'Summer', 'Sandals', 'Other footwear')</pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则返回 Other footwear”</i></p><pre xml:space="preserve">IIF([Season] = 'Summer', 'Sandals', <br>   IIF('Season' = 'Winter', 'Boots',  'Other footwear')<br>)</pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则，请查看下一个表达式。如果 Season = Winter，则返回 Boots。如果两者均不为 true，则返回 Sneakers。”</i></p><pre xml:space="preserve">IIF('Season' = 'Summer', 'Sandals', <br>   IIF('Season' = 'Winter', 'Boots',  <br>      IIF('Season' = 'Spring', 'Sneakers', 'Other footwear')<br>   )<br>)</pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则，请查看下一个表达式。如果 Season = Winter，则返回 Boots。如果没有一个表达式为 true，则返回 Sneakers。”</i></p></td></tr><tr><td>说明</td><td><p>另请参见 <a href="#IF" class="xref">IF</a> 和 <a href="#CASE" class="xref">CASE</a>。</p><p><code>IIF</code> 没有等同于 <code>ELSEIF</code>（如 <code>IF</code>）或重复 <code>WHEN</code> 子句（如 <code>CASE</code>）的语句。相反，可以通过将 <code>IIF</code> 语句嵌套为 <code>&lt;unknown&gt;</code> 元素来按顺序计算多个测试。返回第一个（最外面的）true。</p><p>也就是说，在下面的计算中，结果将是红色，而不是橙色，因为一旦 A=A 计算为 true，表达式就会停止计算：</p><p><code>IIF('A' = 'A', 'Red', IIF('B' = 'B', 'Orange',  IIF('C' = 'D', 'Yellow', 'Green')))</code></p></td></tr></tbody></table>

### IN

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>&lt;expr1&gt; IN &lt;expr2&gt;</code></td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>定义</td><td>如果 <code>&lt;expr1&gt;</code> 中的任何值与 <code>&lt;expr2&gt;</code> 中的任何值匹配，则返回 <code>TRUE</code>。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">SUM([Cost]) IN&nbsp;(1000, 15, 200)</pre><p><i>“Cost 字段的值是 1000、15 还是 200？”</i></p><pre xml:space="preserve">[Field] IN&nbsp;[Set]</pre><p><i>“该字段的值是否存在于集合中？”</i></p></td></tr><tr><td>说明</td><td><p><code>&lt;expr2&gt;</code> 中的值可以是集、文本值列表或合并字段。</p><p>另请参见 <a href="#WHEN" class="xref">WHEN</a>。</p></td></tr></tbody></table>

### ISDATE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>ISDATE(string)</code></td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>定义</td><td>如果 <code>&lt;string&gt;</code> 为有效日期，则返回 true。输入表达式必须是字符串（文本）字段。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">ISDATE("2018-09-22")</pre><p><i>“字符串 2018-09-22 是格式正确的日期吗？”</i></p></td></tr><tr><td>说明</td><td><p>什么被视为有效日期取决于对计算求值的系统的<a href="https://help.tableau.com/current/server/zh-cn/lang_intro.htm" target="_blank">区域设置</a>。例如：</p><p>在美国：</p><ul><li><code>ISDATE("2018-09-22") = TRUE</code></li><li><code>ISDATE("2018-22-09") = FALSE</code></li></ul><p>在英国： </p><ul><li><code>ISDATE("2018-09-22") = FALSE</code></li><li><code>ISDATE("2018-22-09") = TRUE</code></li></ul><p></p></td></tr></tbody></table>

### ISNULL

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>ISNULL(expression)</code></td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>定义</td><td><p>如果 <code>&lt;expression&gt;</code> 为 NULL（未包含有效数据），则返回 true。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">ISNULL([Assigned Room])</pre><p><i>“Assigned Room（分配的房间）字段是否为 null？”</i></p></td></tr><tr><td>说明</td><td><p>与 <a href="#IFNULL" class="xref">IFNULL</a> 进行比较。<code>IFNULL</code> 始终返回一个值。<code>ISNULL</code> 返回一个布尔值。</p><p>另请参见 <a href="#ZN" class="xref">ZN</a>。</p></td></tr></tbody></table>

### MAX

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>MAX(expression)</code> 或 <code>MAX(expr1, expr2)</code></td></tr><tr><td>输出</td><td>与参数相同的数据类型，或者，如果参数的任何部分为 null，则为 <code>NULL&nbsp;</code>。</td></tr><tr><td>定义</td><td><p>返回两个参数（必须为相同数据类型）中的最大值。</p><p><code>MAX</code> 也可以聚合形式应用于单个字段。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">MAX(4,7) = 7<br>MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021# <br>MAX([Name]) = "Zander"</pre></td></tr><tr><td>说明</td><td><p><b>对于字符串</b></p><p><code>MAX</code> 通常是按字母顺序排在最后的值。</p><p class="note">对于数据库数据源，<code>MAX</code> 字符串值在数据库为该列定义的排序序列中最高。</p><p><b>对于日期</b></p><p>对于日期，<code>MAX</code> 是最近的日期。如果 <code>MAX</code> 是聚合，结果不会有日期层次结构。如果 <code>MAX</code> 是比较，结果将保留日期层次结构。</p><p><b>作为聚合</b></p><p><code>MAX(expression)</code> 是聚合函数，返回单个聚合结果。这在可视化项中显示为 <code>AGG(expression)</code>。</p><p><b>作为比较</b></p><p><code>MAX(expr1, expr2)</code> 比较这两个值并返回一个行级值。</p><p>另请参见 <code><a href="#MIN" class="xref">MIN</a></code>。</p></td></tr></tbody></table>

### MIN

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>MIN(expression)</code> 或 <code>MIN(expr1, expr2)</code></td></tr><tr><td>输出</td><td>与参数相同的数据类型，或者，如果参数的任何部分为 null，则为 <code>NULL&nbsp;</code>。</td></tr><tr><td>定义</td><td><p>返回两个参数（必须为相同数据类型）中的最小值。</p><p><code>MIN </code> 也可以聚合形式应用于单个字段。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">MIN(4,7) = 4<br>MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#<br>MIN([Name]) = "Abebi"</pre></td></tr><tr><td>说明</td><td><p><b>对于字符串</b></p><p><code>MIN</code> 通常是按字母顺序排列在前面的值。</p><p class="note">对于数据库数据源，<code>MIN</code> 字符串值在数据库为该列定义的排序序列中最低。</p><p><b>对于日期</b></p><p>对于日期，<code>MIN</code> 是最早的日期。如果 <code>MIN</code> 是聚合，结果不会有日期层次结构。如果 <code>MIN</code> 是比较，结果将保留日期层次结构。</p><p><b>作为聚合</b></p><p><code>MIN(expression)</code> 是聚合函数，返回单个聚合结果。这在可视化项中显示为 <code>AGG(expression)</code>。</p><p><b>作为比较</b></p><p><code>MIN(expr1, expr2)</code> 比较这两个值并返回一个行级值。</p><p>另请参见 <code><a href="#MAX" class="xref">MAX</a></code>。</p></td></tr></tbody></table>

### NOT

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>NOT&nbsp;&lt;expression&gt;</code></td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>定义</td><td>对一个表达式执行逻辑非运算。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF <b>NOT</b> [Season] = "Summer" <br>THEN 'Don't wear sandals' <br>ELSE&nbsp;'Wear sandals'&nbsp;<br><b>END</b></pre><p><i>“如果 Season 不等于 Summer，则返回 Don't wear sandals。否则，返回 Wear sandals。”</i></p></td></tr><tr><td>说明</td><td><p>通常与 <a href="#IF" class="xref">IF</a> 和 <a href="#IIF" class="xref">IIF</a> 一起使用。另请参见 <a href="#top" class="xref">AND</a> 和 <a href="#OR" class="xref">或者</a>。</p></td></tr></tbody></table>

### 或者

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>&lt;expr1&gt; OR &lt;expr2&gt;</code></td></tr><tr><td>输出</td><td>布尔值（True 或 False）</td></tr><tr><td>定义</td><td>对两个表达式执行逻辑析取操作。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Spring"&nbsp;<b>OR</b>&nbsp;[Season] = "Fall" <br>THEN&nbsp;"Sneakers" <br>END</pre><p><i>“如果 (Season = Spring) 或 (Season = Fall) 为 true，则返回 Sneakers。”</i></p></td></tr><tr><td>说明</td><td><p>通常与 <a href="#IF" class="xref">IF</a> 和 <a href="#IIF" class="xref">IIF</a> 一起使用。另请参见 <a href="#top" class="xref">AND</a> 和 <a href="#NOT" class="xref">NOT</a>。</p><p>如果任一表达式为 <code>TRUE</code>，则结果为 <code>TRUE</code>。如果两个表达式都为 <code>FALSE</code>，则结果为 <code>FALSE</code>。如果两个表达式都为 <code>NULL</code>，则结果为 <code>NULL</code>。</p><p>如果所创建的计算中的 <code>OR</code> 将比较结果显示在工作表上，则 Tableau 显示 TRUE 和 FALSE。如果要更改此情况，请使用设置格式对话框中的“设置格式”区域。</p><p class="note"><b>注意</b>：<code>OR</code> 运算符使用<em>短路计算</em>。这表示如果第一个表达式计算为 <code>TRUE</code>，则根本不会计算第二个表达式。如果第二个表达式在第一个表达式为 <code>TRUE</code> 时产生错误，则这可能十分有用，因为在这种情况下从不计算第二个表达式。</p></td></tr></tbody></table>

### THEN

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>IF &lt;test1&gt; <b>THEN</b> &lt;then1&gt; 
							<br>[ELSEIF &lt;test2&gt; <b>THEN</b> &lt;then2&gt;...]
							<br>[ELSE &lt;default&gt;] 
						<br>END</code></td></tr><tr><td>定义</td><td><code>IF</code>、<code>ELSEIF</code> 或 <code>CASE</code>表达式的必需部分，用于定义如果特定值或测试为 true 则返回什么结果。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">IF [Season] = "Summer"&nbsp;<b>THEN</b>&nbsp;'Sandals' <br>ELSEIF&nbsp;[Season] = "Winter"&nbsp;<b>THEN</b>&nbsp;'Boots' <br>ELSE&nbsp;'Sneakers'&nbsp;<br>END</pre><p><i>“如果 Season = Summer,，则返回 Sandals。否则，请查看下一个表达式。如果 Season = Winter，则返回 Boots。如果两个表达式都不为 true，则返回 Sneakers。”</i></p><pre>CASE [Season] <br>WHEN 'Summer' <b>THEN</b> 'Sandals' <br>WHEN 'Winter' <b>THEN</b> 'Boots' <br>ELSE 'Sneakers' <br>END</pre><p><i><i>“看看“Season”字段。如果值为 Summer，则返回 Sandals。如果值为 Winter，则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项，则返回 Sneakers。”</i></i></p></td></tr><tr><td>说明</td><td><p>与 <a href="#CASE" class="xref">CASE</a>、<a href="#WHEN" class="xref">WHEN</a>、<a href="#IF" class="xref">IF</a>、<a href="#ELSEIF" class="xref">ELSEIF</a>、<a href="#THEN" class="xref">THEN</a>、<a href="#ELSE" class="xref">ELSE</a> 和 <a href="#END" class="xref">END</a> 一起使用</p></td></tr></tbody></table>

### WHEN

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>CASE &lt;expression&gt; 
							<br><b>WHEN</b> &lt;value1&gt; THEN &lt;then1&gt; 
							<br><b>WHEN</b> &lt;value2&gt; THEN &lt;then2&gt; 
							<br>...
						<br>[ELSE &lt;default&gt;]<br>END</code></td></tr><tr><td>定义</td><td><code>CASE</code> 表达式的必需部分。查找第一个与 <code>&lt;expression&gt;</code> 匹配的 <code>&lt;value&gt;</code>，并返回对应的 <code>&lt;then&gt;</code>。</td></tr><tr><td>示例</td><td><pre>CASE [Season] <br><b>WHEN</b> 'Summer' THEN 'Sandals' <br><b>WHEN</b> 'Winter' THEN 'Boots' <br>ELSE 'Sneakers' <br>END</pre><p><i>“看看“Season”字段。如果值为 Summer，则返回 Sandals。如果值为 Winter，则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项，则返回 Sneakers。”</i></p></td></tr><tr><td>说明</td><td><p>与 <a href="#CASE" class="xref">CASE</a>、<a href="#THEN" class="xref">THEN</a>、<a href="#ELSE" class="xref">ELSE</a> 和 <a href="#END" class="xref">END</a> 一起使用。</p><p><code>CASE</code> 也支持 <code>WHEN IN</code>构造，例如：</p><pre xml:space="preserve">CASE &lt;expression&gt; <br><b>WHEN IN</b> &lt;set1&gt; THEN &lt;then1&gt; <br><b>WHEN IN</b> &lt;combinedfield&gt; THEN &lt;then2&gt; <br>... <br>ELSE &lt;default&gt; <br>END</pre><p><code>WHEN IN</code> 中的值可以是集、文本值列表或合并字段。另请参见 <a href="#IN" class="xref">IN</a>。</p></td></tr></tbody></table>

### ZN

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>ZN(expression)</code></td></tr><tr><td>输出</td><td>取决于 <code>&lt;expression&gt;</code> 的数据类型，或者为 0。</td></tr><tr><td>定义</td><td>如果 &lt;expression&gt; 不为 null，则返回该表达式，否则返回零。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">ZN([Test Grade])</pre><p><i>“如果测试成绩不为 null，则返回其值。如果测试成绩为 null，则返回 0。”</i></p></td></tr><tr><td>说明</td><td><p><code>ZN</code> 是 <a href="#IFNULL" class="xref">IFNULL</a> 的特殊情况，其中如果表达式为 null，则替代项始终为 0，而不是在计算中指定。</p><p><code>ZN</code> 在执行额外计算时特别有用，并且 null 将使整个计算为 null。但是，请谨慎将这些结果解释为 null 并不总是与 0 同义，并且可能代表缺失数据。</p><p>另请参见 <a href="#ISNULL" class="xref">ISNULL</a>。</p></td></tr></tbody></table>  

**注意**：其中一些实际上是逻辑运算符，显示为黑色，而不是蓝色。有关详细信息，请参见[运算符语法](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_operators.htm#Operators)。

关于 CASE、IF 和 IIF 的注释

CASE 通常比 IF 或 II F更易于使用。在许多情况下，IF、IIF 和 CASE 可以互换使用。CASE 语句始终可重写为 IF 语句，不过 CASE 函数一般更加简明且更容易理解。但是，并非所有 IF 语句都可以编写为 CASE 语句，因为每个 ELSEIF 可能引用不同的字段。

**提示**：让我们比较一下在这三个函数中使用相同逻辑的示例：  

<table style="width: 100%;" class="table--plain"><colgroup><col style="width: 33%;"><col style="width: 33%;"><col></colgroup><tbody><tr><td>CASE</td><td>IF</td><td>IIF</td></tr><tr><td><pre>CASE [Region]<br>WHEN 'West' THEN 1<br>WHEN 'East' THEN 2<br>WHEN 'South' THEN 3<br>WHEN 'North' Then 4<br>ELSE 5<br>END</pre></td><td><pre>IF [Region] = 'West' THEN 1<br>ELSEIF [Region] = 'East' THEN 2<br>ELSEIF [Region] = 'South' THEN 3<br>ELSEIF [Region] = 'North' THEN 4<br>ELSE 5<br>END</pre></td><td><pre>IIF([Region] = 'West', 1,<br> IIF([Region] = 'East', 2,<br>  IIF([Region] = 'South', 3,<br>   IIF([Region] = 'North', 4,<br>   5, 0)<br>  )<br> )<br>)</pre></td></tr><tr><td><p>CASE 结构非常简单，易于编写和理解。但是，与 IF 或 IIF 不同，表达式（此处为 [Region]）不能是逻辑运算。</p><p>CASE 的 null 值处理方式与 IF 的处理方式相同。</p></td><td><p>IF THEN 结构允许多个 ELSEIF 子句，这使得多次计算比 IIF 更容易。</p><p><b>null 值处理</b>：任何未知 (null) 结果都由与 false 结果相同的 ELSE 子句处理。这里，除了指定的四个区域（包括 null）之外的任何区域都将被分配值 5。</p></td><td><p>IIF 结构以不同于 false 结果的方式处理未知结果，并且具有与 IF 不同的语法。如上所述，特定 null 值处理的折衷方案是嵌套，这可能很难编写和理解。</p><p><b>null 值处理</b>：除了指定的四个区域之外的任何非 null 区域都将被分配值 5，但 null 值将被分配 0。</p></td></tr></tbody></table>

**注意**：很多时候可以使用组获得与复杂 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

或者让最终用户能够在与[参数](https://www.tableau.com/zh-cn/about/blog/2015/11/using-parameter-change-fields-45866)一起使用时选择在图表中查看哪个度量：

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. 从“**数据**”窗格中，将“State”（州/省/市/自治区）拖到“行”功能区。
4. 从“**数据**”窗格中，将“Category”（类别）拖到“行”功能区，并将其放在“State”（州/省/市/自治区）的右侧。
5. 从“**数据**”窗格中，将“Sales”（销售额）拖到“列”功能区。
6. 选择“分析”\>“创建计算字段”。
7. 在打开的计算编辑器中，执行以下操作：
    - 将计算字段命名为“KPI”。
    - 输入以下公式：
        
        SUM(\[Profit\]) > 0
        
        此计算将快速检查某个成员是否大于零。如果大于零，则返回 true；否则返回 false。
    - 完成后，单击**“确定”**。

新计算字段会显示在“数据”窗格中的“度量”下。就像其他字段一样，您可以在一个或多个可视化项中使用该字段。

9. 从“数据”窗格中，将**“**KPI**”**拖到“标记”卡上的**“颜色”**。
    
    您现在可以看到每个州/省/市/自治区的哪些类别在亏损。
    
    ![应用于条形图的逻辑函数，用于突出显示在每个州/省/市/自治区亏损的产品类别。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/logicalfunctions1.png)

## 另请参见

[显示关键进度指标](https://help.tableau.com/v0.0/pro/desktop/zh-cn/kpi.htm)

[Tableau 中的函数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions.htm)

[Tableau 函数（按类别）](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_all_categories.htm)

[Tableau 函数（按字母顺序）](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_all_alphabetical.htm)