# Above

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

语法：

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

返回数据类型： 双

参数：

* expr： 表达式或字段包含要度量的数据。

* offset：指定 offset n（大于 0）后，将表达式评估从当前行开始向上移动 n 行。指定 0 偏移量可以计算当前行上的表达式的值。 指定负偏移量数值后，使 Above 函数效果类似于具有相应正偏移量数值的 Below 函数。

* count：通过指定第三个参数 count 大于 1，函数将返回一连串 count 值，每个值对应一个从原始单元格开始向上计数的 count 表格行。 此时，可以将该函数用作任何特殊范围函数的参数。 [范围函数](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm)

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

  [定义聚合范围](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/define-aggregation-scope.htm)

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

信息注释列段数据是指按当前排序顺序拥有与维度相同的值的连续单元格子集。内部记录图表函数在列段数据中进行计算，不包括等效垂直表图表中的最右侧维度。如果图表中只有一个维度，或者如果已指定 TOTAL 限定符，则计算整个表格中的表达式。

信息注释如果表格或表格等同物有多个垂直维度，当前列段数据将只包括值与所有维度列的当前行相同的行，但按内部字段排序显示最后维度的列除外。

限制：

* 递归调用将返回 NULL 值。

* 当在图表的任何表达式中使用此图表函数时，不允许对图表中的 y 值进行排序或按表中的表达式列进行排序。因此，这些排序替代项会自动禁用。当您在可视化或表格中使用此图表函数时，可视化的排序将返回到此函数的排序输入。

示例和结果：

示例 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 |

在此示例中显示的表格图表的界面中，表格通过维度 Customer 和度量 `Sum(Sales)` 及 `Above(Sum(Sales))` 进行创建。

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

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

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

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

提示注释此函数也可以用于图表（如条形图），但不能用于表格。

提示注释对于其他图表类型，应将图表转换成等效垂直表，这样您就可以轻松解释该函数涉及到的行。

示例 2:

在此示例中显示的表格图表的界面中，已将更多维度添加到图表中：Month 和 Product。 对于包含多个维度的图表，表达式（包含 Above、Below、Top 和 Bottom 函数）的结果取决于 QlikView 对列维度进行排序的顺序。QlikView 根据最后排序的维度得出的列段数据计算函数的值。可以在排序下控制列排序顺序，并且不一定采用在表格中显示的顺序。

在以下示例 2 的表格图表界面中，最后排序的维度是 Month，因此 Above 函数基于月进行评估。每个月（Jan 到 Aug），即一个列段数据的每个 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 |

示例 3:

在示例 3 的表格图表的界面中，最后排序的维度是 Product。为此，可在属性面板的“排序”标签中将维度 Product 移到第 3 个位置。每个 Product 都会评估 Above 函数，因为只有两个产品 AA 和 BB，并且每个系列只有一个非空结果。在月 Jan 的 BB 行中，Above(Sum(Sales)) 的值为 46。对于 AA 行，值为 NULL。对于任何一个月，每个 AA 行的值将始终为 NULL，因为在 AA 行的上方没有任何 Product 值。在月 Feb 的 AA 和 BB 行中评估第二个系列，对于 Customer 值 Astrida 以此类推。当为 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 |

示例 4:

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

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

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

示例表输出

| Customer | RangeAvg (Above(Sum(Sales),1,3)) |
| --- | --- |
| Astrida | - |
| Betacab | 587 |
| Canutility | 563 |
| 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`。

## 了解详情

* [Below](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/InterRecordFunctions/below.htm)
* [Bottom](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/InterRecordFunctions/bottom.htm)
* [Top](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/InterRecordFunctions/top.htm)
* [RangeAvg- 脚本和图表函数](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/ChartFunctions/RangeFunctions/rangeavg.htm)