Aggr - função de gráfico

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 avançadas, em que a função Aggr está incluída em outra função de agregação, usando o conjunto de resultados da função Aggr como entrada para a agregação na qual está inserida.

Syntax:  

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

Return data type: valor duplo

Arguments:  

Argumento Descrição
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, em critérios de classificação no formato: (Dimensão (Tipo de classificação, Ordenação))

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 estiverem 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 da função Aggr em que está delimitada.

Para obter detalhes de 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 distinta de valores de 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 pelo qualificador nodistinct, cada combinação de valores de dimensão poderá gerar mais de um valor de retorno, dependendo da estrutura de dados subjacente. Se houver apenas uma dimensão, a função aggr retornará uma matriz com o mesmo número de elementos que o número de linhas 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 à criação de um conjunto de resultados temporários em etapas (uma tabela virtual) com os quais outra agregação pode ser feita. Por exemplo, calculando uma média do valor de vendas ao somar as vendas por cliente em um comando Aggr() e depois calculando a média dos resultados somados: Avg(TOTAL Aggr(Sum(Sales),Customer)).

Dica: Use a função Aggr() em dimensões calculadas se quiser criar agregações de gráfico aninhadas em vários níveis.

Limitations:  

Cada dimensão em uma função Aggr() deve ser um campo único e não pode ser uma expressão (dimensão calculada).

Em sua forma básica, o argumento StructuredParameter na sintaxe da função Aggr é uma dimensão única. A expressão: Aggr(Sum(Sales, Month)) encontra o valor total das vendas para cada mês. No entanto, quando delimitada em outra função de agregação, pode haver resultados inesperados, a menos que sejam utilizados critérios de classificação. Isso porque algumas dimensões podem ser classificadas por ordem alfabética ou numérica, e assim por diante.

No argumento StructuredParameter da função Aggr, você pode especificar critérios de classificação na dimensão em sua expressão. Dessa forma, você impõe 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 permitidos
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, e 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.

Examples and results:  

Exemplo Resultado
Avg(Aggr(Sum(UnitSales*UnitPrice), Customer))

A expressão Aggr(Sum(UnitSales*UnitPrice), Customer) encontra o valor total das vendas por Customer e retorna uma matriz de valores: 295, 715 e 120 para os três valores Customer.

Efetivamente, criamos uma lista temporária de valores sem ter que criar uma tabela ou coluna explícita contendo esses valores.

Esses valores são usados como entrada para a função Avg() para encontrar a média do valor de vendas: 376.6667. (Você deve ter Totais selecionado em Apresentação no painel de propriedades).

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 deles é o UnitPrice máximo para cada Customer e Product.

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 '|');

 

Examples and results: Parâmetros estruturados

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

Essa medida calcula as vendas acumuladas do ano a cada mês, usando critérios de classificação no argumento do parâmetro estruturado na expressão.

Sem critérios de classificação, o resultado da expressão Sum(Aggr( Rangesum(Above(Sum(Sales),0,12)), (Year), (Month) )) depende de como as dimensões Year e Month são classificadas. Talvez não obtenhamos o resultado que queremos.

Ao adicionarmos valores para o tipo de classificação e o tipo de ordenação à dimensão, fornecemos critérios de classificação ao parâmetro estruturado: (Year, (Numeric, Ascending)), (Month, (Numeric, Ascending)). O tipo de classificação NUMERIC e a ordenação ASCENDING determinam que Year e Month são classificados em ordem numérica crescente.

Dados usados nos exemplos:

O script de carregamento a seguir gera uma tabela de pedidos com linhas de pedidos para uso no exemplo para parâmetros estruturados.

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;

Você pode comparar a diferença entre essas medidas em uma tabela ou em gráficos de linhas separados:

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

A segunda medida fornece as vendas corretas acumuladas no ano para cada mês.