# First - 图表函数

First() 用于返回使用透视表的维度值评估的表达式值，因为维度值显示在透视表的当前行段的第一列。在除透视表之外的所有图表类型中，此函数会返回 NULL。

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

语法：

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

参数

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

如果透视表有多个水平维度，则当前行片断将只包括值与所有维度行中当前列相同的列，除显示字段排序间上一次水平维度的行之外。透视表的水平维度的内部字段排序只需依据从上至下的维度顺序定义。

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `First( Sum(Sales ))` | 返回当前行段第一列 `Sales` 的总和。 |
| `First( Sum(Sales ), 2)` | 返回当前行段中第一列右侧两列 `Sales` 的总和。 |
| `First( Total Sum( Sales ))` | 返回当前行段第一列 `Sales` 的总计总和。 |
| `RangeAvg (First(Sum(x),1,5))` | 返回当前行段最左边五列内评估的 `sum(x)` 函数的结果的平均值。 |

## 示例 - First 基本原理

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

#### 图表表达式

概述

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Year`

  * `Quarter`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Year, Quarter, Sales
2023, Q1, 5000
2023, Q2, 4000
2023, Q3, 6000
2023, Q4, 7000
2024, Q1, 4500
2024, Q2, 3250
2024, Q3, 6500
2024, Q4, 7250
];
```

结果

加载数据并打开工作表。创建一个新的透视表，并将此字段添加为行维度：

* `Year`

将此字段添加为列维度：

* `Quarter`

创建以下度量：

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

* `=First(Sum(Sales))`，计算当前行段第一列的销售额总和。

结果表

| 年 | Q1 | Q2 | Q3 | Q4 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Sum(Sales) | First(Sum(Sales)) | Sum(Sales) | First(Sum(Sales)) | Sum(Sales) | First(Sum(Sales)) | Sum(Sales) | First(Sum(Sales)) |  |
| 2023 | 5000 | 5000 | 4000 | 5000 | 6000 | 5000 | 7000 | 5000 |
| 2024 | 4500 | 4500 | 3250 | 4500 | 6500 | 4500 | 7250 | 4500 |

查看结果，您可以看到 `First` 函数如何返回每个季度每个行段第一列的销售值之和。例如，在 `Q4` 中，该时段的 `Sum(Sales)` 值为 `7000`。`Q4` 的 `First(Sum(Sales)` 值是 `5000` ，也就是 `Q1` 中 `Sum(Sales)` 的值，当前行的第一列值 `2023` 。

## 示例 – First 场景

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

#### 图表表达式

概述

数据集包含三年内各种产品的年度销售数据。该公司希望提供本年度的总销售额以及自第一年以来的销售额增长情况。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Date`

  * `Product`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Date, Product, Sales
2021, Apple, 100
2021, Banana, 150
2021, Carrot, 120
2022, Carrot, 80
2022, Banana, 200
2022, Apple, 110
2023, Carrot, 160
2023, Banana, 300
2023, Apple, 150
];
```

结果

加载数据并打开工作表。创建一个新的透视表，并将此字段添加为行维度：

* ` Product
                                       `

将此字段添加为列维度：

* `Date`

创建以下度量：

* `=Sum(Sales)`，计算年销售额。

* `=(Sum(Sales) - First(Sales)) / First(Sales)`，计算自数据集中的第一年以来的销售额增长。 要将此值显示为百分比，可在数字格式设定下选择数字 &gt; 简单格式 &gt; 12.34%。

结果表

| 产品 | 2021 | 2022 | 2023 |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| Sum(Sales) | (Sum(Sales) - First(Sales)) / First(Sales) | Sum(Sales) | (Sum(Sales) - First(Sales)) / First(Sales) | Sum(Sales) | (Sum(Sales) - First(Sales)) / First(Sales) |  |
| Apple | 100 | 0.00% | 110 | 10.00% | 150 | 50.00% |
| Banana | 150 | 0.00% | 200 | 33.33% | 300 | 100.00% |
| Carrot | 120 | 0.00% | 80 | -33.33% | 160 | 33.33% |

结果显示了每年的年销售额以及与第一年销售额相比的年增长率。例如，`Apple` 的销售额从`2021` 中的初始值 `100` 增加到 `2023` 中 `150` 的值，即增加了 `50%`。`Carrot` 的销售额从 `2021` 中的 `120` 降至 `2022` 中的 `80` ，减少了 `33.33%`。

## 示例 - 第一场景是使用范围总和来呈现预算数字

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

#### 图表表达式

概述

数据集包含两年内按产品类别划分的季度预算数据。公司希望提交当前季度的预算和每年预算的流水式总计。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `BudgetYear`

  * `BudgetQuarter`

  * `QuarterNo`

  * `BudgetAmount`

  * `Category`

加载脚本

```
Example:
Load * inline [
BudgetYear, BudgetQuarter, QuarterNo, BudgetAmount, Category
2023, Q1, 1, 2100, Online
2023, Q2, 2, 2500, Online
2023, Q3, 3, 3100, Online
2023, Q4, 4, 4100, Online
2023, Q1, 1, 5100, Store
2023, Q2, 2, 5500, Store
2023, Q3, 3, 6100, Store
2023, Q4, 4, 7100, Store
2024, Q1, 1, 2300, Online
2024, Q2, 2, 2800, Online
2024, Q3, 3, 3300, Online
2024, Q4, 4, 4400, Online
2024, Q1, 1, 5300, Store
2024, Q2, 2, 5800, Store
2024, Q3, 3, 6300, Store
2024, Q4, 4, 7400, Store
];
```

结果

加载数据并打开工作表。创建一个新的透视表，并将这些字段添加为行维度：

* ` BudgetYear
                                       `

* `Category`

将此字段添加为列维度：

* `BudgetQuarter`

创建以下度量：

* `=Sum(BudgetAmount)`，计算预算销售额。

* `=RangeSum(First(Sum(BudgetAmount), 1, QuarterNo))`，通过将第一季度到为每个季度计算的 `QuarterNo` 相加，计算每个季度的预算销售额的流水式总计。

结果表

| BudgetYear<br><br>Category | Q1 | Q2 | Q3 | Q4 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Sum(BudgetAmount) | RangeSum(First(Sum(BudgetAmount), 1, QuarterNo)) | Sum(BudgetAmount) | RangeSum(First(Sum(BudgetAmount), 1, QuarterNo)) | Sum(BudgetAmount) | RangeSum(First(Sum(BudgetAmount), 1, QuarterNo)) | Sum(BudgetAmount) | RangeSum(First(Sum(BudgetAmount), 1, QuarterNo)) |  |
| (-) 2023 | 7200 | 7200 | 8000 | 15200 | 9200 | 24400 | 11200 | 35600 |
| Online | 2100 | 2100 | 2500 | 4600 | 3100 | 7700 | 4100 | 11800 |
| Store | 5100 | 5100 | 5500 | 10600 | 6100 | 16700 | 7100 | 23800 |
| (-) 2024 | 7600 | 7600 | 8600 | 16200 | 9600 | 25800 | 11800 | 37600 |
| Online | 2300 | 2300 | 2800 | 5100 | 3300 | 8400 | 4400 | 12800 |
| Store | 5300 | 5300 | 5800 | 11100 | 6300 | 17400 | 7400 | 24800 |

结果显示了每个 `Year` 和 `Category` 的预算数字，以及按 `Quarter` 开列的流水总额。例如，在 `2023`、`QuarterNo` 的 `Q2` 中， 就是 `2`。因此，函数表达式的求值结果是 `RangeSum(First(Sum(BudgetAmount), 1, 2))` ，将 `Q1` (`7200`) 和 `Q2` (`8000`) 的 `BudgetAmount` 列相加，然后返回值 `15200` 。结果将返回 `Q1` 和 `Q2` 的 `Sum(BudgetAmount)` 列的总计。在 `2024` 中，对于 `Category Online` ，`Q1` 的 `Sum(BudgetAmount)` 为 `2300`，对于 `Q2` 为 `2800` 。因此，`RangeSum` 表达式返回 `5100`。