使用 OVER 语句引用数据切片
自定义表达式根据在图表中使用标记表示的数据切片计算得出。当您要在自定义表达式计算中包含当前切片之外的数据时,可以在自定义表达式中使用 OVER 语句。
要解释包含当前切片之外的数据意味着什么,请参见下图。使用类似的图阐述分割和标记概念,它们对于了解何时使用自定义表达式非常重要,尤其是包含 OVER 语句的自定义表达式。
大方框表示数据表中的所有行,包括某些水果类型在不同地区的年销售额,立方体表示不同的数据切片。

假设您要比较 2018 年北部地区的橘子销售额与 2018 年西部地区柠檬的销售额,或者比较 2015 年至 2017 年西部地区的橘子销售额。也就是说,在此类表达式中,您需要使用 OVER 语句引用 2018 年北部地区橘子销售额之外的数据切片。使用 OVER 语句,您可以开拓对要在表达式中引用的数据进行分组的新方法。
解释如何在表达式中写入 OVER 语句及其工作原理的最简单的方法是举例说明。
OVER 表达式的示例
[Axis.X]
或 [Axis.Color]
。散点图显示每种水果的销售额总和;苹果、橘子和梨。总销售额为 300。

在 Y 轴上指定表达式时,
Sum([Sales]) OVER (All([Axis.X]))
重新计算每个标记,散点图更改为:

为理解结果,以呈现苹果销售额总和的标记为例。自定义表达式暗示标记应当重新计算,以显示所有 X 轴切片的销售额总和,即苹果、橘子和梨销售额总和 (150+80+70)。其他标记同样如此,所以所有标记都以相同的值结束。实际上,表达式的 OVER (All([Axis.X]))
部分暗示忽略 X 轴上的分割!
在下一个示例中,对数据进行进一步分割,因为在颜色轴上指定了年份。

将 Y 轴更改为以下表达式:
Sum([Sales]) OVER (All([Axis.Color]))

自定义表达式暗示每个标记都应重新计算,以显示所有颜色切片的销售额总和,但实际上却忽略了按颜色进行的分割。
以 2015 年的梨为例(蓝色梨星号)。标记的新值显示三年的梨销售额总和 (40+20+10)。水果类型中的所有标记都获得相同的 Y 轴值,无论颜色如何(年份)。
尽管上述示例并未实际使用,但可作为了解 OVER 语句如何与所谓的节点导航方法一起使用的手段。
在计算列中使用 OVER 语句
OVER 语句在计算列中的使用不同于在自定义表达式中的使用。在计算列中,它可能会导致记录减少。
- 在计算列中使用 OVER 语句
您可以对数据执行计算,在添加到数据表中的新列中将结果显示为值。在用于计算的表达式中,您可以使用 OVER 语句。然而,OVER 语句在计算列中的使用不同于在自定义表达式中的使用。在计算的列中,OVER 表达式用于计算各个组单独的固定值,而且 OVER 表达式可能会导致数据“分割为更少的记录”。 - 在 OVER 表达式中使用聚合
当表达式结果应为列中值的聚合视图时,您可以使用所选的表达式函数确定输出。例如,要汇总含有销售数据的列时,请在表达式字段中输入Sum([Sales])
。但是,将聚合值与 OVER 表达式结合使用时,您可以按照所需的方式拆分数据。 - 对聚合数据使用表达式(THEN 关键字)
可以使用 THEN 关键字根据已聚合数据(通常是当前图表中的数据)解算表达式。在许多情况下,这可以在计算中提供更好的性能。例如,使用 OVER 表达式,通常首先要允许聚合数据,然后应用表达式的 OVER 部分便可改善性能。由于数据库中的数据中没有可用的行级别数据,因此使用这类数据时必须执行该操作,而使用内存中的数据时也能改善性能。