对聚合数据使用表达式(THEN 关键字)
可以使用 THEN 关键字根据已聚合数据(通常是当前图表中的数据)解算表达式。在许多情况下,这可以在计算中提供更好的性能。例如,使用 OVER 表达式,通常首先要允许聚合数据,然后应用表达式的 OVER 部分便可改善性能。由于数据库中的数据中没有可用的行级别数据,因此使用这类数据时必须执行该操作,而使用内存中的数据时也能改善性能。
在 THEN 表达式中,已聚合数据称为临时列 [Value]
。也就是说,[Value]
表示 THEN 关键字之前的整个表达式的结果。
THEN 后面的表达式部分使用 THEN 之前的表达式部分的结果,就像它是一列一样。例如,计算销售额累计总和的自定义表达式为:
Sum([Sales]) THEN Sum([Value] OVER (AllPrevious([Axis.X]))
此表达式适用于内存中和数据库中的数据,而类似的 Sum([Sales]) OVER (AllPrevious([Axis.X]))
仅适用于内存中数据。
在上面的 THEN 表达式中,首先解算 Sum([Sales])
,然后会将数据聚合到临时列 [Value]
中。接着根据这个临时列解算 THEN 后面的表达式。
语法
聚合表达式(THEN 表达式)AS [Identifier]
[Value]
可用于引用之前表达式的值(主表达式或之前的 THEN 表达式;同一个表达式中可以有多个 THEN)。- 可在
[X. LevelName]
代表轴“X”层级中“LevelName”级别值的地方使用该语法引用特定层级上的值。您可以在每个轴层级中对各个级别使用一个级别引用。例如,使用[X.Year]
引用日期层级中的年。 - 在 THEN 表达式中,您有时会需要从特定节点中选取值。这样,您可以使用
[CategoryIndex.X]
从表达式中选取感兴趣的节点。例如,若需获取轴中节点编号为五的值并将其放到所有其他节点,则可以使用如下表达式:Sum([Sales]) THEN Sum(if([CategoryIndex.X]=4,[Value],0)) OVER (All([Axis.X]))
选取第五个节点的类别索引设置为四,因为轴上第一个节点的类别索引为 0。
THEN 表达式可用以所有的连续轴和表达式,如标签、规则等。但它们无法应用到分类轴或误差线中。
示例
不使用:Sum([Sales]) OVER (AllPrevious([Axis.X]))
使用:Sum([Sales]) THEN Sum([Value]) OVER (AllPrevious([Axis.X]))
若要为字符串列生成累计唯一计数,可使用如下表达式:
UniqueCount([Column]) THEN Sum([Value]) OVER (AllPrevious([Axis.X])) as [Cumulative Count]
有关使用 THEN 的表达式的详细信息,另请参见常用自定义表达式的快捷方式。