# ColumnNo — функция диаграммы

Функция ColumnNo() возвращает количество текущих столбцов в текущем сегменте строки сводной таблицы. Первый столбец имеет номер 1.

Синтаксис:

ColumnNo([total])

Аргументы

| Аргумент | Описание |
| --- | --- |
| TOTAL | Если таблица имеет одно измерение, или если в качестве аргумента используется префикс TOTAL, текущий сегмент столбца всегда равен всему столбцу.<br><br>[Определение объема агрегирования](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

Если сводная таблица имеет несколько горизонтальных измерений, текущий сегмент строки будет включать только столбцы с теми же значениями, что и текущий столбец во всех строках с измерениями, кроме строки с последним горизонтальным измерением в межполевом порядке сортировки. Межполевой порядок сортировки для горизонтальных измерений в сводных таблицах определяется просто по порядку измерений сверху вниз.

Примечание к информацииСортировка по значениям y на диаграммах или сортировка по столбцам выражений в таблицах не допускается, если в любом из выражений диаграммы используется эта функция диаграмм. Данные возможности сортировки автоматически отключаются. Когда используется эта функция диаграмм в визуализации или таблице, сортировка визуализации будет возвращена к сортировке на входе этой функции.

Пример. Выражение диаграммы

| Пример | Результат |
| --- | --- |
| ` IF( ColumnNo()=1, 0, Sum(Sales) / Before(Sum(Sales)))  ` | Если значение `ColumnNo` равно 1, диаграмма возвращает нулевое значение. В противном случае возвращается результат `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) | ЕСЛИ(НЕЧЕТ(СТОЛБЕЦ()); Сумма \* 1.05; Сумма \* 1.10) | Sum(Sales) | ЕСЛИ(НЕЧЕТ(СТОЛБЕЦ()); Сумма \* 1.05; Сумма \* 1.10) | Sum(Sales) | ЕСЛИ(НЕЧЕТ(СТОЛБЕЦ()); Сумма \* 1.05; Сумма \* 1.10) | Sum(Sales) | ЕСЛИ(НЕЧЕТ(СТОЛБЕЦ()); Сумма \* 1.05; Сумма \* 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 | 10 000 |

В этом примере показано, как использовать функцию `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` вычисляет сумму диапазона предоставленных значений. Она обрабатывает значения NULL, воспринимая их как ноль. В этом выражении `RangeSum` эффективно генерирует кумулятивный итог, суммируя все предыдущие значения `Sales`, извлеченные функцией `Before()`, а также продажи текущей ячейки.