在 Tableau 中创建详细级别表达式

详细级别表达式(也称为 LOD 表达式)允许您在数据源级别和可视化项级别计算值。但是,LOD 表达式可以让您更好地控制要计算的粒度级别。它们可以在较高粒度级别(包括)、较低粒度级别(排除)或完全独立级别(固定)执行。

本文介绍可在 Tableau 中使用的 LOD 表达式的类型,以及何时使用这些表达式及如何设置它们的格式。本文还使用示例来演示如何创建一个简单的 LOD 表达式。

如何创建 LOD 表达式

按照下面的步骤进行操作,了解如何在 Tableau 中创建和使用 LOD 表达式。

步骤 1:设置可视化项

  1. 打开 Tableau Desktop 并连接到“Sample - Superstore”已保存数据源。

  2. 导航到新工作表。

  3. 从“数据”窗格中的“维度”下,将“Region”(区域)拖到“列”功能区。

  4. 从“数据”窗格中的“度量”下,将“Sales”(销售额)拖到“行”功能区。

    将出现一个显示各区域销售额总和的条形图。

步骤 2:创建 LOD 表达式

也许您还想查看各区域每个客户的平均销售额,而不是各区域所有销售额的总和。可以使用 LOD 表达式来达到此目的。

  1. 选择“分析”>“创建计算字段”

  2. 在打开的计算编辑器中,执行以下操作:

    • 将计算命名为“Sales Per Customer”(每个客户的销售额)。

    • 输入以下 LOD 表达式:

      { INCLUDE [Customer Name] : SUM([Sales]) }

  3. 完成后,单击“确定”

    新创建的 LOD 表达式将添加到“数据”窗格的“度量”下。若要详细了解您可使用的 LOD 表达式的类型,请参见LOD 表达式的类型部分。

步骤 3:在可视化项中使用 LOD 表达式

  1. 从“数据”窗格中的“度量”下,将“Sales Per Customer”(每个客户的销售额)拖到“行”功能区,并将其放在“SUM(Sales)”左侧。

  2. 在“行”功能区上,右键单击“Sales Per Customer”(每个客户的销售额),并选择“度量(求和)”>“平均值”

    您现在既可以看到所有销售额的总和,也可以看到各区域每个客户的平均销售额。例如,您可以看到中部区域的总销售额约为 500,000 美元,每个客户的平均销售额约为 800 美元。

使用快速 LOD 表达式

自 Tableau 2021.1 开始,您可以创建一个 FIXED LOD 表达式,而无需将完整计算输入计算对话框。

可通过两种方式创建快速 LOD 计算。

  1. 按住 Control 单击(或在 Mac 上按住 Command 单击)要聚合的度量并将其拖到要聚合的维度。将出现一个新字段,其中包含新的 FIXED LOD 计算。

    上述过程的动画 gif

  2. 作为第二个选项,选择要聚合的量度,然后按住 Control 单击(或在 Mac 上按住 Command 单击)来选择要聚合的维度。

    • 右键单击所选字段,并选择“创建”>“LOD”

    • 在出现的计算对话框中选择“确定”以完成创建 LOD 的过程。

    显示创建快速 LOD 计算的过程的 gif。

LOD 表达式的类型

您可以在 Tableau 中创建三种类型的 LOD 表达式:

您也可以将 LOD 表达式的作用域限定为表。这种表达式称为表范围LOD 表达式。

FIXED

FIXED 详细级别表达式使用指定的维度计算值,而不引用视图中的维度。

示例

以下 FIXED 详细级别表达式计算每个区域的销售额总和:

{FIXED [Region] : SUM([Sales])}

此详细级别表达式(名为 [Sales by Region])随后将放在“文本”上以显示各区域的总销售额:

视图详细级别为 [Region] 加 [State],但由于 FIXED 详细级别表达式不考虑视图详细级别,因此计算只使用计算中引用的维度,在本例中为“Region”(区域)。出于此原因,您可能会看到各区域中单个州/省/市/自治区的值是相同的。有关为何会发生这种情况的详细信息,请参见聚合和详细级别表达式

如果详细级别表达式中使用了 INCLUDE 关键字(而不是 FIXED),则每个州/省/市/自治区的值将不同,原因是 Tableau 将随视图中的任何其他维度 ([State]) 一起添加表达式中的维度 ([Region]) 来确定表达式的值。结果将如下所示:

INCLUDE

除了视图中的任何维度之外,INCLUDE 详细级别表达式还将使用指定的维度计算值。

如果您想要在数据库中以精细详细级别计算,然后重新聚合并在视图中以粗略详细级别显示,则 INCLUDE 详细级别表达式可能非常有用。当您在视图中添加或移除维度时,基于 INCLUDE 详细级别表达式的字段将随之更改。

示例 1

以下 INCLUDE 详细级别表达式计算每个客户的总销售额:

{ INCLUDE [Customer Name] : SUM([Sales]) }

将该计算放在“行”功能区上(以 AVG 形式聚合),并将 [Region] 维度放在“列”功能区上时,视图将显示每个区域的平均客户销售额:

如果随后将“[Sales]”(销售额) 度量拖到“行”功能区,则结果将阐明各区域的总销售额与各区域每个客户的平均销售额的差异:

示例 2

以下 INCLUDE 详细级别表达式计算每个州/省/市/自治区的销售额总和:

{ INCLUDE [State] : SUM(Sales)}

计算放在“行”功能区上,并以平均值的形式聚合。生成的可视化项将按州/省/市/自治区跨类别计算销售额总和的平均值。

“Segment”(细分市场)添加到“列”功能区并将计算移到“标签”后,LOD 表达式结果将更新。现在您可以看到各个州/省/市/自治区的平均销售额总和在类别和细分之间如何变化。

EXCLUDE

EXCLUDE 详细级别表达式声明要从视图详细级别中忽略的维度。

EXCLUDE 详细级别表达式对于“占总计百分比”或“与总体平均值的差异”方案非常有用。它们可与诸如“合计”和“参考线”等功能相比。

EXCLUDE 详细级别表达式无法在行级别表达式(其中没有要忽略的维度)中使用,但可用于修改视图级别计算或中间的任何内容(也就是说,您可以使用 EXCLUDE 计算从某些其他详细级别表达式中移除维度)。

示例 1

以下 EXCLUDE 详细级别表达式计算每个月的平均总销售额,然后排除月组件:

{EXCLUDE [Order Date (Month / Year)] : AVG({FIXED [Order Date (Month / Year)] : SUM([Sales])})}

有关创建月/年日期字段的详细信息,请参见自定义日期(链接在新窗口中打开)

请注意,这是一个嵌套详细级别表达式,也就是说,位于另一个详细级别表达式内的详细级别表达式。

另存为 [average of sales by month] 后,随后可通过“行”功能区上的一个临时计算将该计算从每月销售额总和中减去:

通过将 Month([Order Date]) 放在“列”功能区上,将会创建一个视图,显示四年期间内每个月的实际销售额之间的差异,以及整个四年期间的平均每月销售额:

示例 2

以下详细级别表达式从 [Sales] 的总和计算中排除 [Region]:

{EXCLUDE [Region]: SUM([Sales])}

表达式保存为 [ExcludeRegion]。

若要说明此表达式的有用之处,请首先考虑以下视图,该视图按区域和月份显示销售额总和。

通过将 [ExcludeRegion] 放在“颜色”上,将会使视图发生细微变化,将会按月份显示总销售额,但没有区域组件:

表范围

可以在不使用任何定界关键字的情况下在表级别定义详细级别表达式。例如,以下表达式返回整个表的最小(最早)订单日期:

{MIN([Order Date])}

这相当于没有维度声明的 FIXED 详细级别表达式:

{FIXED : MIN([Order Date])}

LOD 表达式语法

详细级别表达式语法

详细级别表达式具有以下结构:

{[FIXED | INCLUDE | EXCLUDE] <维度声明> : <聚合表达式>}

下表中描述了详细级别表达式中的元素。

元素 描述
{ } 整个详细级别表达式括在花括号中。
[FIXED | INCLUDE | EXCLUDE]

左花括号之后的第一个元素是以下定界关键字之一:

  • FIXED

    FIXED 详细级别表达式使用指定的维度计算值,而不引用视图详细级别,也就是说,不引用视图中的任何其他维度。

    FIXED 详细级别表达式还会忽略除上下文筛选器、数据源筛选器和数据提取筛选器之外的所有筛选器。

    示例:{ FIXED [Region] : SUM([Sales]) }

    请参见FIXED部分,了解 FIXED 详细级别表达式的详细信息以及某些示例 FIXED 详细级别方案。

  • INCLUDE

    除了视图中的任何维度之外,INCLUDE 详细级别表达式还将使用指定的维度计算值。

    在纳入不在视图中的维度时,INCLUDE 详细级别表达式最有用。

    示例:{ INCLUDE [Customer Name] : SUM([Sales]) }

    请参见INCLUDE部分,了解 INCLUDE 详细级别表达式的详细信息以及某些示例 INCLUDE 详细级别方案。

  • EXCLUDE

    EXCLUDE 详细级别表达式从表达式中显式移除维度,也就是说,这些表达式从视图详细级别中去除维度。

    在排除视图中的维度时,EXCLUDE 详细级别表达式最有用。

    示例:{EXCLUDE [Region]: SUM([Sales])}

    请参见EXCLUDE部分,了解 EXCLUDE 详细级别表达式的详细信息以及某些示例 EXCLUDE 详细级别方案。

  • 表范围

    对于表范围详细级别表达式,不需要定界关键字。有关详细信息,请参见表范围部分。

<维度声明>

指定聚合表达式要联接到的一个或多个维度。使用逗号分隔各个维度。例如:

[Segment], [Category], [Region]

对于明细级别表达式,可以使用在维度声明中作为维度计算的任何表达式,包括日期表达式。

此示例将在年度级别聚合“销售额”的总和:

{FIXED YEAR([Order Date]) : SUM(Sales)}

此示例将聚合“[Order Date]”([订单日期])维度的“销售额”总和,并截断到天日期部分。因为它是 INCLUDE 表达式,所以它将也使用视图中的维度来聚合值:

{INCLUDE DATETRUNC('day', [Order Date]) : AVG(Profit)}

注意: 强烈建议您在创建维度声明时将字段拖到计算编辑器中,而不是键入它们。例如,如果您在功能区上看到 YEAR([Order Date]),然后将其键入为维度声明,则它将与此功能区上的字段不匹配。但是,如果您将功能区中的字段拖到表达式中,那么它将变为 DATEPART('year', [Order Date]),这将与功能区上的字段匹配。

对于命名的计算(即,保存到“数据”窗格中的计算,而不是未命名的临时计算),Tableau 无法将计算的名称与其定义匹配。因此,如果您创建了命名计算 MyCalculation,其定义如下:

MyCalculation = YEAR([Order Date])

然后,您创建了以下 EXCLUDE 明细级别表达式并在视图中使用:

{EXCLUDE YEAR([Order Date]) : SUM(Sales)}

则将不排除 MyCalculation。

同样,如果 EXCLUDE 表达式指定了 MyCalculation:

{EXCLUDE MyCalculation : SUM(Sales)}

则将不排除 YEAR([Order Date])。

冒号用于分隔维度声明与聚合表达式。
<聚合表达式> 聚合表达式是所执行的计算,用于定义目标维度。

另请参见

详细级别表达式的介绍(链接在新窗口中打开)

深入了解 LOD 表达式(链接在新窗口中打开)

深入钻研 LOD 表达式(链接在新窗口中打开)

15 大 LOD 表达式(链接在新窗口中打开)

了解 LOD 表达式(链接在新窗口中打开)

Tableau 中详细级别表达式的工作方式

此部分中的其他文章

感谢您的反馈!