Aggr
Aggr() retorna um conjunto de valores da expressão calculada sobre a dimensão indicada e as dimensões. Por exemplo, o valor máximo de vendas por cliente, por região.
A função Aggr é usada para agregações aninhadas, nas quais seu primeiro parâmetro (a agregação interna) é calculado uma vez por valor dimensional. As dimensões são especificadas no segundo parâmetro (e nos parâmetros subsequentes).
Além disso, a função Aggr deve ser incluída em uma função de agregação externa usando a matriz de resultados da função Aggr como entrada para a agregação na qual ela está aninhada
Sintaxe:
Aggr({SetExpression}[DISTINCT] [NODISTINCT ] expr, StructuredParameter{, StructuredParameter})
Tipo de dados de retorno: dual
Argumentos:
- expr: Uma expressão normal consiste em uma função de agregação. Por padrão, a função de agregação agregará um conjunto de registros possíveis definidos pela seleção.
-
StructuredParameter: StructuredParameter consiste em uma dimensão e, opcionalmente, critérios de classificação no formato: (Dimension(Sort-type, Ordering)). A dimensão é um campo único e não pode ser uma expressão. A dimensão é usada para determinar a matriz de valores para a qual a expressão Aggr é calculada.
Se critérios de classificação forem incluídos, a matriz de valores criada pela função Aggr, calculada para a dimensão, será classificada. Isso é importante quando a ordem de classificação afeta o resultado da expressão na qual a função Aggr está delimitada. Para obter detalhes sobre como usar critérios de classificação, consulte Adicionando critérios de classificação à dimensão no parâmetro estruturado.
- SetExpression: Por padrão, a função de agregação agregará um conjunto de registros possíveis definidos pela seleção. Um conjunto de registros alternativos pode ser definido por uma expressão de análise.
- DISTINCT: Se o argumento da expressão for precedido pelo qualificador distinct ou se não for usado nenhum qualificador, cada combinação dos valores da dimensão gerará somente um valor de retorno. Esta é a maneira como as agregações normais são feitas – cada combinação distinta de valores de dimensão gera uma linha no gráfico.
- NODISTINCT: Se o argumento da expressão for precedido por um qualificador nodistinct cada combinação dos valores da dimensão poderá gerar mais de um valor de retorno, dependendo da estrutura dos dados subjacentes. Se houver apenas uma dimensão, a função aggr retornará uma matriz com o mesmo número de elementos, pois há filas nos dados de origem.
Funções de agregação básicas, como Sum, Min e Avg, retornam um único valor numérico, enquanto a função Aggr() pode ser comparada a criar um conjunto de resultados temporários em etapas (uma tabela virtual) sobre o qual outra agregação pode ser feita. Por exemplo, calcular a média do valor de venda, resumindo as vendas por cliente em um comando Aggr() e depois calcular a média dos resultados somados: Avg(TOTAL Aggr(Sum(Sales), Customer)).
Limitações:
Cada dimensão em uma função Aggr() deve ser um campo único e não pode ser uma expressão (dimensão calculada).
Adicionando critérios de classificação à dimensão no parâmetro estruturado
Em seu formato básico, o argumento StructuredParameter na sintaxe da função Aggr é uma única dimensão. A expressão: Aggr(Sum(Sales, Month)) localiza o valor total das vendas de cada mês. No entanto, quando ela está delimitada em outra função de agregação, pode haver resultados inesperados, a não ser que critérios de classificação sejam utilizados. Isso porque algumas dimensões podem ser classificadas em ordem numérica ou alfabética, e assim por diante.
No argumento StructuredParameter da função Aggr, você pode especificar critérios de classificação na dimensão da sua expressão. Dessa forma, é imposta uma ordem de classificação na tabela virtual que é produzida pela função Aggr.
O argumento StructuredParameter tem a seguinte sintaxe:
(FieldName, (Sort-type, Ordering))
Parâmetros estruturados podem ser aninhados:
(FieldName, (FieldName2, (Sort-type, Ordering)))
O tipo de classificação pode ser: NUMERIC, TEXT, FREQUENCY ou LOAD_ORDER.
Os tipos de ordenação associados a cada Tipo de classificação são os seguintes:
Tipo de classificação | Tipos de ordenação disponíveis |
---|---|
NUMERIC | ASCENDING, DESCENDING ou REVERSE |
TEXT | ASCENDING, A2Z, DESCENDING, REVERSE ou Z2A |
FREQUENCY | DESCENDING, REVERSE ou ASCENDING |
LOAD_ORDER | ASCENDING, ORIGINAL, DESCENDING ou REVERSE |
Os tipos de ordenação REVERSE e DESCENDING são equivalentes.
Para o Tipo de classificação TEXT, os tipos de Ordenação ASCENDING e A2Z são equivalentes, enquanto DESCENDING, REVERSE e Z2A são equivalentes.
Para o Tipo de classificação LOAD_ORDER, os tipos de Ordenação ASCENDING e ORIGINAL são equivalentes.
Exemplos
Exemplo 1:
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))
A expressão Aggr(Sum(UnitSales*UnitPrice), Customer) localiza o valor total de vendas por Customer e retorna uma matriz de valores: 295, 715 e 120 para os três valores de Customer.
Efetivamente, construímos uma lista temporária de valores sem a necessidade de criar uma tabela explícita ou uma coluna contendo esses valores. Estes valores são utilizados como entrada para a função Avg() para encontrar o valor médio de vendas, 376,6667. (Você deve ter a opção Totais selecionada em Presentation no painel de propriedades.
Exemplo 2:
Aggr(NODISTINCT Max(UnitPrice), Customer)
Uma matriz de valores: 16, 16, 16, 25, 25, 25, 19 e 19. O qualificador nodistinct significa que a matriz contém um elemento para cada linha na fonte de dados: cada um é o UnitPrice máximo para cada Customer e Product.
Exemplo 3:
max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
Usando critérios de classificação no argumento StructuredParameter na expressão: max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear,(NUMERIC, ASCENDING))))
Sem critérios de classificação, o resultado da expressão max(aggr(sum(Customers)-above(Sum(Customers)), (MonthYear))) depende de como a dimensão MonthYear está classificada. Podemos não obter o resultado desejado. Ao adicionarmos valores para o tipo de classificação e tipo de ordenação à dimensão, fornecemos critérios de classificação ao parâmetro estruturado: (MonthYear, (NUMERIC, ASCENDING)), em que o tipo de classificação NUMERIC e a ordenação ASCENDING determinam que o MonthYear é classificado em ordem numérica crescente.
Aqui, estamos procurando encontrar o maior aumento possível no número de clientes, mês a mês. Isso poderia ser utilizado em uma visualização de KPI, por exemplo.
A parte Aggr da expressão compara o número total de clientes em um mês (especificado por MonthYear) com o número total no mês anterior. Como usamos critérios de classificação com a dimensão: (MonthYear,(NUMERIC, ASCENDING)), temos certeza de que Aggr compara os números de clientes em meses consecutivos na tabela virtual classificando esses meses em ordem numérica crescente, e não em ordem alfabética crescente.
Dados usados nos exemplos:
Crie uma tabela com Customer, Product, UnitPrice, e UnitSales como dimensões. Adicione a expressão à tabela como uma medida.
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 '|');