# Above - 图表函数

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

语法：

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

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| expr | 表达式或字段包含要度量的数据。 |
| offset | 指定 offsetn（大于 0）后，将表达式评估从当前行开始向上移动 n 行。<br><br>指定 0 偏移量可以计算当前行上的表达式的值。<br><br>指定负偏移量数值后，使 Above 函数效果类似于具有相应正偏移量数值的 Below 函数。 |
| count | 通过指定第三个参数 count 大于 1，函数将返回一连串 count 值，每个值对应一个从原始单元格开始向上计数的 count 表格行。<br><br>此时，可以将该函数用作任何特殊范围函数的参数。 [范围函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm) |
| TOTAL | 如果表格是单维度或如果将 TOTAL 限定符用作参数，则当前列段数据总是与整列相等。<br><br>[定义聚合范围](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

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

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

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

限制：

* 递归调用将返回 NULL 值。

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

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `Above( Sum(Sales) )` | 返回当前行上方一行的 `Sales` 值。 |

## 示例 - Above 基本原理

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `Year`

  * `Sales`

加载脚本

```
Example:
LOAD * INLINE [
Year, Sales
2019, 1000
2020, 1500
2021, 1200
2022, 1800
2023, 1700
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* `Year`

创建以下度量：

* `=Sum(Sales)`，用于查找年销售额。

* `=Above(Sum(Sales))`，用于查找上一年的销售额值。

* `=Sum(Sales) - Above(Sum(Sales))`，用于计算当前年度值与上一年度 `Sales` 值之间的差异。

* `=RangeSum(Above(Sales, 1, 2))`，用于展示前两年销售额的连续两年汇总。

* `=(Sales - Above(Sales)) / Above(Sales)`，用于以比率/百分比返回 `Sales` 的变化。 要将此值显示为百分比，可在数字格式设定下选择数字 &gt; 简单格式 &gt; 12.34%。

结果表

| Year | Sum(Sales) | Above(Sum(Sales)) | Sum(Sales) - Above(Sum(Sales)) | RangeSum(Above(Sales, 1, 2) | (Sales - Above(Sales)) / Above(Sales) |
| --- | --- | --- | --- | --- | --- |
| Totals | 7200 | - | - | 0 | - |
| 2019 | 1000 | - | - | 0 | - |
| 2020 | 1500 | 1000 | 500 | 1000 | 50.00% |
| 2021 | 1200 | 1500 | -300 | 2500 | -20.00% |
| 2022 | 1800 | 1200 | 600 | 2700 | 50.00% |
| 2023 | 1700 | 1800 | -100 | 3000 | -5.56% |

查看结果后，您可以将当前期间的 `Sales` 值与上一期间进行比较。

* `Sum(Sales)- Above(Sum(Sales))` 度量值返回 `Sales` 值中的变化，将当前期间与上一期间进行比较。

* `RangeSum(Above(Sales, 1, 2))` 度量返回前两个 `Sales` 值的总和。

* `(Sales - Above(Sales)) / Above(Sales)` 度量以百分比形式返回与上一期间相比 `Sales` 的变化。

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

执行以下操作：

创建条形图，然后将此字段添加为维度：

* `Year`

创建以下度量：

* `=Sum(Sales) - Above(Sum(Sales))`，返回同比差异。

显示 Above 函数结果的条形图

显示 Above 函数结果的条形图

显示 AboveAbove 函数结果的条形图 ![显示销售额总和同比差异的条形图](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-above-example.png)

在条形图中使用 `Above` 函数，可以直观地比较当前期间销售额与上一期间销售额之间的差异。

## 示例 – Above 场景

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `SalesYear`

  * `SalesAmount`

加载脚本

```
Example:
LOAD * INLINE [
SalesYear, SalesAmount
2019, 500
2020, 800
2021, 400
2022, 700
2023, 600
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* `SalesYear`

创建以下度量：

* `=Sum(SalesAmount)`，用于汇总销售额。

* `=RangeSum(Above(SalesAmount, 0, RowNo()))`，用于计算 `SalesAmount` 值的累计总和。

结果表

| SalesYear | Sum(SalesAmount) | RangeSum(Above(SalesAmount, 0, RowNo())) |
| --- | --- | --- |
| Totals | 3000 | 0 |
| 2019 | 500 | 500 |
| 2020 | 800 | 1300 |
| 2021 | 400 | 1700 |
| 2022 | 700 | 2400 |
| 2023 | 600 | 3000 |

结果显示了如何使用 `RangeSum` 函数和 `Above` 函数的组合来创建累计运行总数。

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

执行以下操作：

创建条形图，然后将此字段添加为维度：

* `SalesYear`

创建以下度量：

* `=RangeSum(Above(SalesAmount, 0, RowNo()))`，用于返回累计销售额。

按年显示累计销售额值的条形图

按年显示累计销售额值的条形图

按年显示累计销售额值的条形图 ![按销售额年份显示累计销售额值的条形图](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-above-example2.png)

## 示例 - 使用 Above 的图表表达式

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 两个数据表分别名为 `Monthnames` 和 `Sales2013`。

加载脚本

```
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* `Customer`

创建以下度量：

* `=Sum(Sales)`，计算销售额的总和。

* `=Above(Sum(Sales))`，显示上一行的销售额总和。

* `=Sum(Sales)+Above(Sum(Sales))`，用于将销售价值总和与当前行上方客户行的销售额总和相加。

* `=Sum(Sales)+Above(Sum(Sales), 3)`，用于将当前 `Customer` 的 `Sum(Sales)` 值与上方相距三行的 `Customer` 的值相加。

* `=IF(Sum(Sales)>Above(Sum(Sales)), 'Higher')`，用于为 `Sum(Sales)` 结果大于上方行中客户的 `Sum(Sales)` 的客户添加标签“`Higher`”。

结果表

| Customer | Sum(Sales) | Above(Sum(Sales)) | Sum(Sales)+Above(Sum(Sales)) | Sum(Sales)+Above(Sum(Sales), 3) | IF(Sum(Sales)&gt;Above(Sum(Sales)), 'Higher') |
| --- | --- | --- | --- | --- | --- |
| Totals | 2566 | - | - | - | - |
| Astrida | 587 | - | - | - | - |
| Betacab | 539 | 587 | 1126 | - | - |
| Canutility | 683 | 539 | 1222 | - | Higher |
| Divadip | 757 | 683 | 1440 | 1344 | Higher |

度量 `Above(Sum(Sales))` 返回客户 `Astrida` 的 NULL，因为它上方没有行。客户 `Betacab` 的结果显示 `Astrida` 的 `Sum(Sales)` 的值。`Canutility` 的结果显示 `Betacab` 的 `Sum(Sales)` 的值，以此类推。

对于度量 `Sum(Sales)+Above(Sum(Sales))`，`Betacab` 的行返回将行 `Betacab` + `Astrida` (`539+587`) 的 `Sum(Sales)` 值相加的结果。`Canutility` 行的结果将显示 `Canutility` + `Betacab` (`683+539`) 的 `Sum(Sales)` 值的相加结果。

度量 `Sum(Sales)+Above(Sum(Sales), 3)` 具有参数 `offset` ，设为 `3`。取当前行上方相距 3 行中的行的值。它将当前 `Customer` 的 `Sum(Sales)` 值添加到上方相距三行的 `Customer` 的值中。例如，将 `Divadip` 的`Sum(Sales)` 添加到 `Astrida` 的 `Sum(Sales)` 上，该客户在 `Divadip` 上方相距三行的位置。前 3 个 `Customer` 行返回的值为 null，因为没有数据。

度量 `IF(Sum(Sales)>Above(Sum(Sales)), 'Higher')` 为客户 `Canutility` 和 `Divadip` 返回值 `Higher`，因为他们的销售结果分别高于上方行 `Betacab` 和 `Canutility` 中客户的销售额总和。

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

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

## 示例 - 基于排序顺序的 Above 场景

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 三个数据表分别称为 Monthnames、Sales2013 和 Product。

加载脚本

```
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');

Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');
```

```

                                
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* Customer

* Product

* Month

创建以下度量：

* =Sum(Sales)，计算销售额的总和。

* =Above(Sum(Sales))，显示上一行的销售额总和。

结果表

| Customer | Product | Month | Sum(Sales) | Above(Sum(Sales)) |
| --- | --- | --- | --- | --- |
| Totals | - | - | 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 |
| Astrida | AA | Sep | 78 | 65 |
| Astrida | AA | Oct | 12 | 78 |
| Astrida | AA | Nov | 78 | 12 |
| Astrida | AA | Dec | 22 | 78 |
| Astrida | BB | Jan | 46 | - |
| Astrida | BB | Feb | 60 | 46 |

对于包含多个维度的图表，表达式（包含 Above、Below、Top 和 Bottom 函数）的结果取决于 Qlik Sense 对列维度进行排序的顺序。Qlik Sense 根据最后排序的维度得出的列段数据计数函数的值。可以在排序下的属性面板中控制列排序顺序，并且列不一定按顺序显示在表格中。

在结果表中，最后一个排序的维度是 Month，因此 Above 函数基于月份进行计算。每个月（Jan 到 Dec），即一个列段数据的每个 Product 值都有一系列结果。随后是下一个列段数据的一系列结果：下一个 Product 每个 Month 的结果。每个 Product 的每个 Customer 值都将有一个列段数据。

## 示例 - 使用不同排序顺序的 Above 场景

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 三个数据表分别称为 Monthnames、Sales2013 和 Product。

加载脚本

```
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');

Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* Customer

* Product

* Month

创建以下度量：

* =Sum(Sales)，计算销售额的总和。

* =Above(Sum(Sales))，显示上一行的销售额总和。

在属性面板中更改表的排序顺序。选择排序，然后将产品维度拖动到排序顺序中的第三个位置。

结果表

| Customer | Product | Month | Sum(Sales) | Above(Sum(Sales)) |
| --- | --- | --- | --- | --- |
| Totals | - | - | 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 |
| Astrida | AA | May | 78 | - |
| Astrida | BB | May | 78 | 78 |
| Astrida | AA | Jun | 20 | - |
| Astrida | BB | Jun | 20 | 20 |
| Astrida | AA | Jul | 45 | - |
| Astrida | BB | Jul | 45 | 45 |

在结果表中，最后一个排序维度是 Product 。每个 Product 都会评估 Above 函数，因为只有两个产品 AA 和 BB，并且每个系列只有一个非空结果。在月 Jan 的 BB 行中，Above(Sum(Sales)) 的值为 46。对于 AA 行，值为 NULL。对于任何一个月，每个 AA 行的值将始终为 NULL，因为在 AA 行的上方没有任何 Product 值。在月 Feb 的 AA 和 BB 行中评估第二个系列，对于 Customer 值 Astrida 以此类推。当为 Astrida 评估完所有月份后，为第二个客户 Betacab 重复此顺序，以此类推。

信息注释表中的结果只显示了部分数据表。要查看完整结果，请在应用程序中尝试示例。

## 示例 - 将 Above 函数结合 RangeAvg 使用

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)

#### 图表表达式

概述

Above 函数可用作范围函数的输入。本例在 RangeAvg 中使用了该函数。

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 三个数据表分别称为 Monthnames、Sales2013 和 Product。

加载脚本

```
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');

Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* Customer

创建以下度量：

* =RangeAvg (Above(Sum(Sales),1,3))

结果表\*

| Customer | RangeAvg (Above(Sum(Sales),1,3)) |
| --- | --- |
| Totals | - |
| Astrida | - |
| Betacab | 587 |
| Canutility | 563 |
| Divadip | 603 |

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

## 了解详情

* [Below - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/below.htm)
* [Bottom - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/bottom.htm)
* [Top - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/top.htm)
* [RangeAvg 脚本和图表功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/rangeavg.htm)