# Crosstable

Префикс загрузки crosstable используется для транспонирования структурированных данных «перекрестной таблицы» или «сводной таблицы». Данные, структурированные этим образом, обычно встречаются при работе с такими источниками, как электронные таблицы. Результатом и целью префикса загрузки crosstable является транспонирование таких структур в эквивалент обычной столбцовой таблицы, поскольку эта структура обычно лучше подходит для анализа в Qlik Sense.

Пример данных, структурированных как перекрестная таблица, и эквивалентная структура после преобразования перекрестной таблицы

Пример данных, структурированных как перекрестная таблица, и эквивалентная структура после преобразования перекрестной таблицы

Пример данных, структурированных как перекрестная таблица, и эквивалентная структура после преобразования перекрестной таблицы ![Пример, демонстрирующий перекрестную таблицу слева.](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-crosstable-overview.png)

Синтаксис:

crosstable (attribute field name, data field name [ , n ] ) ( loadstatement | selectstatement )

Аргументы

| Аргумент | Описание |
| --- | --- |
| attribute field name | Желаемое имя выходного поля, описывающее горизонтально ориентированное измерение, которое необходимо преобразовать (строка заголовка). |
| data field name | Желаемое имя выходного поля, описывающее горизонтально ориентированные данные измерения, которое необходимо преобразовать (матрица значений данных под строкой заголовка). |
| n | Число полей-классификаторов, или неизмененных измерений, перед таблицей, которые следует преобразовать в общий формат. Значение по умолчанию — 1. |

Эта функция скрипта связана со следующими функциями:

Связанные функции

| Функция | Взаимодействие |
| --- | --- |
| [Generic](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm) | Префикс загрузки преобразования, который принимает структурированный набор данных «объект-атрибут-значение» и преобразует его в обычную структуру реляционной таблицы, распределяя каждый встречающийся атрибут в новое поле или столбец данных. |

## Пример 1. Преобразование сводных данных о продажах (простое)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)

#### Скрипты загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте первый приведенный ниже скрипт загрузки на новую вкладку.

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

Второй скрипт загрузки такой же, как и первый, но с применением раскомментированного `crosstable` (для этого удаляется синтаксис комментария). Скрипты показаны таким образом, чтобы подчеркнуть пользу этой функции скрипта при преобразовании данных.

Первый скрипт загрузки (функция не применяется)

```
tmpData:
//Crosstable (MonthText, Sales)
Load * inline [
Product, Jan 2021, Feb 2021, Mar 2021, Apr 2021, May 2021, Jun 2021
A, 100, 98, 103, 63, 108, 82
B, 284, 279, 297, 305, 294, 292
C, 50, 53, 50, 54, 49, 51];
 
//Final:
//Load Product,
//Date(Date#(MonthText,'MMM YYYY'),'MMM YYYY') as Month,
//Sales

//Resident tmpData;

//Drop Table tmpData;
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `Product`

* `Jan 2021`

* `Feb 2021`

* `Mar 2021`

* `Apr 2021`

* `May 2021`

* `Jun 2021`

Результирующая таблица

| Продукт | Январь 2021 г. | Февраль 2021 г. | Март 2021 г. | Апрель 2021 г. | Май 2021 г. | Июнь 2021 г. |
| --- | --- | --- | --- | --- | --- | --- |
| A | 100 | 98 | 103 | 63 | 108 | 82 |
| B | 284 | 279 | 297 | 305 | 294 | 292 |
| C | 50 | 53 | 50 | 54 | 49 | 51 |

Этот скрипт позволяет создать перекрестную таблицу с одним столбцом для каждого месяца и с одной строкой для каждого продукта. Текущий формат усложняет анализ данных. Будет намного лучше, если все числа будут в одном поле, а все месяцы в другом — в таблице с тремя столбцами. В следующем разделе объясняется, как выполнить это преобразование перекрестной таблицы.

Второй скрипт загрузки (функция применяется)

Раскомментируйте скрипт, удалив `//`. Скрипт загрузки будет выглядеть так:

```
tmpData:
Crosstable (MonthText, Sales)
Load * inline [
Product, Jan 2021, Feb 2021, Mar 2021, Apr 2021, May 2021, Jun 2021
A, 100, 98, 103, 63, 108, 82
B, 284, 279, 297, 305, 294, 292
C, 50, 53, 50, 54, 49, 51];
 
Final:
Load Product,
Date(Date#(MonthText,'MMM YYYY'),'MMM YYYY') as Month,
Sales

Resident tmpData;

Drop Table tmpData;
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `Product`

* `Month`

* `Sales`

Результирующая таблица

| Продукт | Месяц | Продажи |
| --- | --- | --- |
| A | Jan 2021 | 100 |
| A | Feb 2021 | 98 |
| A | Mar 2021 | 103 |
| A | Apr 2021 | 63 |
| A | May 2021 | 108 |
| A | Jun 2021 | 82 |
| B | Jan 2021 | 284 |
| B | Feb 2021 | 279 |
| B | Mar 2021 | 297 |
| B | Apr 2021 | 305 |
| B | May 2021 | 294 |
| B | Jun 2021 | 292 |
| C | Jan 2021 | 50 |
| C | Feb 2021 | 53 |
| C | Mar 2021 | 50 |
| C | Apr 2021 | 54 |
| C | May 2021 | 49 |
| C | Jun 2021 | 51 |

После применения префикса скрипта перекрестная таблица трансформируется в прямую таблицу, в которой один столбец будет для `Month`, а другой для `Sales`. Это улучшает восприятие данных.

## Пример 2. Преобразование сводных данных о целевых объемах продаж в вертикальную структуру таблицы (промежуточный вариант)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу под именем Targets.

* Префикс загрузки `crosstable`, который переносит сводные данные об именах продавцов в отдельное поле с именем `Sales Person`.

* Связанные данные о целевых объемах продаж, сгруппированные в поле с именем `Target`.

Скрипт загрузки

```
SalesTargets:
CROSSTABLE([Sales Person],Target,1)
LOAD
*
INLINE [
Area, Lisa, James, Sharon
APAC, 1500, 1750, 1850
EMEA, 1350, 950, 2050
NA, 1800, 1200, 1350
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `Area`

* `Sales Person`

Добавьте эту меру:

`=Sum(Target)`

Результирующая таблица

| Область | Менеджер по продажам | =Сумм(Цель) |
| --- | --- | --- |
| АТЭС | Джеймс | 1750 |
| АТР | Лиза | 1500 |
| АТР | Шарон | 1850 |
| ЕМЕА | Джеймс | 950 |
| ЕБВА | Лиза | 1350 |
| ЕБВА | Шэрон | 2050 |
| Н/П | Джеймс | 1200 |
| Н/П | Лиза | 1800 |
| Н/П | Шарон | 1350 |

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

Выполните следующие действия.

1. Скопируйте и вставьте только что созданную таблицу на лист.
2. Перетащите объект диаграммы Сводная таблица над только что созданной копией таблицы. Выберите Преобразовать.
3. Щелкните the Изменение завершено icon.
4. Перетащите поле `Sales Person` с полки вертикального столбца на полку горизонтального столбца.

В следующей таблице показаны данные в форме исходной таблицы, как они отображаются в Qlik Sense:

Исходная таблица результатов, как показано в Qlik SenseQlik Sense

| Область | Менеджер по продажам | =Сумм(Цель) |
| --- | --- | --- |
| Итоги | - | 13800 |
| АТЭС | Джеймс | 1750 |
| АТР | Лиза | 1500 |
| АТР | Шарон | 1850 |
| ЕМЕА | Джеймс | 950 |
| ЕБВА | Лиза | 1350 |
| ЕБВА | Шэрон | 2050 |
| Н/П | Джеймс | 1200 |
| Н/П | Лиза | 1800 |
| Н/П | Шарон | 1350 |

Эквивалентная сводная таблица выглядит примерно так, как показано ниже: столбцы для имени каждого продавца включены в более крупную строку для `Sales Person`:

Эквивалентная сводная таблица с горизонтальной ориентацией поля `Sales Person`Sales Person

| Область | Джеймс | Лиза | Шарон |
| --- | --- | --- | --- |
| АПАК | 1750 | 1500 | 1850 |
| ЕМЕА | 950 | 1350 | 2050 |
| Северная Америка | 1350 | 1350 | 1350 |

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля `Sales Person`

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля `Sales Person`

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля `Sales Person`Sales Person ![Пример преобразования данных с помощью функции перекрестной таблицы.](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-crosstable-example-pivot-table-comp.png)

## Пример 3. Преобразование сводных данных о целевых объемах продаж в вертикальную структуру таблицы (расширенный вариант)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

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

* Префикс загрузки crosstable. Он используется для переноса измерения Month Year из сводной области в специальное поле, а также для переноса матрицы продаж и целевых сумм в специальное поле с именем Amount.

* Преобразование поля Month Year из текста в правильную дату с использованием функции преобразования текста в дату date#. Это поле Month Year, преобразованное в дату, снова присоединяется к таблице SalesAndTarget с помощью префикса загрузки Join.

Скрипт загрузки

```
SalesAndTargets:
CROSSTABLE(MonthYearAsText,Amount,2)
LOAD
	*
INLINE [
Area	Type	Jan-22	Feb-22	Mar-22	Apr-22	May-22	Jun-22	Jul-22	Aug-22	Sep-22	Oct-22	Nov-22	Dec-22
APAC	Target	425	425	425	425	425	425	425	425	425	425	425	425
APAC	Actual	435	434	397	404	458	447	413	458	385	421	448	397
EMEA	Target	362.5	362.5	362.5	362.5	362.5	362.5	362.5	362.5	362.5	362.5	362.5	362.5
EMEA	Actual	363.5	359.5	337.5	361.5	341.5	337.5	379.5	352.5	327.5	337.5	360.5	334.5
NA	Target	375	375	375	375	375	375	375	375	375	375	375	375
NA	Actual	378	415	363	356	403	343	401	365	393	340	360	405
] (delimiter is '\t');

tmp:
LOAD DISTINCT MonthYearAsText,date#(MonthYearAsText,'MMM-YY') AS [Month Year]
RESIDENT SalesAndTargets;

JOIN (SalesAndTargets)
LOAD * RESIDENT tmp;

DROP TABLE tmp;
DROP FIELD MonthYearAsText;
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* Area

* Month Year

Создайте следующую меру с меткой Actual:

=Sum({&lt;Type={'Actual'}&gt;} Amount)

Также создайте эту меру с меткой Target:

=Sum({&lt;Type={'Target'}&gt;} Amount)

Таблица результатов (обрезанная)

| Область | Месяц года | Факт | Цель |
| --- | --- | --- | --- |
| АТР | Янв-22 | 435 | 425 |
| АТР | Фев 22 | 434 | 425 |
| АТР | Мар 22 | 397 | 425 |
| АТР | Апр 22 | 404 | 425 |
| АТЭС | Май-22 | 458 | 425 |
| АТЭС | Июн 22 | 447 | 425 |
| АТР | Июл 22 | 413 | 425 |
| АТР | Авг-22 | 458 | 425 |
| АТР | Сен 22 | 385 | 425 |
| АТР | Окт 22 | 421 | 425 |
| АТР | Ноя-22 | 448 | 425 |
| АТР | Дек-22 | 397 | 425 |
| ЕБВА | Янв-22 | 363.5 | 362,5 |
| ЕБВА | Фев 22 | 359,5 | 362,5 |

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

Выполните следующие действия.

1. Скопируйте и вставьте только что созданную таблицу на лист.
2. Перетащите объект диаграммы Сводная таблица над только что созданной копией таблицы. Выберите Преобразовать.
3. Щелкните the Изменение завершено icon .
4. Перетащите поле Month Year с полки вертикального столбца на полку горизонтального столбца.
5. Перетащите поле Values с полки горизонтального столбца на полку вертикального столбца.

В следующей таблице показаны данные в форме исходной таблицы, как они отображаются в Qlik Sense:

Исходная таблица результатов (обрезанная), как показано в Qlik SenseQlik Sense

| Область | Месяц года | Факт | Цель |
| --- | --- | --- | --- |
| Итоги | - | 13812 | 13950 |
| АТР | Янв-22 | 435 | 425 |
| АТР | Фев 22 | 434 | 425 |
| АТР | Мар 22 | 397 | 425 |
| АТР | Апр 22 | 404 | 425 |
| АТЭС | Май-22 | 458 | 425 |
| АТЭС | Июн 22 | 447 | 425 |
| АТР | Июл 22 | 413 | 425 |
| АТР | Авг-22 | 458 | 425 |
| АТР | Сен 22 | 385 | 425 |
| АТР | Окт 22 | 421 | 425 |
| АТР | Ноя-22 | 448 | 425 |
| АТР | Дек-22 | 397 | 425 |
| ЕБВА | Янв-22 | 363.5 | 362,5 |
| ЕБВА | Фев 22 | 359,5 | 362,5 |

Эквивалентная сводная таблица выглядит примерно так, как показано ниже: столбцы для каждого месяца включены в более крупную строку для Month Year:

Эквивалентная сводная таблица (обрезанная) с горизонтальной ориентацией поля Month YearMonth Year

| Область (значения) | Янв-22 | Фев-22 | Мар-22 | Апр-22 | Май-22 | Июн-22 | Июл 22 | Авг 22 | Сен 22 | Окт-22 | Ноя-22 | Дек-22 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| APAC ― факт | 435 | 434 | 397 | 404 | 458 | 447 | 413 | 458 | 385 | 421 | 448 | 397 |
| APAC ― цель | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 |
| EMEA ―факт | 363.5 | 359,5 | 337.5 | 361.5 | 341.5 | 337.5 | 379.5 | 352.5 | 327.5 | 337.5 | 360.5 | 334.5 |
| EMEA ― цель | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 | 362,5 |
| NA ― факт | 378 | 415 | 363 | 356 | 403 | 343 | 401 | 365 | 393 | 340 | 360 | 405 |
| NA ― цель | 375 | 375 | 375 | 375 | 375 | 375 | 375 | 375 | 375 | 375 | 375 | 375 |

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля Month Year

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля Month Year

Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля Month YearMonth Year ![Пример данных, отображаемых в виде таблицы, и эквивалентная сводная таблица с горизонтальной ориентацией поля Month Year. ](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-crosstable-advanced-example-pivot-table-comp2.png)

## Подробнее

* [Работа с перекрестными таблицами в скрипте загрузки данных](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/work-with-cross-tables.htm)
* [Generic](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm)
* [Load](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/ru-RU/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)