Aggr
Функция Aggr() возвращает диапазон значений выражения, вычисленный по указанному измерению или измерениям. Например, максимальное значение продаж по каждому клиенту, по региону.
Функция Aggr используется для вложенных агрегирований, в которых первый параметр (внутреннее агрегирование) вычисляется один раз для каждого значения измерения. Измерения задаются во втором (и последующих) параметрах.
Кроме того, функция Aggr должна быть заключена во внешнюю функцию агрегирования, которая использует массив результатов функции Aggr в качестве входных данных во вложенное агрегирование.
Синтаксис:
Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})
Возвращаемые типы данных: двойное значение
Аргументы:
- expr: Выражение, состоящее из функции агрегирования. По умолчанию функция агрегирования агрегирует множество возможных записей, определенных выборкой.
-
StructuredParameter: StructuredParameter включает в себя измерение и, дополнительно, критерий сортировки в формате: (Dimension(Sort-type, Ordering)) Данное измерение представляет собой одиночное поле, оно не может быть выражением. Данное измерение используется для определения диапазона значений, для которого рассчитывается выражение Aggr.
Если критерии сортировки включены, будет вычислен диапазон значений, созданный функцией Aggr, вычисляемых для измерения. Это важно, когда порядок сортировки влияет на результат выражения, в котором заключена функция Aggr. Сведения о порядке использования критериев сортировки см. в Добавление критериев сортировки в измерение в структурированном параметре.
- SetExpression: По умолчанию функция агрегирования агрегирует множество возможных записей, определенных выборкой. Альтернативный набор записей может быть определен набором выражений анализа.
- DISTINCT: Если перед аргументом выражения стоит классификатор distinct, или его вообще нет, то каждая комбинация значений измерений будет создавать только одно возвращаемое значение. Это обычный способ создания агрегирований — каждая комбинация значений измерений будет обозначаться одной линией на диаграмме.
- NODISTINCT: Если перед аргументом выражения стоит классификатор nodistinct, то каждая комбинация значений измерений может создавать несколько возвращаемых значений в зависимости от базовой структуры данных. Если измерение только одно, функция aggr вернет массив с тем же количеством элементов, что и строк в исходных данных.
Базовые функции агрегирования, такие как Sum, Min и Avg, возвращают одно числовое значение, тогда как функцию Aggr() можно сравнить с созданием временного промежуточного результата (виртуальной таблицы), на основании которого выполняется другое агрегирование. Например, при вычислении среднего значения продаж посредством суммирования продаж по клиентам в операторе Aggr() и последующего вычисления среднего значения на основании результатов суммирования: Avg(TOTAL Aggr(Sum(Sales), Customer)).
Ограничения:
Каждое измерение в функции Aggr() может быть одиночным полем и не может быть выражением (вычисляемое измерение).
Добавление критериев сортировки в измерение в структурированном параметре
В начальной форме аргумент StructuredParameter в синтаксисе функции Aggr представляет собой отдельное измерение. Выражение: Aggr(Sum(Sales, Month)) дает общее значение продаж для каждого месяца. Однако при заключении в другую функцию агрегирования возможно получение непредвиденных результатов, если не будут использованы критерии сортировки. Причина заключается в том, что сортировка некоторых измерений может быть выполнена по числовому выражению или по алфавиту и т. д.
В аргументе StructuredParameter функции Aggr можно указать критерии сортировки для измерения в выражении. При этом применяется порядок сортировки для виртуальной таблицы, созданной функцией Aggr.
Аргумент StructuredParameter имеет следующий синтаксис:
(FieldName, (Sort-type, Ordering))
Структурированные параметры могут быть вложены:
(FieldName, (FieldName2, (Sort-type, Ordering)))
Тип сортировки может быть следующим: NUMERIC, TEXT, FREQUENCY или LOAD_ORDER.
Типы упорядочения, связанные с каждым типом сортировки, являются следующими:
Тип сортировки | Доступные типы упорядочивания |
---|---|
NUMERIC | ASCENDING, DESCENDING или REVERSE |
TEXT | ASCENDING, A2Z, DESCENDING, REVERSE или Z2A |
FREQUENCY | DESCENDING, REVERSE или ASCENDING |
LOAD_ORDER | ASCENDING, ORIGINAL, DESCENDING или REVERSE |
Типы упорядочений REVERSE и DESCENDING эквивалентны.
Для типа сортировки TEXT эквивалентны типы упорядочения ASCENDING и A2Z, а также типы упорядочения DESCENDING, REVERSE и Z2A.
Для типа сортировки LOAD_ORDER эквивалентны типы упорядочения ASCENDING и ORIGINAL.
Примеры
Пример 1:
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))
Выражение Aggr(Sum(UnitSales*UnitPrice), Customer) дает общее значение продаж по элементу Customer и возвращает диапазон значений: 295, 715 и 120 для трех значений Customer.
Фактически, мы создали временный список значений без необходимости создания явной таблицы или столбца с этими значениями. Данные значения используются в качестве вводных для функции Avg(), после чего вычисляется среднее значение продаж, равное 376,6667. (Необходимо выбрать значение Итоги для параметра Presentation на панели свойств.
Пример 2:
Aggr(NODISTINCT Max(UnitPrice), Customer)
Диапазон значений: 16, 16, 16, 25, 25, 25, 19 и 19. Классификатор nodistinct означает, что в диапазоне содержится один элемент для каждой строки в исходных данных: каждый является максимально допустимым UnitPrice для каждого Customer и Product.
Пример 3:
max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
При использовании критериев сортировки в аргументе StructuredParameter в выражении: max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
Без критериев сортировки результат выражения max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear))) зависит от порядка сортировки измерения MonthYear. Возможно, желаемый результат не будет получен. С помощью добавления в измерение значений типа сортировки и типа упорядочения мы задаем критерии сортировки для структурированного параметра: (MonthYear, (NUMERIC, ASCENDING)), где тип сортировки NUMERIC и тип упорядочения ASCENDING указывают на сортировку MonthYear в числовом порядке по возрастанию.
Здесь мы стараемся определить максимальное возрастание количества клиентов из месяца в месяц. Данный метод подходит для использования в визуализации ключевого показателя эффективности.
В части Aggr выражения общее количество клиентов в месяц (заданное MonthYear) сравнивается с общим количеством предыдущего месяца. Так как мы используем критерии сортировки с измерением: (MonthYear,(NUMERIC, ASCENDING)), мы уверены, что Aggr сравнивает количества клиентов в последовательных месяцах в виртуальной таблице путем упорядочивания месяцев в возрастающей цифровой последовательности, а не в возрастающем алфавитном порядке.
Данные, используемые в примерах:
Создайте таблицу с элементами Customer, Product, UnitPrice и UnitSales в качестве измерений. Добавьте выражение в таблицу в качестве меры.
ProductData:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD|25|25
Canutility|AA|8|15
Canutility|CC||19
] (delimiter is '|');