# Функции агрегирования

Семейство функций, известных как функции агрегирования, состоит из функций, для которых несколько значений поля являются вводимым значением и которые возвращают один результат на группу. В данных функциях группирование определяется измерением диаграммы или предложением group by в операторе скрипта.

В число функций агрегирования входят функции Sum(), Count(), Min(), Max() и многие другие.

Большинство функций агрегирования можно использовать как в скрипте загрузки данных, так и в выражениях диаграмм, но синтаксис имеет различия.

Ограничения:

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

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

* Внутри агрегирования у поля есть приоритет над переменной. Метки мер не являются релевантными в агрегированиях и не приоритизируются.

* Вне агрегирования у метки меры есть приоритет над переменной, у которой в свою очередь есть приоритет над полем.

* Кроме того, вне агрегирования меру можно использовать повторно путем ссылки на его метку, если метка по сути не является вычисляемой. В такой ситуации мера теряет часть значимости, чтобы сократить риск создания самоссылки, и в данном случае имя всегда будет интерпретироваться, во-первых, как метка меры, во-вторых, как имя поля и, в-третьих, как имя переменной.

## Использование функций агрегирования в скрипте загрузки данных

Функции агрегирования могут использоваться только внутри операторов LOAD и SELECT.

## Использование функций агрегирования в выражениях диаграмм

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

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

См.: [Анализ множеств](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)

## Как вычисляются агрегирования

Агрегирование циклически проходит по записям определенной таблицы, агрегируя их. Например, Count(&lt;Field&gt;) будет считать количество записей в таблице, в которой находится &lt;Field&gt;. Если необходимо агрегировать только уникальные значения поля, необходимо использовать предложение distinct, например Count(distinct &lt;Field&gt;).

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

## Агрегирование ключевых полей

Способ вычисления агрегирований определяет, что нельзя агрегировать ключевые поля, потому что не ясно, какая таблица должна использоваться для агрегирования. Например, если поле &lt;Key&gt; связывает две таблицы, не ясно, возвратит ли Count(&lt;Key&gt;) количество записей в первой или второй таблице.

Однако при использовании предложения distinct агрегирование четко определено и может быть вычислено для ключевого поля, связанного с двумя таблицами.

Если ключевое поле используется в функции агрегирования без предложения distinct, Qlik Sense вернет количество, которое может не иметь смысла. Решение — использовать предложение distinct или копию ключа — то есть копию, которая находится только в одной таблице.

Например, в следующих таблицах ProductId представляет собой ключ между таблицами.

Ключ ProductId между таблицами Products и Details

Ключ ProductId между таблицами Products и Details

Ключ ProductIdProductId между таблицами ProductsProducts и DetailsDetails ![Модель данных, в которой отображаются две таблицы, связанные ключевым полем 'ProductId'](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/ProductIdDetails.png)

Count(ProductId) может подсчитываться либо в таблице Products (которая содержит только по одной записи для каждого продукта — здесь ProductId является первичным ключом), либо в таблице Details (которая чаще всего содержит по несколько записей для каждого продукта). Если требуется подсчитать количество разных продуктов, следует использовать Count(distinct ProductId). Если требуется подсчитывать количество строк в конкретной таблице, не следует использовать ключ.

### Агрегирования ключевых полей, содержащихся в трех или более таблицах

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

СОПУТСТВУЮЩИЕ УЧЕБНЫЕ МАТЕРИАЛЫ:

* [Связывание таблиц и преобразование данных](https://help.qlik.com/lnk/Assoc_tables_transform_data_QS)

## Подробнее

* [Связывание таблиц и преобразование данных](https://help.qlik.com/lnk/Assoc_tables_transform_data_QS)