在 Tableau 中创建详细级别表达式
详细级别表达式(也称为 LOD 表达式)允许您在数据源级别和可视化项级别计算值。但是,LOD 表达式可以让您控制要计算的粒度。它们可以在较高粒度级别(包括)、较低粒度级别(排除)或完全独立级别(固定)执行。
本文介绍可在 Tableau 中使用的 LOD 表达式的类型、何时使用这些表达式及如何设置它们的格式。
如何创建 LOD 表达式
按照步骤进行操作,了解如何在 Tableau 中创建和使用 LOD 表达式。
步骤 1:设置可视化项
- 打开 Tableau Desktop 并连接到“Sample - Superstore”已保存数据源。
- 导航到新工作表。
- 从“数据”窗格中,将“Region”(区域)拖到“列”功能区。
- 从“数据”窗格中,将“Sales”(销售额)拖到“行”功能区。
将出现一个显示各区域销售额总和的条形图。
步骤 2:创建 LOD 表达式
也许您还想查看各区域每个客户的平均销售额,而不是各区域所有销售额的总和。可以使用 LOD 表达式来达到此目的。
- 选择“分析”>“创建计算字段”。
- 在打开的计算编辑器中,执行以下操作:
- 将计算命名为“Sales Per Customer”(每个客户的销售额)。
- 输入以下 LOD 表达式:
{ INCLUDE [Customer Name] : SUM([Sales]) }
- 完成后,单击“确定”。
新创建的 LOD 表达式将添加到“数据”窗格。若要详细了解您可使用的 LOD 表达式的类型,请参见LOD 表达式的类型部分。
步骤 3:在可视化项中使用 LOD 表达式
- 从“数据”窗格中,将“Sales Per Customer”(每个客户的销售额)拖到“行”功能区,并将其放在“SUM(Sales)”左侧。
- 在“行”功能区上,右键单击“Sales Per Customer”(每个客户的销售额),并选择“度量(求和)”>“平均值”。
您现在既可以看到所有销售额的总和,也可以看到各区域每个客户的平均销售额。例如,您可以看到中部区域的总销售额约为 500,000 美元,每个客户的平均销售额约为 800 美元。
使用快速 LOD 表达式
您可以创建一个 FIXED LOD 表达式,而无需将完整计算输入计算对话框。
可通过两种方式创建快速 LOD 计算。
- 在“数据”窗格中,按住 control 键并单击,将要聚合的度量拖到所需的维度上。新字段显示为 FIXED LOD 计算。
聚合表达式中的聚合将来自度量的默认聚合。这通常是 SUM。若要更改聚合或以其他方式编辑 LOD,请右键单击新字段并编辑计算。
- 或者,在“数据”窗格中,选择要聚合的量度,然后按住 control 单击要聚合的维度。
- 右键单击所选字段,并选择“创建”>“LOD计算...”
- (可选)在计算编辑器中修改 LOD。
- 选择“确定”。
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 详细级别方案。
表范围
- 对于表范围详细级别表达式,不需要定界关键字。有关详细信息,请参见表范围部分。
<维度声明>
根据关键字指定一个或多个维度来设置聚合表达式的范围。
- FIXED [名称]
使用逗号分隔多个维度。
[Segment], [Category], [Region]
您可以使用任何计算为维度的表达式,包括日期表达式。
{FIXED YEAR([Order Date]) : SUM(Sales)}
将在年度级别聚合“销售额”的总和。{INCLUDE DATETRUNC('day', [Order Date]) : AVG(Profit)}
将聚合“[Order Date]”([订单日期])的“销售额”总和,并截断到天日期部分。因为它是 INCLUDE 表达式,所以它将也使用视图中的维度来聚合值:
注意:建议您在创建维度声明时将字段拖到计算编辑器中,而不是键入它们。举例来说,如果您在功能区上看到 YEAR([Order Date]),然后将其键入为维度声明,则它将与此功能区上的字段不匹配。但是,如果您将功能区中的字段拖到表达式中,那么它将变为 DATEPART('year', [Order Date]),这将与功能区上的字段匹配。
将计算保存到“数据”窗格后,Tableau 无法将计算名称与其内容相匹配。例如:
- 创建一个计算:
MyCalculation = YEAR([Order Date])
- 创建 EXCLUDE 详细级别表达式
{EXCLUDE YEAR([Order Date]) : SUM(Sales)}
如果您在视图中同时使用这两种计算,则不会排除 MyCalculation。LOD 不理解 YEAR([Order Date]) 与 MyCalculation 是一回事。
同样,如果 EXCLUDE 表达式指定了 MyCalculation ({EXCLUDE MyCalculation : SUM(Sales)}
),则不排除 YEAR([Order Date])。
:(一个冒号)
冒号用于分隔维度声明与聚合表达式。
<聚合表达式>
聚合表达式是所执行的计算。例如,SUM(Sales)
或 AVG(Discount)
。聚合表达式中的计算结果取决于维度声明和关键字。
必须对聚合表达式执行聚合。但是,不支持 ATTR 聚合。它不一定是简单的聚合,它可以包含计算,其中包括其他 LOD 表达式:{FIXED [Question] : AVG(IF [Answer] = "Red" THEN 1 ELSE 0 END )}
聚合表达式中不允许表计算。
表范围的 LOD 仅包含大括号内的聚合表达式,例如 {MIN(Grade)}
。
LOD 表达式的类型
您可以在 Tableau 中创建三种类型的 LOD 表达式:
您也可以将 LOD 表达式的作用域限定为表。这种表达式称为表范围LOD 表达式。
FIXED
FIXED 详细级别表达式使用指定的维度计算值,而不引用视图中的维度。
示例
以下 FIXED 详细级别表达式计算每个区域的销售额总和:
{FIXED [Region] : SUM([Sales])}
此详细级别表达式(名为 [Sales by Region])随后将放在“文本”上以显示各区域的总销售额:
视图的详细级别是 [Region] 和 [State]。但是 FIXED 详细级别表达式不查看视图中的维度,仅查看计算中指定的维度(此处为 Region)。因此,每个区域中各个州的值是相同的。有关详细信息,请参见聚合和详细级别表达式。
如果关键字是 INCLUDE 而不是 FIXED,则每个州的值将不同。INCLUDE 在计算表达式时使用表达式 ([Region]) 中的维度和视图 ([State]) 中的任何其他维度。
INCLUDE
除了视图中的任何维度之外,INCLUDE 详细级别表达式还将使用指定的维度计算值。
如果您想要在数据库中以精细详细级别计算,但在视图中以粗略详细级别重新聚合,则 INCLUDE 可能很有用。当您在视图中添加或移除维度时,基于 INCLUDE 详细级别表达式的字段将随之更改。
示例 1
此 INCLUDE 详细级别表达式计算每个客户的总销售额:
{ INCLUDE [Customer Name] : SUM([Sales]) }
将该 LOD 放在“行”功能区上(以 AVG 形式聚合),并将 [Region] 维度放在“列”功能区上时,视图将显示每个区域的平均客户销售额:
示例 2
此 INCLUDE 详细级别表达式计算每个州/省/市/自治区的销售额总和:
{ INCLUDE [State] : SUM(Sales)}
计算放在“行”功能区上,并以平均值的形式聚合。生成的可视化项将按州/省/市/自治区跨类别计算销售额总和的平均值。
将“Segment”(细分市场)添加到“列”功能区并将计算移到“标签”后,LOD 表达式结果将更新。现在您可以看到各个州/省/市/自治区的平均销售额总和在类别和细分之间如何变化。
EXCLUDE
EXCLUDE 详细级别表达式声明要从视图详细级别中忽略的维度。
EXCLUDE 对于“占总计百分比”或“与总体平均值的差异”方案非常有用。它们可与“合计”和“参考线”相比。
EXCLUDE 不能用于行级表达式(没有要省略的维度)。它们可以修改视图级计算或其他 LOD。
示例 1
以下 EXCLUDE 详细级别表达式计算每个月的平均总销售额,然后排除月。
- 首先,为订单日期的月份/年份创建一个字段。
- 在“数据”窗格中右键单击“Order Date”(订单日期),然后选择“创建”>“创建自定义日期”。
- 从“详细信息”列表中,选择“Month / Year”(月份/年份)。将选择保留为离散。
- 然后,创建一个名为“average of sales by month”(按月列出的平均销售额)的 LOD 表达式:
{EXCLUDE [Order Date (Month / Year)] : AVG({FIXED [Order Date (Month / Year)] : SUM([Sales])})}
请注意,这是一个嵌套详细级别表达式,也就是说,位于另一个详细级别表达式内的详细级别表达式。
- 随后可通过“行”功能区上的一个临时计算将该计算从每月销售额总和中减去:
- 将“Month([Order Date])”放在“列”功能区上
结果视图显示了整个四年期间每月实际销售额与平均每月销售额之间的差异:
示例 2
创建一个名为“ExcludeRegion”的详细级别表达式,从 [Sales] 的总和中排除 [Region]:
{EXCLUDE [Region]: SUM([Sales])}
考虑以下视图,该视图按区域和月份显示销售额总和:
通过将 [ExcludeRegion] 放在“颜色”上,将会使视图发生细微变化,将会按月份显示总销售额,但没有区域组件:
表范围
可以在不使用任何定界关键字的情况下在表级别定义详细级别表达式。例如,以下表达式返回整个表的最小(最早)订单日期:
{MIN([Order Date])}
这相当于没有维度声明的 FIXED 详细级别表达式:
{FIXED : MIN([Order Date])}