---
schema_version: "1"
id: c417123e0b377361e663c8701407ef27012cc96241670b82a927c5770f481f6c
title: 选择正确的计算类型
collection: tableau
version: current
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/current/zh-cn/pro/desktop/calculations_calculatedfields_understand_which.md
canonical_url: https://help.tableau.com/current/pro/desktop/zh-cn/calculations_calculatedfields_understand_which.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 08c8149d4c1aa7b3a5f408fe81f7ead3a0c0584fbce7a2604d3619c3d10f421a
description: Choose the right calculation type for your analysis among basic, LOD, and table calculations.
---
[跳转到主要内容](#main-content)

# 选择正确的计算类型

您选择的计算类型取决于您的分析需求、您想要回答的问题以及可视化项的布局。

## 哪种计算适合于您的分析？

为分析选择要使用的计算类型并不总是一件容易事。尝试做出决定时，请考虑以下问题和示例。

**注意：**此内容最初在 Tableau 博客上发布。请参阅 [A Handy Guide to Choosing the Right Calculation for Your Question（有关为您的问题选择正确计算的便捷指南）](https://www.tableau.com/zh-cn/about/blog/2016/4/guide-choosing-right-calculation-your-question-53667)进行阅读。

  

### 基本表达式还是表计算？

**问题 1**：

可视化项上是否已经有了所有需要的数据值？

- 如果回答为“**是”**：您可以使用表计算。
- 如果回答为“**否”**：使用基本计算。

![流程图可帮助您根据可视化项中是否存在所有数据值来决定是使用表计算还是基本表达式。如果您已经拥有可视化项所需的所有数据值，请使用基本表达式。如果没有，请使用表计算。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasics_flowchart1.png)

##### **示例：**

假设有以下两个可视化项。左侧的可视化项是一个条形图，其中显示每个国家/地区的总销售额。右侧的可视化项也显示每个国家/地区的销售额，但销售额已解聚。

您将如何为其中的每个可视化项计算销售额的第 90 个百分位？

![两个图表显示按国家/地区划分的销售额。一个图表是条形图，另一个图表是散点图。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart1.png)

左侧的条形图已通过 SUM 聚合。因此，此视图中没有足够的详细信息来使用表计算。您可以使用基本聚合表达式，通过以下公式为此示例中的每个国家/地区计算销售额的第 90 个百分位：

PERCENTILE(\[Sales\], .90)

这将为每个国家/地区的第 90 个百分位生成一个值，作为各个条形的标签。

![水平条形图显示按国家/地区划分的销售额。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart2.png)

但是，右侧的图表包括每个销售订单的数据值。将会显示更大的分布和离群值。视图中有足够的详细信息来使用表计算。

可以通过使用分布区间（相当于一个表计算）来计算每个国家/地区销售额的第 90 个百分位。此可视化项中有更多上下文。

![散点图显示按国家/地区划分的销售额。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart3.png)

两个计算都能得到相同值，但根据可视化项中的详细级别（数据量），您从每个计算中收集的细节会有所不同。

  

### 基本表达式还是详细级别 (LOD) 表达式？

如果可视化项上没有您需要的所有数据，则需要将计算传递到数据源。这意味着，您必须使用基本计算或 LOD 表达式。

如果对[问题 1](#q1) 的回答为“**否**”，请询问自己以下问题：

**问题 2**：

您的问题粒度是否与可视化项粒度或数据源粒度匹配？

- 如果回答为“**是”**：使用基本计算。
- 如果回答为“**否”**：使用详细级别 (LOD) 表达式。

![显示确定如何计算可视化项数据的过程的流程图。如果您拥有可视化项所需的所有数据值，请使用表计算。如果没有，询问自己问题的粒度是否与可视化项粒度或来源粒度匹配？如果匹配，请使用详细级别表达式。如果不匹配，请使用基本表达式。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasics_flowchart3.png)

##### **示例**

假设有以下可视化项。它显示每个国家/地区所有订单销售额的第 90 个百分位。

![显示各国家/地区第 90 个百分位数销售额的条形图。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart10.png)

此示例使用 Tableau 附带的“Sample-Superstore”数据源。如果您熟悉“Sample-Superstore”数据源，您可能知道每个“Order Id”（订单 Id）有一行数据。因此，数据源的粒度为“Order ID”（订单 ID）。但是，可视化项的粒度为“Country”（国家/地区）。

在粒度级别为订单 ID 的情况下，如果想要知道每个国家/地区销售额的第 90 个百分位是什么，您可以使用以下 LOD 表达式：

 {INCLUDE \[Order ID\] : SUM(\[Sales\])}

然后，您可以将字段更改为在视图中的第 90 个百分位处聚合。

为此，请单击字段下拉菜单，并选择“**度量**”>“**百分位**”>“**90**”。

下图演示了这种情况下 LOD 表达式的工作方式：

![说明聚合和粒度之间关系的图表。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasics_diagram1.png)

1. 数据在“SUM(Sales)”处开始完全聚合，然后下移至“Country”（国家/地区）详细级别：在“Country”（国家/地区）处进行“SUM(Sales)”计算。
2. 将应用 LOD 计算，并且数据将获得更多粒度：在“Country”（国家/地区）+“Order Id”（订单 Id）处进行“SUM(Sales)”计算。
3. LOD 计算聚合到第 90 个百分位：在“Country”（国家/地区）+“Order Id”（订单 Id）处进行“PCT90(SUM(Sales)”计算

结果如下：

![一个水平条形图，显示各国家/地区每个订单 ID 的第 90 个百分位的销售额。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart11.png)

### 表计算还是详细级别 (LOD) 表达式？

在选择表计算还是 LOD 计算时，过程与选择表计算还是基本表达式非常相似。请询问自己以下问题：

_可视化项上是否已经有了所有需要的数据值？_

- 如果回答为“**是”**，则使用表计算。
- 如果回答为“**否**”，则询问自己：_您的问题粒度是否与可视化项粒度或数据源粒度匹配？_如果回答为“**否”**：使用 LOD 计算。

![显示确定如何计算可视化项数据的过程的流程图。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasics_flowchart3.png)

### 仅使用表计算

某些方案下只有表计算有效。这些方案包括：

- 排名
- 递归（例如，累计总计）
- 移动计算（例如，移动平均）
- 内部行计算（例如，期间对照计算）

如果您的分析需要任何这些方案，请使用表计算。

![用于决定使用何种类型的计算的步骤的流程图。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasics_flowchart4.png)

##### **示例**

假设有以下可视化项。它显示 2014 年 9 月至 2015 年 9 月间若干股票的平均收盘价。

![折线图显示了选定公司一年来的收盘价。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart8.png)

如果要查看迄今为止收盘价超出其创纪录收盘价的次数，您必须使用表计算，特别是递归计算。

为什么？因为表计算能够为每个数据分区（单元格、区、表）输出多个值，而基本和 LOD 表达式则只能为每个数据分区或分组输出单一值。

若要为每个股票计算收盘价超出其创记录收盘价的次数，您需要执行几个步骤。

1. 在确定您是否已达到新的最高收盘价之前，您需要考虑所有以前的值。借助 RUNNING\_MAX 函数可实现这一点。例如，假设有以下按（横跨表格的）各天运算的计算，名为“**Record to Date**”（迄今为止的记录）：
    
    RUNNING\_MAX(AVG(\[Close\]))
2. 接着，您可以使用以下按（横跨表格的）各天运算的以下计算标记记录被打破的天数，该计算名为**“Count Days Record Broken**”（计算打破记录的天数）：
    
    IF AVG(\[Close\]) = \[Record to Date\]   
    THEN 1   
    ELSE 0   
    END
3. 最后，您可以使用以下按（横跨表格）的各天运算的计算来计算这些天数：
    
    RUNNING\_SUM(\[Count Days Record Broken\])
    
    将最终的计算字段添加到视图中替换 Avg(Close) 后，您将得到如下结果：
    
    ![显示一段时间内股票代码出现频率的折线图。](/tableau/current/zh-cn/pro/desktop/zh-cn/Img/CalcsBasic_chart9.png)

  

### 继续阅读[关于了解如何创建计算的提示](https://help.tableau.com/current/pro/desktop/zh-cn/calculations_calculatedfields_understand_formulas.htm)

### 本系列中的其他内容：

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

[Tableau 中的计算类型](https://help.tableau.com/current/pro/desktop/zh-cn/calculations_calculatedfields_understand_types.htm)