Перейти к основному содержимому

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

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

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

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

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

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

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

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

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

См.: Анализ множеств и выражения множеств

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

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

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

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

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

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

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

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

Ключ ProductID между таблицами Products (Продукты) и Details (Сведения)

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