# Top - 图表函数

Top() 用于评估表格中列段数据第一（顶部）行的表达式。要计算的行取决于 offset 值，如果存在，则默认计算顶行。对于除表格以外的图表，Top() 用于计算图表的等效垂直表中当前列的第一行的值。

语法：

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

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| expr | 表达式或字段包含要度量的数据。 |
| offset | 指定 n 的 offset 大于 1 后，将表达式评估向下移到顶行下面的 n 行。<br><br>指定负偏移量数值后，使 Top 函数效果类似于具有相应正偏移量数值的 Bottom 函数。 |
| count | 通过指定第三个参数 count 大于 1，函数将返回一连串 count 值，每个值对应当前列段数据的最后一个 count 行中的一行。 此时，可以将该函数用作任何特殊范围函数的参数。 [范围函数](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) |

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

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

限制：

* 递归调用将返回 NULL 值。

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

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `Top( Sum(Sales) )` | 返回表中列段的第一行（顶部）`Sales` 的值。 |

## 示例 - Top 基本原理

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

#### 图表表达式

概述

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Year`

  * `Sales`

加载脚本

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

结果

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

* `Year`

创建以下度量：

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

* `=Top(Sum(Sales))`，用于查找第一年的销售额值，即表中列的第一（顶部）行。

* `=Sum(Sales) - Top(Sum(Sales))`，用于计算当前行的 `Sales` 值与列的第一（顶部）行的值之间的差异。

* `=Sum(Sales)-Top(Sum(Sales), 3)`，用于计算当前行的销售额值与从上到下第三行的值之间的差异。

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

按升序对表格在维度 `Year` 上进行排序。

结果表

| Year | Sum(Sales) | Top(Sum(Sales)) | Sum(Sales) - Top(Sum(Sales)) | Sum(Sales)-Top(Sum(Sales), 3) | (Sales - Top(Sales)) / Top(Sales) |
| --- | --- | --- | --- | --- | --- |
| Totals | 7200 | 1000 | 6200 | 6000 | - |
| 2019 | 1000 | 1000 | 0 | -200 | 0.00% |
| 2020 | 1500 | 1000 | 500 | 300 | 50.00% |
| 2021 | 1200 | 1000 | 200 | 0 | 20.00% |
| 2022 | 1800 | 1000 | 800 | 600 | 80.00% |
| 2023 | 1700 | 1000 | 700 | 500 | 70.00% |

查看结果后，您可以将当前期间的 `Sales` 值与顶部（或第一）期间进行比较。

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

* `Sum(Sales)-Top(Sum(Sales), 3)` 度量返回当前行 `Sales` 的总和减去从顶部开始的第三期间的值。

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

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

执行以下操作：

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

* `Year`

创建以下度量：

* `=Sum(Sales)- Top(Sum(Sales))`，用于返回当前期间和顶部期间之间的销售差异。

显示 Top 函数结果的条形图

显示 Top 函数结果的条形图

显示 TopTop 函数结果的条形图 ![显示当前期间和顶部（或第一）期间之间销售额差异的条形图。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-top-example.png)

在条形图中使用 `Top` 函数，可以直观地比较当前期间销售额与顶部（或第一）期间销售额之间的差异。

## 示例 – Top 场景

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

#### 图表表达式

概述

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `OrderID`

  * `Product`

  * `SalesValue`

  * `OrderDate`

加载脚本

```
Example:
LOAD * INLINE [
OrderID, Product, SalesValue, OrderDate
1, "Product A", 500, '2023-01-10'
2, "Product B", 300, '2023-01-15'
3, "Product C", 450, '2023-02-01'
4, "Product D", 700, '2023-02-20'
5, "Product E", 350, '2023-03-05'
];
```

结果

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

* `Product`

创建以下度量：

* `=RangeAvg(Top(Sum(SalesValue),1,3))`，用于返回最上面三行的平均值。

* `=Sum(SalesValue) - RangeAvg (Top(Sum(SalesValue),1,3))`，用于计算当前行与最上面三行平均值之间的差异。

* `=Sum(SalesValue)`，用于计算当前行的总计 `SalesValue`。

结果表

| Product | RangeAvg(Top(Sum(SalesValue),1,3)) | Sum(SalesValue) - RangeAvg (Top(Sum(SalesValue),1,3)) | Sum(SalesValue) |
| --- | --- | --- | --- |
| Totals | 416.67 | 1883.33 | 2300 |
| 2019 | 416.67 | 83.33 | 500 |
| 2020 | 416.67 | --116.67 | 300 |
| 2021 | 416.67 | 33.33 | 450 |
| 2022 | 416.67 | 283.33 | 700 |
| 2023 | 416.67 | -66.67 | 350 |

结果显示了如何使用 `RangeSum` 和 `Top` 函数的组合来分析和比较销售额值。

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

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/top.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)`，计算销售额的总和。

* `=Top(Sum(Sales))`，用于显示顶部行 `Customer` 的销售额总和。

* `=Sum(Sales)+Top(Sum(Sales))`，用于将当前 `Customer` 的 `Sum(Sales)` 值与顶部行中的 `Customer` 相加。

* `=Sum(Sales)+Top(Sum(Sales), 3)`，用于将当前 `Customer` 的 `Sum(Sales)` 值与从顶部行起第三行的 `Customer` 的值相加。

结果表

| Customer | Sum(Sales) | Top(Sum(Sales)) | Sum(Sales)+Top(Sum(Sales)) | Sum(Sales)+Top(Sum(Sales), 3) |
| --- | --- | --- | --- | --- |
| Totals | 2566 | 587 | 3153 | 3249 |
| Astrida | 587 | 587 | 1174 | 1270 |
| Betacab | 539 | 587 | 1126 | 1222 |
| Canutilty | 683 | 587 | 1270 | 1366 |
| Divadip | 757 | 587 | 1344 | 1440 |

度量 `Top(Sum(Sales))` 返回所有行的 `587`，因为这是顶部行的值：`Astrida`。

对于度量 `Sum(Sales)+Top(Sum(Sales))`，行 `Betacab` 返回 `1126`，这是将 `Betacab` 和 `Astrida` 的 `Sum(Sales)` 值，和顶部行中 `Customer` 相加的结果。

对于度量 `Sum(Sales)+Top(Sum(Sales), 3)`，参数 `offset` 设置为 `3`。该表达式将当前行的 `Sum(Sales)` 值和从顶部开始的第三行 `Canutility` 相加。例如，客户`Divadip` 会返回`1440` 的值。这是 `Divadip` 的 `Sum(Sales)` 值和 `Canutility` 的 `SumSales` 相加的结果 (`757`+`683`)。

## 了解详情

* [Bottom - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/bottom.htm)
* [Above - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)
* [Sum - 图表函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/sum.htm)
* [RangeAvg 脚本和图表功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/rangeavg.htm)
* [范围函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm)