Функции агрегирования
Семейство функций, известных как функции агрегирования, включает функции, которые обрабатывают несколько значений и возвращают один результат на группу. В данных функциях группирование определяется по измерению диаграммы или оператором group by в скрипте.
Функции агрегирования: Sum(), Count(), Min(), Max() и т .д.
Большинство функций агрегирования можно использовать как в скрипте загрузки данных, так и в выражениях диаграмм, но синтаксис имеет различия.
Использование функций агрегирования в скрипте загрузки данных
Функции агрегирования могут использоваться только внутри операторов LOAD и SELECT.
Использование функций агрегирования в выражениях диаграмм
Параметр функции агрегирования не должен содержать функции агрегирования, кроме внутреннего агрегирования, содержащего квалификатор TOTAL. Для получения более расширенных вложенных агрегирований необходимо использовать расширенную функцию Aggr вместе с заданным измерением.
Функция агрегирования агрегирует набор возможных записей, определенных выборкой. Однако альтернативное множество записей может быть определено выражением множества в анализе множеств.
Анализ множества и выражения множества
Как вычисляются агрегирования
Агрегирование циклически проходит по записям определенной таблицы, агрегируя их. Например, Count(<Field>) будет считать количество записей в таблице, в которой находится <Field>. Если необходимо агрегировать только уникальные значения поля, необходимо использовать предложение distinct, например Count(distinct <Field>).
Если функция агрегирования содержит поля из различных таблиц, она циклически выполнится для записей векторного произведения таблиц из составляющих полей. Это снижает производительность, и поэтому таких агрегирований нужно избегать, особенно при большом объеме данных.
Агрегирование ключевых полей
Способ вычисления агрегирований определяет, что нельзя агрегировать ключевые поля, потому что не ясно, какая таблица должна использоваться для агрегирования. Например, если поле <Key> связывает две таблицы, не ясно, вернет ли Count(<Key>) количество записей в первой или второй таблице.
Однако при использовании оператора distinct агрегирование определено и может быть вычислено для ключевого поля, связанного с двумя таблицами.
Если ключевое поле используется в функции агрегирования без оператора distinct, QlikView вернет число, которое может не иметь смысла. Решение — использовать оператор distinct или копию ключа — то есть копию, которая находится только в одной таблице.
Например, в следующих таблицах ProductID представляет собой ключ между таблицами.
Ключ ProductId между таблицами Products и Details

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