内容:

选择正确的计算类型

  • 版本 :2022.1 及更高版本

适用于: Tableau Desktop, Tableau Online, Tableau Server

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

哪种计算适合于您的分析?

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

注意:此内容最初在 Tableau 博客上发布。请参阅 A Handy Guide to Choosing the Right Calculation for Your Question(有关为您的问题选择正确计算的便捷指南)(链接在新窗口中打开)进行阅读。


基本表达式还是表计算?

问题 1:可视化项上是否已经有了所有需要的数据值?

如果回答为“是”:您可以使用表计算。

如果回答为“否”:使用基本计算。

示例:

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

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

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

PERCENTILE([Sales], .90)

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

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

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

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


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

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

如果对问题 1 的回答为“”,请询问自己以下问题:

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

如果回答为“是”:使用基本计算。

如果回答为“否”:使用详细级别 (LOD) 表达式。

示例

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

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

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

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

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

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

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

  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)”计算

结果如下:

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

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

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

  • 如果回答为“是”,则使用表计算。

  • 如果回答为“”,则询问自己:您的问题粒度是否与可视化项粒度或数据源粒度匹配?如果回答为“否”:使用 LOD 计算。

仅使用表计算

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

  • 排名

  • 递归(例如,累计总计)

  • 移动计算(例如,移动平均)

  • 内部行计算(例如,期间对照计算)

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

示例

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

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

为什么?因为表计算能够为每个数据分区(单元格、区、表)输出多个值,而基本和 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) 后,您将得到如下结果:


继续阅读关于了解如何创建计算的提示