Above - 图表函数

Above()用于评估表格中列段数据内当前行上方的行的表达式。要计算的行取决于offset值,如果存在,则默认计算直接上面的行。对于除表格以外的图表,Above() 用于计算图表的等效垂直表中当前行上面的行的值。

语法:  

Above([TOTAL] expr [ , offset [,count]])

返回数据类型: dual

参数:  

参数 说明
expr 表达式或字段包含要度量的数据。
offset

指定 offsetn(大于 0)后,将表达式评估从当前行开始向上移动 n 行。

指定 0 偏移量可以计算当前行上的表达式的值。

指定负偏移量数值后,使 Above函数效果类似于具有相应正偏移量数值的 Below 函数。

count

通过指定第三个参数 count大于 1,函数将返回一连串 count 值,每个值对应一个从原始单元格开始向上计数的 count 表格行。

此时,可以将该函数用作任何特殊范围函数的参数。 范围函数

TOTAL

如果表格是单维度或如果将 TOTAL限定符用作参数,则当前列段数据总是与整列相等。

另请: 定义聚合范围

在列段数据的第一行中返回 NULL值,因为其上没有行。

备注: 列段数据是指按当前排序顺序拥有与维度相同的值的连续单元格子集。内部记录图表函数在列段数据中进行计算,不包括等效垂直表图表中的最右侧维度。如果图表中只有一个维度,或者如果已指定 TOTAL限定符,则计算整个表格中的表达式。
备注: 如果表格或表格等同物有多个垂直维度,当前列段数据将只包括值与所有维度列的当前行相同的行,但按内部字段排序显示最后维度的列除外。

限制:  

递归调用将返回 NULL值。

示例和结果:  

示例 1:  

Customer Sum(Sales) Above(Sum(Sales)) Sum(Sales) + Above(Sum(Sales)) Above offset 3 Higher?
  2566 - - - -
Astrida 587 - - - -
Betacab 539 587 1126 - -
Canutility 683 539 1222 - Higher
Divadip 757 683 1440 1344 Higher
示例 1 的表格图表。

在此示例中显示的表格图表的界面中,表格通过维度Customer和以下度量进行创建:Sum(Sales)Above(Sum(Sales))

对于包含 Astrida的行 Customer,列 Above(Sum(Sales)) 返回NULL,因为其上没有行。Betacab行的结果显示 AstridaSum(Sales) 值,Canutility 的结果显示 BetacabSum(Sales) 值,以此类推。

对于标有 Sum(Sales)+Above(Sum(Sales))的列,Astrida 的行将显示行 Betacab + Betacab (539+587) 的Sum(Sales) 值的相加结果。Betacab行的结果将显示 Canutility + Canutility (683+539) 的 Sum(Sales) 值的相加结果。

使用表达式 Sum(Sales)+Above(Sum(Sales), 3)创建的标有 Above offset 3 的度量具有参数 offset(已设置为3),并且能够获取当前行上面三行中的值。它将当前 CustomerSum(Sales) 值添加到上面三行Customer 的值中。对前三个 Customer行返回的值是 NULL 值。

此表格还显示了更复杂的度量:根据 Sum(Sales)+Above(Sum(Sales))创建的一个值以及根据 Higher? 创建的一个标有 IF(Sum(Sales)>Above(Sum(Sales)), 'Higher') 的值。

提示: 此函数也可以用于图表(如条形图),但不能用于表格。
提示: 对于其他图表类型,应将图表转换成等效垂直表,这样您就可以轻松解释该函数涉及到的行。

示例 2:  

在此示例中显示的表格图表的界面中,已将更多维度添加到图表中:MonthProduct。 对于包含多个维度的图表,表达式(包含 AboveBelowTopBottom 函数)的结果取决于QlikView 对列维度进行排序的顺序。QlikView根据最后排序的维度得出的列段数据计算函数的值。可以在排序下控制列排序顺序,并且不一定采用在表格中显示的顺序。

在以下示例 2 的表格图表界面中,最后排序的维度是 Month,因此Above 函数基于月进行评估。每个月(JanAug),即一个列段数据的每个Product 值都有一系列结果。随后是下一个列段数据的一系列结果:下一个 Product每个Month 的结果。每个 Product的每个 Customer 值都将有一个列段数据。

Customer Product Month Sum(Sales) Above(Sum(Sales))
      2566 -
Astrida AA Jan 46 -
Astrida AA Feb 60 46
Astrida AA Mar 70 60
Astrida AA Apr 13 70
Astrida AA May 78 13
Astrida AA Jun 20 78
Astrida AA Jul 45 20
Astrida AA Aug 65 45
示例 2 的表格图表。

示例 3:  

在示例 3 的表格图表的界面中,最后排序的维度是Product。为此,可在属性面板的“排序”标签中将维度Product移到第 3 个位置。每个 Product都会评估 Above 函数,因为只有两个产品 AABB,并且每个系列只有一个非空结果。在月 JanBB 行中,Above(Sum(Sales)) 的值为 46。对于AA行,值为 NULL。对于任何一个月,每个 AA行的值将始终为 NULL,因为在 AA 行的上方没有任何Product 值。在月 FebAABB 行中评估第二个系列,对于 CustomerAstrida 以此类推。当为 Astrida评估完所有月份后,为第二个 CustomerBetacab 值重复此顺序,以此类推。

Customer Product Month Sum(Sales) Above(Sum(Sales))
      2566 -
Astrida AA Jan 46 -
Astrida BB Jan 46 46
Astrida AA Feb 60 -
Astrida BB Feb 60 60
Astrida AA Mar 70 -
Astrida BB Mar 70 70
Astrida AA Apr 13 -
Astrida BB Apr 13 13
示例 3 的表格图表。

示例 4:  

结果

Above函数可用作范围函数的输入。例如:RangeAvg (Above(Sum(Sales),1,3))

Above()函数的参数中,将 offset 设置为 1,并将count 设置为 3。函数在列段数据(其中有一行)当前行正上方的三行中查找表达式Sum(Sales)的结果。这三个值用作 RangeAvg()函数的输入,用于查找所提供的数字范围中的平均值。

Customer为维度的表格为 RangeAvg() 表达式提供了以下结果。

Astrida
Betacab
Canutility
Divadip:
-
587
563
603

示例中所使用的数据:

Monthnames:

LOAD * INLINE [

Month, Monthnumber

Jan, 1

Feb, 2

Mar, 3

Apr, 4

May, 5

Jun, 6

Jul, 7

Aug, 8

Sep, 9

Oct, 10

Nov, 11

Dec, 12

];

Sales2013:

crosstable (Month, Sales) LOAD * inline [

Customer|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec

Astrida|46|60|70|13|78|20|45|65|78|12|78|22

Betacab|65|56|22|79|12|56|45|24|32|78|55|15

Canutility|77|68|34|91|24|68|57|36|44|90|67|27

Divadip|57|36|44|90|67|27|57|68|47|90|80|94

] (delimiter is '|');

要按正确顺序对月份进行排序,在创建图表后,请转到图表属性的Sort标签,然后选中Sort by下的Expression复选框。在表达式框中,输入 Monthnumber