Tableau 中详细级别表达式的工作方式
本文介绍详细级别表达式的计算方式以及它们在 Tableau 中的工作方式。有关 LOD 表达式及其工作方式的详细信息,请参见 Tableau 网站上的了解详细级别 (LOD) 表达式(链接在新窗口中打开)白皮书。
行级别表达式和视图级别表达式
在 Tableau 中,将为基础表中的每一行计算引用非聚合数据源列的表达式。在这种情况下,表达式的维度为行级别。行级别表达式的示例为:
[Sales] / [Profit]
将在数据库的每一行中对此计算进行求值。对于每一行,会将该行中的“Sales”(销售额)值除以该行中的“Profit”(利润)值,生成一个包含相乘结果(利润率)的新列。
如果创建包含此定义的计算,请使用名称“[ProfitRatio]”保存该计算,然后将其从“数据”窗格拖到功能区,Tableau 通常会为视图聚合计算字段:
SUM([ProfitRatio])
与之相比,引用聚合数据源列的表达式将在视图中的维度所定义的维度处进行计算。在这种开发部下,表达式的维度为视图级别。视图级别维度的示例为:
SUM(Sales) / SUM(Profit)
如果将此计算拖到功能区(或以临时计算的形式在功能区上直接键入),则 Tableau 会将其放在 AGG 函数内:
AGG(SUM(Sales) / SUM(Profit))
这就是所谓的聚合计算。有关详细信息,请参见Tableau 中的聚合函数(链接在新窗口中打开)。
放在任何位置中的维度和集字段(在下图中突出显示)组成视图详细级别:
在 Tableau 中支持详细级别表达式之前,无法在除视图级别之外的其他详细级别上创建计算。举例来说,如果您尝试保存以下表达式,Tableau 会显示错误消息:“无法将聚合和非聚合参数与此函数混合”:
[Sales] – AVG([Sales])
用户在此示例中的意图是将每个商店的商店销售额与所有商店的平均销售额进行比较。此意图现在可通过详细级别表达式实现:
[Sales] - {AVG([Sales])}
这就是所谓的表范围详细级别表达式。请参见表范围。
详细级别表达式的限制
以下限制和约束适用于详细级别表达式。另请参见详细级别表达式的数据源约束。
在需要对表达式中的值进行比较的视图中使用时,引用浮点度量的详细级别表达式可能会表现得不可靠。有关详细信息,请参见了解计算中的数据类型(链接在新窗口中打开)。
详细级别表达式不显示在“数据源”页面上。请参见“数据源”页面。
引用维度声明中的参数时,务必使用参数名称,而不是参数值。
对于数据混合,主数据源中的链接字段必须位于视图中,然后您才能使用辅助数据源中的详细级别表达式。请参见数据混合疑难解答。
此外,某些数据源有复杂性限制。Tableau 将不会为这些数据库禁用计算,但在计算变得过于复杂的情况下,将可能会出现查询错误。
详细级别表达式可以是维度或度量
当您保存详细级别表达式时,Tableau 会将其添加到“数据”窗格中的“维度”或“度量”区域。
FIXED 详细级别表达式可能会生成度量或维度,具体情况视聚合表达式中的基础字段而定。因此 MIN([Date])} 将是维度,原因是 [Date] 是维度,而 {fixed Store : SUM([Sales])} 将是度量,因为 [Sales] 是度量。将 FIXED 详细级别表达式另存为度量时,您可以选择将其转移到维度。
INCLUDE 和 EXCLUDE 详细级别表达式始终是度量。
筛选器和详细级别表达式
Tableau 中有几种不同种类的筛选器,它们将按以下顺序从上至下执行。
右侧的文本显示在此序列中的何处执行详细级别表达式。
如果要依据数据源创建 Tableau 数据提取,则数据提取筛选器(显示为橙色)是唯一相关的筛选器。表计算筛选器(深蓝色)在计算执行之后应用,因此会隐藏标记,而不筛选掉计算中使用的基础数据。
如果您熟悉 SQL,您可以将度量筛选器想像为相当于查询中的 HAVING 子句,并将维度筛选器想像为相当于 WHERE 子句。
FIXED 计算在维度筛选器之前应用,因此,除非您将“筛选器”功能区上的字段提升到使用上下文筛选器,否则将会忽略这些计算。例如,假设您在视图中的一个功能区上有以下计算,并在其他功能区上有 [State]:
SUM([Sales]) / ATTR({FIXED : SUM([Sales])})
此计算将为您提供州/省/市/自治区的销售额与总销售额的比率。
如果随后将 [State] 放在“筛选器”功能区上以隐藏某些州/省/市/自治区,则筛选器将只会影响计算中的分子。由于分母是 FIXED 详细级别表达式,因此它仍然会将仍在视图中的州/省/市/自治区的销售额与所有州/省/市/自治区(包括已从视图中筛选掉的州/省/市/自治区)的总销售额相除。
INCLUDE 和 EXCLUDE 详细级别表达式在维度筛选器之后考虑。因此,如果您想将筛选器应用于 FIXED 详细级别表达式但不想使用上下文筛选器,请考虑将它们改写为 INCLUDE 或 EXCLUDE 表达式。
聚合和详细级别表达式
视图的详细级别确定视图中标记的数量。向视图中添加详细级别表达式时,Tableau 必须协调两个详细级别 — 视图中的详细级别以及表达式中的详细级别。
详细级别表达式在视图中的行为因表达式的详细级别是更粗略、更精细还是与视图中的详细级别相同而异。在此情况下,“更粗略”或“更精细”是什么意思?
详细级别表达式比视图详细级别粗略
在引用视图中的维度子集时,表达式的详细级别比视图更粗略。例如,对于包含维度“[Category]”(类别)和“[Segment]”(细分)的视图,您可能会创建仅使用以下维度之一的详细级别表达式:
{FIXED [Segment] : SUM([Sales])}
在这种情况下,表达式的详细级别比视图更粗略。表达式的值基于一个维度([Segment]),而视图则基于两个维度([Segment] 和 [Category])。
结果是,在视图中使用详细级别表达式会将导致某些值重复,也就是说,出现多次。
在将特定值与某一类别中的平均值进行比较时,重复值很有用。例如,以下计算将从平均销售总额中减去某个客户的平均销售额。
[Sales] - {FIXED [Customer Name] : AVG([Sales])}
当值重复时,更改视图中相关字段的聚合(例如,从 AVG 更改为 SUM)将不会更改聚合的结果。
详细级别表达式比视图详细级别更精细
当表达式引用视图中维度的超集时,表达式的详细级别将比视图更精细。当您在视图中使用此类表达式时,Tableau 将对结果进行聚合,直至达到视图级别。例如,以下详细级别表达式引用两个维度:
{FIXED [Segment], [Category] : SUM([Sales])}
在仅具有“[Segment]”作为其详细级别的视图中使用此表达式时,必须对值进行聚合。如果将该表达式拖到功能区上,您将看到如下结果:
AVG([{FIXED [Segment]], [Category]] : SUM([Sales]])}])
Tableau 将自动分配一个聚合(此例中为平均值)。可以根据需要更改该聚合。
向视图中添加详细级别表达式
详细级别表达式在视图是聚合还是重复由表达式类型(FIXED、INCLUDE 或 EXCLUDE)以及表达式的粒度比视图粒度更粗略还是更精细确定。
INCLUDE 详细级别表达式的详细级别将与视图相同或比视图更精细。因此,值将从不会重复。
FIXED 详细级别表达式的详细级别可能比视图更精细、更粗略或与之相同。是否需要对 FIXED 详细级别的结果进行聚合取决于视图中有什么维度。
EXCLUDE 详细级别表达式始终会导致视图中出现重复值。将包括 EXCLUDE 详细级别表达式的计算放在功能区上时,Tableau 默认情况下将进行 ATTR 聚合(而不是 SUM 或 AVG)以指明表达式实际上并未在聚合,并且更改聚合将不会影响视图。
将详细级别表达式添加到视图中的功能区时,除非将这些表达式用作维度,否则会始终将它们自动封装在聚合中。因此,如果您双击功能区并键入
{FIXED[Segment], [Category] : SUM([Sales])}
然后按 Enter 提交表达式,您现在将在功能区上看到
SUM({FIXED[Segment], [Category] : SUM([Sales])})
但如果您在功能区中双击并编辑表达式,您在编辑模式下看到的将是原始表达式。
如果在创建详细级别表达式时将其封装在聚合中,那么在将包括该表达式的任何计算放在功能区上时,Tableau 将使用您指定的聚合,而不是为其分配一个聚合。如果不需要聚合(原因是表达式的详细级别比视图更粗略),当表达式位于功能区上时,您指定的聚合仍会显示,但会被忽略。
详细级别表达式的数据源约束
对于某些数据源,只有最新版本才支持详细级别表达式。某些数据源完全不支持详细级别表达式。
此外,某些数据源有复杂性限制。Tableau 将不会为这些数据库禁用计算,但在计算变得过于复杂的情况下,将可能会出现查询错误。
数据源 | 支持 |
Actian Vectorwise | 不支持。 |
Amazon EMR Hadoop Hive | Hive 0.13 及更高版本支持。 |
Amazon Redshift | 支持。 |
Aster Database | 版本 4.5 及更高版本支持。 |
Cloudera Hadoop | Hive 0.13 及更高版本支持。 |
Cloudera Impala | Impala 1.2.2 及更高版本支持。 |
多维数据集(多维数据源) | 不支持。 |
DataStax Enterprise | 不支持。 |
EXASOL | 支持。 |
Firebird | 版本 2.0 及更高版本支持。 |
Generic ODBC | 受限。取决于特定数据源。 |
Google Big Query | 标准 SQL 支持,旧版 SQL 不支持。 |
Hortonworks Hadoop Hive | Hive 0.13 及更高版本支持。 在 HIVE 版本 1.1 上,生成交叉联接的详细级别表达式不可靠。 如果没有要在其上进行联接的显式字段,则会出现交叉联接。例如,对于详细级别表达式 |
IBM BigInsights | 支持。 |
IBM DB2 | 版本 8.1 及更高版本支持。 |
MarkLogic | 版本 7.0 及更高版本支持。 |
Microsoft Access | 不支持。 |
基于 Microsoft Jet 的连接(Microsoft Excel、Microsoft Access 和文本的旧版连接器) | 不支持。 |
Microsoft SQL Server | SQL Server 2005 及更高版本。 |
MySQL | 支持。 |
IBM PDA (Netezza) | 版本 7.0 及更高版本支持。 |
Oracle | 版本 9i 及更高版本支持。 |
Actian Matrix (ParAccel) | 版本 3.1 及更高版本支持。 |
Pivotal Greenplum | 版本 3.1 及更高版本支持。 |
PostgreSQL | 版本 7 及更高版本支持。 |
Progress OpenEdge | 支持。 |
SAP HANA | 支持。 |
SAP Sybase ASE | 支持。 |
SAP Sybase IQ | 版本 15.1 及更高版本支持。 |
Spark SQL | 支持。 |
Splunk | 不支持。 |
Tableau 数据提取 | 支持。 |
Teradata | 支持。 |
Vertica | 版本 6.1 及更高版本支持。 |