设置计算的格式
- 版本 :2022.1 及更高版本
适用于: Tableau Desktop, Tableau Online, Tableau Public, Tableau Server
本文描述如何在 Tableau 中创建计算并设置其格式。其中列出了计算的基本组件,并介绍了各个计算的正确语法。
计算的组件
Tableau 中的计算由四个基本组件组成:
函数 - 用于对字段中的值或成员进行转换的语句。
字段 - 您的数据源中的维度或度量(列)。
运算符 - 指明运算的符号。
文本表达式 -“按原样”表示的常量值,例如“Profitable”和“Unprofitable”。
例如,假设有以下计算:
IF [Profit per Day] > 000THEN"Highly Profitable"
ELSEIF[Profit per Day] <= 0THEN"Unprofitable"
ELSE"Profitable"
END此计算的组件可分为以下各项:
函数:IF、THEN、ELSEIF、ELSE 和 END
字段:Profit per Day
运算符:> 和 <=
文本表达式:
请注意:并非所有计算都需要包含所有四个组件。例如,计算可能不包含文本表达式,例如计算
SUM([Sales])/SUM([Cost])
,该计算只包含函数 SUM、除法运算符 (/) 以及字段“Sales”和“Cost”。字符串文本:“Highly Profitable”、“Unprofitable”和“Profitable”
数字文本:2000 和 0
此外,计算还可包含:
参数 - 可插入计算中以取代常量值的占位符变量。
注释 - 有关计算或其各部分的备注,在对计算进行运算时不会包括注释。
有关如何使用计算中的每个组件以及设置其格式的详细信息,请参见下面的部分。
总览:计算语法
组件 | 语法 | 示例 |
函数 | 有关如何为 Tableau 中的所有函数设置格式的示例,请参见Tableau 函数(按字母顺序)。 |
|
字段 | 计算中的字段通常括在方括号 [ ] 中。有关详细信息,请参见字段语法。 |
|
运算符 |
|
|
文本表达式 | 数字文本写为数字。 字符串文本带有引号。 日期文本带有 # 符号。 布尔文本写为 true 或 false。 Null 文本写为 Null。 有关详细信息,请参见文本表达式语法。 |
|
参数 | 计算中的参数应括在方括号 [ ] 中。有关详细信息,请参阅创建参数。 |
|
注释 | 若要在计算中输入注释,请键入两个正斜杠 //。有关详细信息,请参见向计算中添加注释。 可以通过键入 /* 开始注释以及 */ 结束注释,从而添加多行注释。 |
|
计算语法详细信息
请参见以下部分,了解有关 Tableau 计算的不同组件以及如何设置组件格式以在 Tableau 中工作的详细信息。
函数语法
在 Tableau 中,函数是计算的主要组件,可用于各种不同的用途。
函数在 Tableau 计算中显示为蓝色,但逻辑函数例外,这些函数显示为黑色。
Tableau 中的每个函数都需要特定语法。例如,SUM 函数需要以下语法:SUM(expression)
(即 SUM([Sales])
)。另一方面,PERCENTILE 函数需要以下语法:PERCENTILE(expression, number)
(即 PERCENTILE([Sales],0.90)
)。
在 Tableau 中,您可以随时查阅如何使用特定函数并设置其格式。
在 Tableau 中打开函数列表:
选择“分析”>“创建计算字段”。
在打开的计算编辑器中,单击三角形图标(位于编辑器的右边)。
将出现一个函数列表供您浏览。从该列表中选择函数时,最右侧的部分将更新,包含有关该函数的必需语法 (1) 和说明 (2) 的信息,并带有一个或多个示例 (3)。
在计算中使用多个函数
您可以在计算中使用多个函数。例如:
ZN(SUM([Order Quantity])) - WINDOW_AVG(SUM([Order Quantity]))
该计算中有三个函数:ZN、SUM 和 WINDOW_AVG。
ZN 函数和 WINDOW_AVG 函数用减法运算符 (-) 分隔。
函数还可以包括在另一个函数中(即嵌套),上面示例中的 ZN(
SUM([Order Quantity])
)
部分就是这种情况。在这种情况下,将在计算 ZN 函数之前先计算“Order Quantity”的 SUM 函数,因为后者在括号内部。有关相关原因的详细信息,请参见括号。
字段语法
可以在计算中插入字段。函数的语法通常会指明应在计算中的何处插入字段。例如:SUM(expression)
。
如果字段名称包含空格或不唯一,则计算中的字段名称应括在方括号 [ ] 中。例如,[Sales Categories]。
您使用的函数类型确定所使用的字段类型。例如,对于 SUM 函数,您可以插入数值字段,但不能插入日期字段。有关详细信息,请参见了解计算中的数据类型。
您选择包括在计算中的字段还取决于计算的用途。举例来说,如果要计算利润率,则您的计算将使用数据源中的“Sales”(销售额)和“Profit”(利润)字段:
SUM([Sales])/SUM([Profit])
若要向计算中添加字段,请执行以下操作之一:
将其从“数据”窗格或视图拖放到计算编辑器中。
在计算编辑器中,键入字段名称。注意:计算编辑器将尝试自动填充字段名称。
字段在 Tableau 计算中显示为橙色。
运算符语法
若要创建计算,您需要了解 Tableau 支持的运算符。此部分讨论可用的基本运算符以及这些运算符的执行顺序(优先级)。
运算符在 Tableau 计算中显示为黑色。
+ (addition)
+ 运算符在应用于数字时表示相加,在应用于字符串时表示串联。在应用于日期时,可用于将天数与日期相加。例如:
7 + 3
Profit + Sales
'abc' + 'def' = 'abcdef'
#April 15, 2004# + 15 = #April 30, 2004#
– (subtraction)
- 运算符在应用于数字时表示相减,在应用于表达式时表示求反。在应用于日期时,可用于从日期中减去天数。因而,此运算符还可用于计算两个日期之间的天数差异。例如:
7 - 3
Profit - Sales
-(7+3) = -10
#April 16, 2004# - 15 = #April 1, 2004#
#April 15, 2004# - #April 8, 2004# = 7
* (multiplication)
* 运算符表示数值相乘。例如,5 * 4 = 20
。
/ (division)
/ 运算符表示数值相除。例如,20 / 4 = 5
。
% (modulo)
% 运算符返回 除法运算的 余数。例如,9 % 2 返回 1,因为 2 除 9 进四还余 1。模数只能对整数进行运算。
==、=、>、<、>=、<=、!=、<>(比较)
这些是可以在表达式中使用的基本比较运算符。其含义如下:== 或 =(等于)、>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、!= 和 <>(不等于)。
每个运算符比较两个数字、日期或字符串,并返回 TRUE、FALSE 或 NULL。
^(乘方)
此符号等效于 POWER 函数。它计算数字的指定次幂。
例如:
6^3 = 216
AND
这是逻辑运算符。其两侧必须使用表达式或布尔值。例如,
IIF(Profit =100 AND Sales =1000, "High", "Low")
如果两个表达式都为 TRUE
(即不是 FALSE
,也不是 NULL
),则结果为 TRUE
。如果任一表达式为 NULL
,则结果为 NULL
。在所有其他情况下,结果都为 FALSE
。
如果所创建计算中的 AND 比较结果显示在工作表上,Tableau 会显示 TRUE 和 FALSE。如果要更改此情况,请使用设置格式对话框中的“设置格式”区域。
AND
运算符使用“短路计算”。这表示如果第一个表达式计算为 TRUE
,则根本不会计算第二个表达式。如果第二个表达式在第一个表达式为 TRUE
时产生错误,则这可能十分有用,因为在这种情况下从不计算第二个表达式。
OR
这是逻辑运算符。其两侧必须使用表达式或布尔值。例如,
IIF(Profit =100 OR Sales =1000, "High", "Low")
如果任一表达式为 TRUE
,则结果为 TRUE
。如果两个表达式都为 FALSE
,则结果为 FALSE
。如果两个表达式都为 NULL
,则结果为 NULL
。
如果所创建的计算中的 OR
比较结果显示在工作表上,则 Tableau 显示 TRUE 和 FALSE。如果要更改此情况,请使用设置格式对话框中的“设置格式”区域。
OR
运算符使用“短路计算”。这表示如果第一个表达式计算为 TRUE
,则根本不会计算第二个表达式。如果第二个表达式在第一个表达式为 TRUE
时产生错误,则这可能十分有用,因为在这种情况下从不计算第二个表达式。
NOT
这是逻辑运算符。此运算符可用于对另一个布尔值或表达式求反。例如,
IIF(NOT(Sales = Profit),"Not Equal","Equal")
运算符优先级
计算中的所有运算符都按特定顺序运算。例如,2*1+2
等于 4 而不等于 6,因为乘法在加法之前执行(* 运算符始终先于 + 运算符运算)。
如果两个运算符具有相同优先级,例如加法和减法(+ 或 -),则在计算中从左向右进行运算。
可以使用括号来更改优先级顺序。有关详细信息,请参见括号部分。
优先级 | 运算符 |
---|---|
1 | –(求反) |
2 | ^(乘方) |
3 | *, /, % |
4 | +, – |
5 | ==, >, <, >=, <=, != |
6 | NOT |
7 | AND |
8 | OR |
括号
可以根据需要使用括号来强制实施优先级顺序。括号中的运算符优先于括号外的运算符进行计算,从最内部的括号开始向外计算。
例如,(1 + (2*2+1)*(3*6/3) ) = 31 的原因在于:最里层括号内的运算符会优先执行。该计算的运算顺序如下:
(2*2+1) = 5
(3*6/3) = 6
(1+ 5*6) = 31
文本表达式语法
此部分描述在 Tableau 计算中使用文本表达式的正确语法。文本表达式“按原样”表示常量值。使用函数时,有时需要使用文本表达式表示数字、字符串、日期等。
例如,假设您有一个以日期为输入项的函数。您将键入 #May 1, 2005#,而不是只键入“May 1, 2005”,后者将被解读为字符串。这相当于使用一个日期函数将参数从字符串转换为日期(请参考 日期函数)。
可以在 Tableau 计算中使用数字、字符串、日期、布尔值和 Null 文本。下面介绍了每种类型以及如何设置其格式。
文本表达式在 Tableau 计算中显示为黑灰色。
数字文本
数字文本写为数字。例如,若要将数字 1 输入为数字文本,则输入 1
。如果要将数字 0.25 作为数字文本输入,则输入 0.25
。
字符串文本
可以使用单引号或双引号编写字符串文本。如果字符串内部包含单引号或双引号,则需两次键入该符号。例如,若要将字符串“cat”输入为字符串文本,则输入 ‘cat’
或 “cat”
。
此外,如果要键入字符串“She’s my friend.”作为字符串文本,请键入 ‘She’s my friend.’
或 “She’s my friend.”
日期文本
日期文本以井号 (#) 表示。若要输入日期“August 22, 2005”作为文本日期,请输入 ISO 格式的日期 #2005-08-22#
。
布尔文本
布尔文本写为 true 或 false。若要输入“true”作为布尔文本,请输入 true
。
Null 文本
Null 文本写为 Null。若要输入“Null”作为 Null 文本,请输入 Null
。
向计算中添加参数
参数是占位符变量,可插入计算中取代常量值。在计算中使用参数时,您可以随后在视图或仪表板中显示一个参数控件以允许用户动态更改值。
有关详细信息,请参见在计算中使用参数。
参数在 Tableau 计算中显示为紫色。
注意:在 Web 上编辑视图时,您无法创建参数。
向计算中添加注释
您可以向计算中添加注释,对计算及其各个部分进行备注。请注意,注释不会包括在计算的运算中。
若要向计算中添加注释,请键入两个正斜杠 (//) 字符。
例如:
SUM([Sales])/SUM([Profit]) //John’s calculation
在此示例中,//John’s calculation 就是注释。
注释以两条正斜杠开始,直至该行结束。若要继续进行计算,您必须另起一行。
多行注释可以通过以下方式编写:注释以正斜杠后跟星号 (/*) 开始,以星号后跟正斜杠 (*/) 结束。例如:
SUM([Sales])/SUM([Profit]) /* John's calculation
To be used for profit ratio
Do not edit */
注释在 Tableau 计算中显示为灰色。
了解计算中的数据类型
Tableau 支持字符串、日期/日期时间、数字和布尔数据类型。如果创建计算字段,您需要了解如何在计算式中使用和组合不同数据类型。许多在定义计算时可供使用的函数仅适用于特定数据类型。
例如,DATEPART()
函数只能接受日期/日期时间数据类型作为参数。您可以输入 DATEPART('year',#2004-04-15#)
,有效结果应该是:2004。无法输入 DATEPART('year',"Tom Sawyer")
且得不到有效结果。事实上,此示例会返回错误,因为 "Tom Sawyer
" 是字符串,而不是日期/日期时间。
注意:虽然 Tableau 会尝试全面验证所有计算,但是在对数据库运行查询之前,无法发现某些数据类型错误。这些问题会在运行查询时而不是在计算对话框中导致显示错误对话框。
下面介绍了 Tableau 支持的数据类型。请参阅 类型转换 了解数据类型之间的转换。
STRING
零个或更多字符组成的序列。例如,"Wisconsin
"、"ID-44400
"和 "Tom Sawyer
" 都是字符串。字符串通过单引号或双引号进行识别。引号字符本身可以通过重复来包含在字符串中。例如,‘O''Hanrahan’
。
DATE/DATETIME
日期或日期时间。例如 “January 23, 1972
”或者“January 23, 1972 12:32:00 AM
"。如果要将以长型格式编写的日期解释为日期/日期时间,请在其两端放置 # 符号。例如,“January 23, 1972
”被视为字符串数据类型,但是 #January 23, 1972#
被视为日期/日期时间数据类型。
数字
Tableau 中的数值可以为整数或浮点数。
对于浮点数,某些聚合的结果可能并非总是完全符合预期。例如,您可能发现 SUM 函数返回值 -1.42e-14 作为列数,而您知道求和结果应该正好为 0。出现这种情况的原因是电气电子工程师学会 (IEEE) 754 浮点标准要求数字以二进制格式存储,这意味着数字有时会以极高的精度级别舍入。您可以通过将数字格式设置为显示较少小数位来消除这种潜在误差。有关详细信息,请参见Tableau 函数(按类别)并选择“数字”。
用于测试浮点值是否相等的运算可能会因为相同的原因而出现不可预知的行为。在使用详细级别表达式作为维度、进行分类筛选、创建临时组、创建内/外集以及使用数据混合时,可能会进行此类比较。
注意:最大的有符号 64 位整数为 9,223,372,036,854,775,807。当连接到新数据源时,数据类型设置为“数字(整数)”的任何列可容纳最高达到此限制的值;对于较大的值,由于“数字(整数)”不使用浮点数,因此 Tableau 将显示“Null”。当数据类型设置为“数字(小数)”时,将可容纳更大的值。
BOOLEAN
包含 TRUE
或 FALSE
值的字段。当比较结果未知时,会出现未知值。例如,表达式 7 > Null
会生成未知值。未知布尔值会自动转换为 Null。