Top
Top() 用于评估表格中列段数据第一(顶部)行的表达式。要计算的行取决于 offset 值,如果存在,则默认计算顶行。对于除表格以外的图表,Top() 用于计算图表的等效垂直表中当前列的第一行的值。
语法:
Top([TOTAL] expr [ , offset [,count ]])
返回数据类型: 双
参数:
- expr: 表达式或字段包含要度量的数据。
- offset: 指定 offset n(大于 0)后,将表达式评估从当前行开始向上移动 n 行。指定 0 偏移量可以计算当前行上的表达式的值。 指定负偏移量数值后,使 Above 函数效果类似于具有相应正偏移量数值的 Below 函数。
- count: 通过指定第三个参数 count 大于 1,函数将返回一连串 count 值,每个值对应一个从原始单元格开始向上计数的 count 表格行。 此时,可以将该函数用作任何特殊范围函数的参数。 范围函数
- TOTAL: 如果表格是单维度或如果将 TOTAL 限定符用作参数,则当前列段数据总是与整列相等。
限制:
-
当在图表的任何表达式中使用此图表函数时,不允许对图表中的 y 值进行排序或按表中的表达式列进行排序。因此,这些排序替代项会自动禁用。当您在可视化或表格中使用此图表函数时,可视化的排序将返回到此函数的排序输入。
-
递归调用将返回 NULL 值。
示例和结果:
示例 1:
Customer | Sum(Sales) | Top(Sum(Sales)) | Sum(Sales) + Top(Sum(Sales)) | Top offset 3 |
---|---|---|---|---|
2566 | 587 | 3153 | 3249 | |
Astrida | 587 | 587 | 1174 | 1270 |
Betacab | 539 | 587 | 1126 | 1222 |
Canutility | 683 | 587 | 1270 | 1366 |
Divadip | 757 | 587 | 1344 | 1440 |
在此示例中显示的表格图表的界面中,表格通过维度 Customer 和以下度量进行创建:Sum(Sales) 和 Top(Sum(Sales)) 。
全部行的列 Top(Sum(Sales)) 均返回 587,因为此值是顶行值:Astrida
此表格还显示了更复杂的度量:根据 Sum(Sales)+Top(Sum(Sales)) 创建的一个值以及标有 Top offset 3 的一个值,后者使用表达式 Sum(Sales)+Top(Sum(Sales), 3) 创建,且具有设置为 offset 的参数 3。它将当前行的 Sum(Sales) 值添加到从顶行开始第三行中的值中,即,当前行加上 Canutility 的值。
示例 2:
在此示例中显示的表格图表的界面中,已将更多维度添加到图表中:Month 和 Product。对于包含多个维度的图表,表达式(包含 Above、Below、Top 和 Bottom 函数)的结果取决于 QlikView 对列维度进行排序的顺序。QlikView 根据最后排序的维度得出的列段数据计算函数的值。可以在排序下控制列排序顺序,并且不一定采用在表格中显示的顺序。 (有一些行未显示,但保留了空间。)
Customer | Product | Month | Sum(Sales) | First value |
---|---|---|---|---|
2566 | - | |||
Astrida | AA | Jan | 46 | 46 |
Astrida | AA | Feb | 60 | 46 |
Astrida | AA | Mar | 70 | 46 |
... | ... | ... | ... | ... |
Astrida | AA | Sep | 78 | 46 |
Astrida | AA | Oct | 12 | 46 |
Astrida | AA | Nov | 78 | 46 |
Astrida | AA | Dec | 22 | 46 |
Astrida | BB | Jan | 46 | 46 |
Customer | Product | Month | Sum(Sales) | First value |
---|---|---|---|---|
2566 | - | |||
Astrida | AA | Jan | 46 | 46 |
Astrida | BB | Jan | 46 | 46 |
Astrida | AA | Feb | 60 | 60 |
Astrida | BB | Feb | 60 | 60 |
Astrida | AA | Mar | 70 | 70 |
Astrida | BB | Mar | 70 | 70 |
Astrida | AA | Apr | 13 | 13 |
Astrida | BB | Apr | 13 | 13 |
请参考 Above 函数中的示例 2,了解更多信息。
示例 3:
Top 函数可用作范围函数的输入。例如:RangeAvg (Top(Sum(Sales),1,3))。
在 Top() 函数的参数中,offset 设置为 1,count 设置为 3。在列段数据中底行下方的行开始的三行上查找表达式 Sum(Sales) 的结果(因为 offset=1),并且列段数据(其中有一行)下方有两行。这三个值用作 RangeAvg() 函数的输入,用于查找所提供的数字范围中的平均值。
以 Customer 为维度的表格为 RangeAvg() 表达式提供了以下结果。
Customer | RangeAvg (Top(Sum(Sales),1,3)) |
---|---|
Astrida | 603 |
Betacab | 603 |
Canutility | 603 |
Divadip | 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。