# ColumnNo - 图表函数

ColumnNo() 用于返回透视表的当前行段中的当前列数。第一列是数字 1。

语法：

ColumnNo([total])

参数

| 参数 | 描述 |
| --- | --- |
| TOTAL | 如果表格是单维度或如果将 TOTAL 限定符用作参数，则当前列段数据总是与整列相等。<br><br>[定义聚合范围](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

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

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

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| ` IF( ColumnNo()=1, 0, Sum(Sales) / Before(Sum(Sales)))  ` | 当 `ColumnNo` 等于 1 时，图表将返回 0。否则，它将返回 `Sum(Sales) / Before(Sum(Sales)` 的结果。在这个例子中，图表将从第 2 列开始返回值，而第 1 列将返回零。 |

## 示例 - ColumnNo 基本原理

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

#### 图表表达式

概述

数据集包含季度销售数据。此示例将每个期间的销售值乘以该期间的列号。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Period`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Period, Sales
Q1, 1000
Q2, 2000
Q3, 3000
Q4, 4000
];
```

结果

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

* `Period`

创建以下度量：

* `=Sum(Sales) * ColumnNo()`，计算销售额值之和乘以列号，在本例中为季度。

结果表

| Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- |
| 1000 | 4000 | 9000 | 16000 |

每个季度的销售值之和乘以 `ColumnNo` 函数的输出。例如，`Q4` 中的销售额值为 4000，而 `ColumnNo` 函数的输出返回 `4` ，因为 `Q4` 是第四列。因此，度量表达式将 `4000` 乘以`4` ，并返回 `16000` 。

## 示例 – ColumnNo 场景

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

#### 图表表达式

概述

数据集包含季度销售数据。一家公司希望将 Q1 和 Q3（奇数列）的销售额数据增加 5%，并将其余列（Q2 和 Q4）的销售额增加 10%。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Period`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Period, Sales
Q1, 1000
Q2, 2000
Q3, 3000
Q4, 4000
];
```

结果

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

* `Period`

创建以下度量：

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

* `=If(Odd(ColumnNo()), Amount * 1.05, Amount * 1.10)`，将奇数列的销售额增加 5%，其余列增加 10%。

结果表

| Q1 | Q2 | Q3 | Q4 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Sum(Sales) | If(Odd(ColumnNo()), Amount \* 1.05, Amount \* 1.10) | Sum(Sales) | If(Odd(ColumnNo()), Amount \* 1.05, Amount \* 1.10) | Sum(Sales) | If(Odd(ColumnNo()), Amount \* 1.05, Amount \* 1.10) | Sum(Sales) | If(Odd(ColumnNo()), Amount \* 1.05, Amount \* 1.10) |
| 1000 | 1050 | 2000 | 2200 | 3000 | 3150 | 4000 | 4400 |

结果显示，奇数列 1 和 3（`Q1` 和`Q3`）的销售额增长了 5%，而其余偶数列 2 和 4（`Q2` 和`Q4`）的销售额增长了 10%。

## 示例 – ColumnNo 进阶场景

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

#### 图表表达式

概述

此示例使用与前一个场景相同的数据集来显示每个期间中值的累积总和。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Period`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Period, Sales
Q1, 1000
Q2, 2000
Q3, 3000
Q4, 4000
];
```

结果

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

* `Period`

创建以下度量：

* `=RangeSum(Before(Sum(Sales), 0, ColumnNo()))`，计算累计总数。

结果表

| Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- |
| 1000 | 3000 | 6000 | 10000 |

本例演示了如何使用 `ColumnNo` 函数生成运行总数。下面的解释提供了有关度量表达式 `RangeSum(Before(Sum(Sales), 0, ColumnNo()))` 的更多细节。

`Sum(Sales)`：计算透视表中当前单元格的销售额总和。

`Before(Sum(Sales), 0, ColumnNo())`：`Before` 函数从透视表中的前几列获取值。

* `Sum(Sales)` 参数确保函数检索前面单元格的求和 `Sales` 值。

* `0` 的偏移值指定列的偏移量（当前列的当前行段的剩余部分）。

* `ColumnNo()` 决定检索数据时要回溯多少列。它动态表示当前列的位置（例如，对于第 3 列，`ColumnNo()` 等于 `3` ，因此函数会回溯三列）。

`RangeSum()`：`RangeSum` 函数计算所提供数值范围的总和。在处理空值时，它将空值视为零。在这个表达式中，`RangeSum` 通过将 `Before()` 函数检索到的所有前置 `Sales` 值以及当前单元格的销售额相加，有效地生成了一个累积总数。