---
schema_version: "1"
id: 02b3fe6e43d5fd5c468d8c5fba3b78eaa4e9c254b68b5b2c560a7b5281c5b3ba
title: 在 Tableau 中编写计算
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/pro/desktop/functions_operators.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_operators.htm
source_site: help.tableau.com
content_type: documentation
content_hash: aaa3cfaf39b57dae19c65b0b73a9a2d25902b369126a12a5008bc8a7c67ffb4d
description: Learn how to write and format calculations in Tableau, including syntax and components.
---
[跳转到主要内容](#main-content)

# 在 Tableau 中编写计算

本文描述如何在 Tableau 中创建计算并设置其格式。其中列出了计算的基本组件并介绍了各个计算的正确语法。

## 计算的组件

Tableau 中的计算由四个基本组件组成：

- **函数**：用于对字段中的值或成员进行转换的语句。
    - 函数需要_参数_或特定的信息。根据函数的不同，参数可以是字段、文字、参数或嵌套函数。
- **字段**：您的数据源中的维度或度量。
- **运算符**：指明运算的符号。
- **文本表达式**：硬编码的常量值，如“High”或 1,500。

并非所有计算都需要包含所有四个组件。此外，计算还可包含：

- **参数**：可插入计算中以取代常量值的占位符变量。有关参数的详细信息，请参见[创建参数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/parameters_create.htm)。
- **注释**：有关计算或其各部分的备注，在对计算进行运算时不会包括注释。

有关如何使用计算中的每个组件以及设置其格式的详细信息，请参见以下部分。

### 计算示例说明

例如，请考虑以下计算，该计算将日期增加 14 天 (\[Initial Visit\])。像这样的计算对于自动查找两周随访的日期可能很有用。

DATEADD('day', 14, \[Initial Visit)

此计算的组成部分可以细分为：

- 函数：`DATEADD` ，该函数需要三个参数。
    - 日期部分 ('day')
    - 间隔 (14)
    - 日期 (\[Initial Visit\]).
- 字段：\[Initial Visit\]
- 运算符：不适用
- 文本表达式：

- 字符串文字：'day'
- 数字文字：14

在此示例中，硬编码常量 14 可以替换为参数，该参数将允许用户选择外出多少天来寻找随访预约。

DATEADD('day', \[How many days out?\], \[Initial Visit\])

## 总览：计算语法

<table style="width: 100%;margin-left: 0;margin-right: auto;mc-table-style: url('Resources/TableStyles/Basic-Border-Light.css');" class="TableStyle-Basic-Border" cellspacing="0"><colgroup><col class="TableStyle-Basic-Border-Column-Column1"><col class="TableStyle-Basic-Border-Column-Column1"><col class="TableStyle-Basic-Border-Column-Column1"></colgroup><tbody><tr style="background-color: #ebebeb;" class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><b>组件</b></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><b>语法</b></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><b>示例</b></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><span style="color: #1274CA;"><b>函数</b></span></p></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p>有关如何为 Tableau 中的所有函数设置格式的示例，请参见<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_all_alphabetical.htm" target="_blank" class="xref">Tableau 函数（按字母顺序）</a>或<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_all_categories.htm" class="xref">Tableau 函数（按类别）</a>。</p></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><p><code>SUM(expression)</code></p></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><span style="color: #e8762c;"><b>字段</b></span></p></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p>计算中的字段通常括在方括号 [ ] 中。</p><p>有关详细信息，请参见<a href="#Fields" class="xref">字段语法</a>。</p></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><p><code>[Category]</code></p></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><b>运算符</b></p></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><code>+</code>、<code>-</code>、<code>*</code>、<code> /</code>、<code>%</code>、<code>==</code>、<code>=</code>、<code>&gt;</code>、<code>&lt;</code>、<code>&gt;=</code>、<code>&lt;=</code>、<code>!=</code>、<code>&lt;&gt;</code>、<code>^</code>、<code>AND</code>、<code>OR</code>、<code>NOT</code>、<code>( )</code>。</p><p>有关可在 Tableau 计算中使用的运算符类型以及这些运算符在公式中的执行顺序的信息，请参见<a href="#Operators" class="xref">运算符语法</a>。</p></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><p><code>[Price]*(1-[discount])</code></p></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><span style="color: #787878;"><b>文本表达式</b></span></p></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p>数字文本写为数字。</p><p>字符串文本带有引号。</p><p>日期文本带有 # 符号。</p><p>布尔文本写为 true 或 false。</p><p>Null 文本写为 Null。</p><p>有关详细信息，请参见<a href="#literals" class="xref">文本表达式语法</a>。</p></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><p><code>1.3567</code></p><p><code>"Unprofitable"</code></p><p><code>#August 22, 2005#</code></p><p><code>true </code></p><p><code>Null</code></p></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p><span style="color: #936EB0;"><b>参数</b></span></p></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><p>计算中的参数应括在方括号 [ ] 中，就像字段一样。有关详细信息，请参阅<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/parameters_create.htm#Parameters" class="xref">创建参数</a>。</p></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1"><p><code>[Bin Size]</code></p></td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><p><span style="color: #787878;"><b>注释</b></span></p></td><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><p>若要在计算中输入注释，请键入两个正斜杠 //。有关详细信息，请参见<a href="#Comments" class="xref">向计算中添加注释</a>。</p><p>可以通过键入 /* 开始注释以及 */ 结束注释，从而添加多行注释。</p></td><td class="TableStyle-Basic-Border-BodyA-Column1-Body1"><p><code>SUM([Sales]) / SUM([Profit]) </code></p><p><code>/*John's calculation</code></p><p><code>To be used for profit ratio</code></p><p><code>Do not edit*/</code></p></td></tr></tbody></table>

## 计算语法详细信息

请参见以下部分，了解有关 Tableau 计算的不同组件以及如何设置组件格式以在 Tableau 中工作的详细信息。

### 函数语法

函数是计算的主要组成部分，可用于各种不同的用途。

Tableau 中的每个函数都需要特定语法。例如，以下计算使用两个函数 LEN 和 LEFT，以及多个逻辑运算符（IF、THEN、ELSE、END 和 >）。

`IF LEN([Name])> 5 THEN LEFT([Name],5) ELSE [Name] END`

- LEN 采用单个参数，例如 `LEN([Name])`，它返回“Name”名称字段中每个值的字符数（即长度）。
- LEFT 采用两个参数（一个字段和一个数字），例如 `LEFT([Name], 5)`，它返回“Name”字段中从左侧开始的每个值的前五个字符。
- 逻辑运算符 IF、THEN、ELSE 和 END 共同创建逻辑测试。

此计算评估名称的长度，如果超过五个字符，则仅返回前五个字符。否则，它返回整个名称。

在计算编辑器中，函数显示为蓝色。

### 使用计算编辑器参考窗格

您可以随时查阅如何使用特定函数并设置其格式。在 Tableau 中打开函数列表：

1. 选择“分析”\>“创建计算字段”。
2. 在打开的计算编辑器中，单击位于编辑器右边的展开（三角形）图标。
    
    将出现一个函数列表供您浏览。从该列表中选择函数时，最右侧的部分将更新，包含有关该函数的必需语法 (1)、其描述 (2) 的信息，并带有一个或多个示例 (3)。
    
    ![功能菜单。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/functions_operators1.png)

#### 在计算中使用多个函数

您可以在计算中使用多个函数。例如：

`ZN(SUM([Order Quantity])) - WINDOW_AVG(SUM([Order Quantity]))`

该计算中有三个函数：ZN、SUM 和 WINDOW\_AVG。ZN 函数和 WINDOW\_AVG 函数用减法运算符 (-) 分隔。

函数还可以包括在另一个函数中（即嵌套），上面示例中的 `ZN(SUM([Order Quantity]))` 部分就是这种情况。在这种情况下，将在计算 ZN 函数之前先计算“Order Quantity”的 SUM 函数，因为后者在括号内部。有关相关原因的详细信息，请参见[括号](#Parentheses)。

### 字段语法

可以在计算中插入字段。函数的语法通常会指明应在计算中的何处插入字段。例如：`SUM(expression)`。

如果字段名称包含空格或不唯一，则计算中的字段名称应括在方括号 \[ \] 中。例如，\[Sales Categories\]。

您使用的函数类型确定所使用的字段类型。例如，对于 SUM 函数，您可以插入数值字段，但不能插入日期字段。有关详细信息，请参见[了解计算中的数据类型](#Data)。

您选择包括在计算中的字段还取决于计算的用途。举例来说，如果要计算利润率，则您的计算将使用数据源中的“Sales”（销售额）和“Profit”（利润）字段：

`SUM([Sales])/SUM([Profit])`

若要向计算中添加字段，请执行以下操作之一：

- 将其从“数据”窗格或视图拖放到计算编辑器中。
- 在计算编辑器中，键入字段名称。注意：计算编辑器将尝试自动填充字段名称。

![计算字段中的函数和运算符。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/functions_operators2.gif)

字段在 Tableau 计算中显示为橙色。

### 运算符语法

若要创建计算，您需要了解 Tableau 支持的运算符。此部分讨论可用的基本运算符以及这些运算符的执行顺序（优先级）。

运算符在 Tableau 计算中显示为黑色。

#### \+ (addition)

\+ 运算符在应用于数字时表示相加，在应用于字符串时表示串联。在应用于日期时，可用于将天数与日期相加。

例如：

- `7 + 3`
- `Profit + Sales`
- `'abc' + 'def' = 'abcdef'`
- `#April 15, 2024# + 15 = #April 30, 2024#`

#### – (subtraction)

\- 运算符在应用于数字时表示相减，在应用于表达式时表示求反。在应用于日期时，可用于从日期中减去天数。因而，此运算符还可用于计算两个日期之间的天数差异。

例如：

- `7 - 3`
- `Profit - Sales`
- `-(7+3) = -10`
- `#April 16, 2024# - 15 = #April 1, 2024#`
- `#April 15, 2024# - #April 8, 2024# = 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")`

请参见[逻辑函数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_logical.htm)中的 `**AND**` 了解更多信息。

#### OR

这是逻辑运算符。其两侧必须使用表达式或布尔值。

例如：`IIF(Profit =100 OR Sales =1000, "High", "Low")`

请参见[逻辑函数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_logical.htm)中的 `**OR**` 了解更多信息。

#### NOT

这是逻辑运算符。此运算符可用于对另一个布尔值或表达式求反。例如，

`IIF(NOT(Sales = Profit),"Not Equal","Equal")`

#### 其他运算符

CASE、ELSE、ELSEIF、IF、THEN、WHEN 和 END 也是用于[逻辑函数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_logical.htm)的运算符。

### 运算符优先级

计算中的所有运算符都按特定顺序运算。例如，`2*1+2` 等于 4 而不等于 6，因为乘法在加法之前执行（\* 运算符始终先于 + 运算符运算）。

如果两个运算符具有相同优先级，例如加法和减法（+ 或 -），则在计算中从左向右进行运算。

可以使用括号来更改优先级顺序。有关详细信息，请参见[括号](#Parentheses)部分。

| 优先级 | 运算符 |
| --- | --- |
| 1 | –（求反） |
| 2 | ^（乘方） |
| 3 | \*, /, % |
| 4 | +, – |
| 5 | \==、=、>、<、>=、<=、!=、<> |
| 6 | NOT |
| 7 | AND |
| 8 | OR |

#### 括号

可以根据需要使用括号来强制实施优先级顺序。括号中的运算符优先于括号外的运算符进行计算，从最内部的括号开始向外计算。

例如，(1 + (2\*2+1)\*(3\*6/3) ) = 31 的原因在于：最里层括号内的运算符会优先执行。该计算的运算顺序如下：

1. (2\*2+1) = 5
2. (3\*6/3) = 6
3. (1+ 5\*6) = 31

### 文本表达式语法

此部分描述在 Tableau 计算中使用文本表达式的正确语法。文本表达式按原样表示常量值。使用函数时，有时需要使用文本表达式表示数字、字符串、日期等。

例如，假设您有一个以日期为输入项的函数。您将键入 #May 1, 2005#，而不是键入"May 1, 2005"，后者将被解读为字符串。这相当于使用一个日期函数将参数从字符串转换为日期（请参考[日期函数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_date.htm)）。

可以在 Tableau 计算中使用数字、字符串、日期、布尔值和 Null 文本。下面介绍了每种类型以及如何设置其格式。

文本表达式在 Tableau 计算中显示为黑灰色。

#### 数字文本

数字文本写为数字。例如，若要将数字 1 输入为数字文本，则输入 `1`。如果要将数字 0.25 作为数字文本输入，则输入 `0.25`。

#### 字符串文本

可以使用单引号或双引号编写字符串。

如果您的字符串中包含单引号或双引号，请对最外面的字符串文字使用其他选项。

例如，若要将字符串 `"cat"` 输入为字符串文本，请键入 `'"cat"'`。对于 `'cat'`，请键入 `"'cat'"`。如果要将字符串 `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`。

### 向计算中添加参数

参数是占位符变量，可插入计算中取代常量值。在计算中使用参数时，您可以随后在视图或仪表板中显示一个参数控件以允许用户动态更改值。

有关详细信息，请参见[使用参数](https://help.tableau.com/v0.0/pro/desktop/zh-cn/parameters_create.htm#Calc)。

参数在 Tableau 计算中显示为紫色。

### 向计算中添加注释

您可以向计算中添加注释，对计算及其各个部分进行备注。注释不会包括在计算的运算中。

若要向计算中添加注释，请键入两个正斜杠 (//) 字符。

例如：

`SUM([Sales])/SUM([Profit]) //My calculation`

在此示例中，`//My calculation` 是注释。

注释以两条正斜杠开始，直至该行结束。若要继续进行计算，您必须另起一行。

多行注释可以通过以下方式编写：注释以正斜杠后跟星号 (/\*) 开始，以星号后跟正斜杠 (\*/) 结束。例如：

`SUM([Sales])/SUM([Profit])   /* This calculation is   used for profit ratio.   Do not edit */`

注释在 Tableau 计算中显示为灰色。

## 了解计算中的数据类型

如果创建计算字段，您需要了解如何在计算式中使用和组合不同[数据类型](https://help.tableau.com/current/pro/desktop/zh-cn/datafields_typesandroles_datatypes.htm)。许多在定义计算时可供使用的函数仅适用于特定数据类型。

例如，`DATEPART()` 函数只能接受日期/日期时间数据类型作为参数。您可以输入 `DATEPART('year',#2024-04-15#)`，有效结果应该是：2024。无法输入 `DATEPART('year',"Tom Sawyer")` 且得不到有效结果。事实上，此示例会返回错误，因为 "`Tom Sawyer`" 是字符串，而不是日期/日期时间。

**注意：**虽然 Tableau 会尝试全面验证所有计算，但是在对数据库运行查询之前，无法发现某些数据类型错误。这些问题会在运行查询时而不是在计算对话框中导致显示错误对话框。

下面介绍了 Tableau 支持的数据类型。请参阅 [类型转换](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_typeconversion.htm) 了解数据类型之间的转换。

### 字符串

零个或更多字符组成的序列。例如，"`Wisconsin`"、"`ID-44400`"和 "`Tom Sawyer`" 都是字符串。字符串通过单引号或双引号进行识别。引号字符本身可以通过重复来包含在字符串中。例如，`'O''Hanrahan'`。

### 日期/日期时间

日期或日期时间。例如 “`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 中的可用数字函数列表](https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_number.htm#type)中的“ROUND”。

用于测试浮点值是否相等的运算可能会因为相同的原因而出现不可预知的行为。在使用详细级别表达式作为维度、进行分类筛选、创建临时组、创建内/外集以及使用数据混合时，可能会进行此类比较。

**注意**：最大的有符号 64 位整数为 9,223,372,036,854,775,807。当连接到新数据源时，数据类型设置为“数字(整数)”的任何列可容纳最高达到此限制的值；对于较大的值，由于“数字(整数)”不使用浮点数，因此 Tableau 将显示“Null”。当数据类型设置为“数字(小数)”时，将可容纳更大的值。

### 布尔值

包含 `TRUE` 或 `FALSE` 值的字段。当比较结果未知时，会出现未知值。例如，表达式 `7 > Null` 会生成未知值。未知布尔值会自动转换为 Null。

## 另请参见

[了解 Tableau 中的计算](https://help.tableau.com/v0.0/pro/desktop/zh-cn/calculations_calculatedfields_understand.htm)

[创建简单的计算字段](https://help.tableau.com/v0.0/pro/desktop/zh-cn/calculations_calculatedfields_formulas.htm)

[Tableau 中的计算入门指南](https://help.tableau.com/v0.0/pro/desktop/zh-cn/calculations_calculatedfields_create.htm)