Spotfire® 用户指南

在 OVER 表达式中使用聚合

当表达式结果应为列中值的聚合视图时,您可以使用所选的表达式函数确定输出。例如,要汇总含有销售数据的列时,请在表达式字段中输入 Sum([Sales])。但是,将聚合值与 OVER 表达式结合使用时,您可以按照所需的方式拆分数据。

嵌套聚合

在计算的列或自定义表达式中使用时,嵌套聚合的行为方式有一些不同。有关示例,请参见下文。(复制下面的文本并将其粘贴(仅限已安装的客户端)或保存为文本文件以用作分析中的数据表并自行尝试。)

Region Product Sales EAST Phone 42 EAST Phone 118 EAST Chair 190 WEST Desk 19 WEST Chair 20 CENTRAL Phone 18 CENTRAL Desk 17 CENTRAL Desk 12 CENTRAL Desk 13 CENTRAL Chair 20

在计算的列中:每个地区总销售额的最大值

通过在函数中编写函数调用,您可以完全掌控表达式输出。嵌套的聚合可以有多个,而且每个嵌套聚合都可以拥有自己的 OVER 表达式。筛选数据表时,计算的列仍会根据整个数据表显示值。

关于此任务

另请参见在计算列中使用 OVER 语句

注: 基于数据库中数据的计算的列不支持 OVER 表达式或嵌套聚合。但是,使用自定义表达式在图表上下文中使用这两种构造时,它们可以正常工作。

以下示例显示了如何使用“添加计算的列”工具按地区计算总销售额,然后查找这些销售额的最大值。

过程

  1. 在分析中加载上面的数据。
  2. 在菜单栏上选择“数据” > “添加计算的列”
  3. “表达式”字段中,键入:
    Max(Sum([Sales]) OVER ([Region]))
  4. 单击“确定”

结果

此时便会将新列添加到数据表。现在,您可以使用经比较不同图表得出的最大值。

计算详细信息

这是添加计算的列时数据引擎中发生的变化;请注意,这些示例中显示的中间表绝不会呈现给最终用户。

原始数据:

首先会计算内部聚合,然后得出各地区销量之和:

在计算的列中,计算结果始终会应用于输入表的所有行,因此,得出的各地区销量值会污损所有行:

随后会针对“Total Sales (SMEARED)”计算 Max(),得出的值为 350,而且因为我们插入了计算的列,该值也会污损所有行。这意味着最终结果为:

筛选数据表时,计算的列仍会根据整个数据表显示值。

在自定义表达式中:各地区最畅销产品销量并筛选掉一个产品组

嵌套聚合也可用在图表轴上的自定义表达式中。此时,它的行为与使用计算的列时类似,但也有一些区别。首先,此时会考虑筛选,因此所有聚合都会基于筛选的数据子集。此外,只有最外部聚合会使用图表定义的分组,而所有内部聚合都需要使用 OVER 表达式来拆分数据。所有内部聚合的处理方式都与使用计算的列时相同,这意味着生成的内部聚合值将添加到外部聚合的所有行。当内部聚合中含有 OVER 表达式时,图表中的所有分类轴都会自动相交(不适用于非聚合图表),即便表达式中并未显式声明这一点。有关详细信息,请参见下文中的计算详细信息

关于此任务

在本例中,我们希望图表中每个条形栏显示一个地区,而条形栏高度为该地区最畅销产品的销量。我们还希望筛选掉“Chair”这款产品,并假定我们感兴趣的是除“chairs”之外的畅销产品。

过程

  1. 在分析中加载上面的数据。
  2. 创建条形图。
  3. 在分类轴上,使用“Region”。
  4. 在值轴上,使用以下表达式显示每个产品销量总和的最大值:
    Max(Sum([Sales]) OVER Intersect([Product]))
    该条形图显示了各地区最畅销产品的值。
  5. “筛选器”面板中,清除“Chair”复选框。

结果

条形栏高度会根据筛选出的数据表重新计算,而且会显示新的最大值。

计算详细信息

这是添加计算的列时数据引擎中发生的变化;请注意,中间表绝不会呈现给最终用户。

从原始数据着手时,您拥有以下表:

筛选掉“Chair”后,图表中计算所基于的数据如下:

内部聚合将与分类轴相交,因此,计算的实际表达式将为:Sum([Sales]) OVER Intersect([Region],[Product]),而该表达式会为每个 (region,product) 对生成以下销量:

正如计算的列一样,内部聚合始终会污损所有行,然后再将结果传递给外部聚合。这意味着,以下内容将作为输入提供给 Max() 函数:

由于此示例作为图表中的自定义表达式计算,最外部聚合 (Max()) 将使用图表定义的分组。这意味着计算的实际表达式将基于筛选的污损行,进而会为条形栏生成以下值:

由于筛选掉了“Chair”分类,东部地区剩余的最高分类为“Phone”,西部地区的最高分类为“Desk”。如果更改了筛选内容,生成的最高类别也会发生变化。

提示: 如果适用(取决于您的数据和您正在查看的轴),系统会提供一个名为“最高类别”的表达式快捷方式,该快捷方式使用嵌套聚合来帮助您查找最高类别。它设计用来处理多个最高类别,并允许您轻松更改内部聚合以及要比较的类别。它使用以下表达式:
UniqueConcatenate(If(Max(Sum([Sales]) OVER (Intersect([Product]))) OVER (Intersect())=Sum([Sales]) OVER (Intersect([Product])),[Product],null))