Aggr — функция диаграммы

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

Syntax:  

Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})

Return data type: двойное значение

Arguments:  

Аргумент Описание
expr

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

StructuredParameter

StructuredParameter представляет собой измерение, к которому в некоторых случаях добавляется критерий сортировки следующего формата: (Измерение (тип сортировки, упорядочивание))

Измерение представляет собой одиночное поле, оно не может быть выражением. Измерение предназначено для определения диапазона значений, для которых вычисляется выражение Aggr.

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

Сведения о порядке использования критериев сортировки см. в разделе Добавление критериев сортировки к измерению в составе структурированного параметра.

SetExpression По умолчанию функция агрегирования агрегирует множество возможных записей, определенных выборкой. Альтернативный набор записей может быть определен выражением анализа множества.
DISTINCT

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

NODISTINCT

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

Базовые функции агрегирования, такие как Sum, Min и Avg, возвращают отдельное числовое значение, тогда как функцию Aggr() можно сравнить с созданием временного промежуточного набора результатов (виртуальной таблицы), с помощью которого можно провести другое агрегирование. Например, при вычислении среднего значения объема продаж путем сложения сумм продаж по клиентам в операторе Aggr() и затем вычисления среднего значения по суммированным результатам: Avg(TOTAL Aggr(Sum(Sales),Customer)).

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

Limitations:  

Каждое измерение функции 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 являются эквивалентными.

Examples and results:  

Пример Результат
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))

Выражение Aggr(Sum(UnitSales*UnitPrice), Customer) вычисляет общее значение продаж для значения Customer и возвращает несколько значений: 295, 715 и 120 для трех значений Customer.

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

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

Aggr(NODISTINCT Max(UnitPrice), Customer)

Диапазон значений: 16, 16, 16, 25, 25, 25, 19 и 19. Классификатор nodistinct означает, что диапазон содержит по одному элементу для каждой строки в данных источника: каждый является максимальным значением UnitPrice для каждого элемента Customer и Product.

Данные, используемые в примерах:

Создайте таблицу с элементами 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 '|');

 

Examples and results: Структурированные параметры

Пример Результат
Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

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

В случае отсутствия критериев сортировки результат выражения Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) )) зависит от порядка сортировки измерений Year и Month. Полученный результат может быть неудовлетворительным.

За счет добавления к измерению значений типа сортировки и типа упорядочивания к структурированному параметру добавляется критерий сортировки: (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)). Тип сортировки NUMERIC и тип упорядочивания ASCENDING указывают на сортировку Year и Month в числовом порядке по возрастанию.

Данные, используемые в примерах:

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

Set vNumberOfOrders = 1000; OrderLines: Load RowNo() as OrderLineID, OrderID, OrderDate, Round((Year(OrderDate)-2005)*1000*Rand()*Rand()*Rand1) as Sales While Rand()<=0.5 or IterNo()=1; Load * Where OrderDate<=Today(); Load Rand() as Rand1, Date(MakeDate(2013)+Floor((365*4+1)*Rand())) as OrderDate, RecNo() as OrderID Autogenerate vNumberOfOrders; Calendar: Load distinct Year(OrderDate) as Year, Month(OrderDate) as Month, OrderDate Resident OrderLines;

Различия между этими мерами можно представить в таблице или отдельных линейных графиках:

  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) ))
  • Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)) ))

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