# Bottom

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

语法：

Bottom([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/May2024/Subsystems/Client/Content/QV_QlikView/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm)

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

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

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

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

限制：

* 递归调用将返回 NULL 值。

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

示例和结果：

示例 1:

示例表格输出

| Customer | Sum(Sales) | Bottom(Sum(Sales)) | Sum(Sales) + Bottom(Sum(Sales)) | Bottom offset 3 |
| --- | --- | --- | --- | --- |
| - | 2566 | 757 | 3323 | 3105 |
| Astrida | 587 | 757 | 1344 | 1126 |
| Betacab | 539 | 757 | 1296 | 1078 |
| Canutility | 683 | 757 | 1440 | 1222 |
| Divadip | 757 | 757 | 1514 | 1296 |

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

全部行的 Bottom(Sum(Sales)) 列均返回 757，因为此值是底行值：Divadip。

此表格还显示了更复杂的度量：根据 `Sum(Sales)+Bottom(Sum(Sales))` 创建的一个值以及标有 Bottom offset 3 的一个值，后者使用表达式 `Sum(Sales)+Bottom(Sum(Sales), 3)` 创建，且具有设置为 offset 的参数 3。它将当前行的 Sum(Sales) 值添加到从底行开始第三行中的值中，即，当前行加上 Betacab 的值。

示例 2:

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

在第一个表格中，基于 Month 评估表达式，在第二个表格中，基于 Product 评估表达式。度量 End value 包含表达式 `Bottom(Sum(Sales))`。Month 的底行是 Dec，表格中所示 Product 的 Dec 的值是 22。（有一些行未显示，但保留了空间。）

示例第一表格输出

| Customer | Product | Month | Sum(Sales) | End value |
| --- | --- | --- | --- | --- |
| - | - | - | **2566** | - |
| Astrida | AA | Jan | 46 | 22 |
| Astrida | AA | Feb | 60 | 22 |
| Astrida | AA | Mar | 70 | 22 |
| ... | ... | ... | ... | ... |
| Astrida | AA | Sep | 78 | 22 |
| Astrida | AA | Oct | 12 | 22 |
| Astrida | AA | Nov | 78 | 22 |
| Astrida | AA | Dec | 22 | 22 |
| Astrida | BB | Jan | 46 | 22 |

示例第二表格输出

| Customer | Product | Month | Sum(Sales) | End 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:

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

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

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

示例表格输出

| Customer | RangeAvg<br>(Bottom(Sum(Sales),1,3)) |
| --- | --- |
| Astrida | 659.67 |
| Betacab | 659.67 |
| Canutility | 659.67 |
| Divadip | 659.67 |

**示例中所使用的数据：**

`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`。

## 了解详情

* [Top](https://help.qlik.com/zh-CN/qlikview/May2024/Subsystems/Client/Content/QV_QlikView/ChartFunctions/InterRecordFunctions/top.htm)