逻辑函数
本文介绍 Tableau 中的逻辑函数及其用途。它还使用示例来演示如何创建逻辑计算。
为什么使用逻辑计算
逻辑计算允许您确定某个特定条件为真还是假(布尔逻辑)。例如,您可能希望根据某些截止值对值进行分类。
逻辑计算可能如下所示:
IF [Profit] > 0
THEN 'Profitable'
ELSEIF [Profit] = 0 THEN 'Break even'
ELSE 'Loss'
END
Tableau 中的可用逻辑函数和运算符
AND
语法 | <expr1> AND <expr2> |
定义 | 对两个表达式执行逻辑合取运算。(如果两边都为 true,则逻辑测试返回 true。) |
输出 | 布尔值(True 或 False) |
示例 | IF [Season] = "Spring" AND "[Season] = "Fall" “如果(Season = Spring)和(Season = Fall)同时为 true,则返回“It's the apocalypse and footwear doesn't matter”。 |
说明 | 通常与 IF 和 IIF 一起使用。另请参见 NOT 和 或者。 如果两个表达式都为 如果所创建的计算中的 注意: |
CASE
语法 | CASE <expression>
|
输出 | 取决于 <then> 值的数据类型。 |
定义 | 对 |
示例 |
“看看“Season”字段。如果值为 Summer,则返回 Sandals。如果值为 Winter,则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项,则返回 Sneakers。” |
说明 | 提示:很多时候,您可以使用组来获得与复杂 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' “如果 Season = Summer,,则返回 Sandals。否则,请查看下一个表达式。如果 Season = Winter,则返回 Boots。如果两个表达式都不为 true,则返回 Sneakers。” CASE [Season] “看看“Season”字段。如果值为 Summer,则返回 Sandals。如果值为 Winter,则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项,则返回 Sneakers。” |
说明 |
IF
语法 | IF <test1> THEN <then1> |
输出 | 取决于 <then> 值的数据类型。 |
定义 | 测试一系列表达式,同时为第一个为 true 的 |
示例 | IF [Season] = "Summer" THEN 'Sandals' “如果 Season = Summer,,则返回 Sandals。否则,请查看下一个表达式。如果 Season = Winter,则返回 Boots。如果两个表达式都不为 true,则返回 Sneakers。” |
说明 |
IFNULL
语法 | IFNULL(expr1, expr2) |
输出 | 取决于 <expr> 值的数据类型。 |
定义 | 如果 |
示例 | IFNULL([Assigned Room], "TBD") “如果“Assigned Room”(分配的房间)字段不为 null,则返回其值。如果“Assigned Room”(分配的房间)字段为 null,则返回 TBD。” |
说明 | 与 ISNULL 进行比较。 另请参见 ZN。 |
IIF
语法 | IIF(<test>, <then>, <else>, [<unknown>]) |
输出 | 取决于表达式中值的数据类型。 |
定义 | 检查是否满足条件(<test> ),并在 test 为 true 时返回 <then> ,在 test 为 false 时返回 <else> ,如果 test 为 null 则为可选值 <unknown> 。如果未指定可选的 unknown,IIF 将返回 null。 |
示例 | IIF([Season] = 'Summer', 'Sandals', 'Other footwear') “如果 Season = Summer,,则返回 Sandals。否则返回 Other footwear” IIF([Season] = 'Summer', 'Sandals', “如果 Season = Summer,,则返回 Sandals。否则,请查看下一个表达式。如果 Season = Winter,则返回 Boots。如果两者均不为 true,则返回 Sneakers。” IIF('Season' = 'Summer', 'Sandals', “如果 Season = Summer,,则返回 Sandals。否则,请查看下一个表达式。如果 Season = Winter,则返回 Boots。如果没有一个表达式为 true,则返回 Sneakers。” |
说明 |
也就是说,在下面的计算中,结果将是红色,而不是橙色,因为一旦 A=A 计算为 true,表达式就会停止计算:
|
IN
语法 | <expr1> IN <expr2> |
输出 | 布尔值(True 或 False) |
定义 | 如果 <expr1> 中的任何值与 <expr2> 中的任何值匹配,则返回 TRUE 。 |
示例 | SUM([Cost]) IN (1000, 15, 200) “Cost 字段的值是 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]) “Assigned Room(分配的房间)字段是否为 null?” |
说明 | 与 IFNULL 进行比较。 另请参见 ZN。 |
MAX
语法 | MAX(expression) 或 MAX(expr1, expr2) |
输出 | 与参数相同的数据类型,或者,如果参数的任何部分为 null,则为 NULL 。 |
定义 | 返回两个参数(必须为相同数据类型)中的最大值。
|
示例 | MAX(4,7) = 7 |
说明 | 对于字符串
对于数据库数据源, 对于日期 对于日期, 作为聚合
作为比较
另请参见 |
MIN
语法 | MIN(expression) 或 MIN(expr1, expr2) |
输出 | 与参数相同的数据类型,或者,如果参数的任何部分为 null,则为 NULL 。 |
定义 | 返回两个参数(必须为相同数据类型)中的最小值。
|
示例 | MIN(4,7) = 4 |
说明 | 对于字符串
对于数据库数据源, 对于日期 对于日期, 作为聚合
作为比较
另请参见 |
NOT
语法 | NOT <expression> |
输出 | 布尔值(True 或 False) |
定义 | 对一个表达式执行逻辑非运算。 |
示例 | IF NOT [Season] = "Summer" “如果 Season 不等于 Summer,则返回 Don't wear sandals。否则,返回 Wear sandals。” |
说明 |
或者
语法 | <expr1> OR <expr2> |
输出 | 布尔值(True 或 False) |
定义 | 对两个表达式执行逻辑析取操作。 |
示例 | IF [Season] = "Spring" OR [Season] = "Fall" “如果 (Season = Spring) 或 (Season = Fall) 为 true,则返回 Sneakers。” |
说明 | 通常与 IF 和 IIF 一起使用。另请参见 AND 和 NOT。 如果任一表达式为 如果所创建的计算中的 注意: |
THEN
语法 | IF <test1> THEN <then1>
|
定义 | IF 、ELSEIF 或 CASE 表达式的必需部分,用于定义如果特定值或测试为 true 则返回什么结果。 |
示例 | IF [Season] = "Summer" THEN 'Sandals' “如果 Season = Summer,,则返回 Sandals。否则,请查看下一个表达式。如果 Season = Winter,则返回 Boots。如果两个表达式都不为 true,则返回 Sneakers。” CASE [Season] “看看“Season”字段。如果值为 Summer,则返回 Sandals。如果值为 Winter,则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项,则返回 Sneakers。” |
说明 |
WHEN
语法 | CASE <expression>
|
定义 | CASE 表达式的必需部分。查找第一个与 <expression> 匹配的 <value> ,并返回对应的 <then> 。 |
示例 | CASE [Season] “看看“Season”字段。如果值为 Summer,则返回 Sandals。如果值为 Winter,则返回 Boots。如果计算中的选项均不匹配“Season”字段中的选项,则返回 Sneakers。” |
说明 |
CASE <expression>
|
ZN
语法 | ZN(expression) |
输出 | 取决于 <expression> 的数据类型,或者为 0。 |
定义 | 如果 <expression> 不为 null,则返回该表达式,否则返回零。 |
示例 | ZN([Test Grade]) “如果测试成绩不为 null,则返回其值。如果测试成绩为 null,则返回 0。” |
说明 |
另请参见 ISNULL。 |
注意:其中一些实际上是逻辑运算符,显示为黑色,而不是蓝色。有关详细信息,请参见运算符语法。
CASE 通常比 IF 或 II F更易于使用。在许多情况下,IF、IIF 和 CASE 可以互换使用。CASE 语句始终可重写为 IF 语句,不过 CASE 函数一般更加简明且更容易理解。但是,并非所有 IF 语句都可以编写为 CASE 语句,因为每个 ELSEIF 可能引用不同的字段。
提示:让我们比较一下在这三个函数中使用相同逻辑的示例:
CASE | IF | IIF |
CASE [Region] | IF [Region] = 'West' THEN 1 | IIF([Region] = 'West', 1, |
CASE 结构非常简单,易于编写和理解。但是,与 IF 或 IIF 不同,表达式(此处为 [Region])不能是逻辑运算。 CASE 的 null 值处理方式与 IF 的处理方式相同。 | IF THEN 结构允许多个 ELSEIF 子句,这使得多次计算比 IIF 更容易。 null 值处理:任何未知 (null) 结果都由与 false 结果相同的 ELSE 子句处理。这里,除了指定的四个区域(包括 null)之外的任何区域都将被分配值 5。 | IIF 结构以不同于 false 结果的方式处理未知结果,并且具有与 IF 不同的语法。如上所述,特定 null 值处理的折衷方案是嵌套,这可能很难编写和理解。 null 值处理:除了指定的四个区域之外的任何非 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”(州/省/市/自治区)拖到“行”功能区。
- 从“数据”窗格中,将“Category”(类别)拖到“行”功能区,并将其放在“State”(州/省/市/自治区)的右侧。
- 从“数据”窗格中,将“Sales”(销售额)拖到“列”功能区。
- 选择“分析”>“创建计算字段”。
- 在打开的计算编辑器中,执行以下操作:
- 将计算字段命名为“KPI”。
- 输入以下公式:
SUM([Profit]) > 0
此计算将快速检查某个成员是否大于零。如果大于零,则返回 true;否则返回 false。
- 完成后,单击“确定”。
- 从“数据”窗格中,将“KPI”拖到“标记”卡上的“颜色”。
您现在可以看到每个州/省/市/自治区的哪些类别在亏损。
新计算字段会显示在“数据”窗格中的“度量”下。就像其他字段一样,您可以在一个或多个可视化项中使用该字段。