Funções de agregação
A família de funções conhecidas como funções de agregação consiste em funções que recebem vários valores de campos como sua entrada e retornam um único resultado por grupo, onde o agrupamento é definido por uma dimensão de gráfico ou uma cláusula group by na instrução de script.
Funções de agregação incluem Sum(), Count(), Min(), Max(), e muito mais.
A maioria das funções de agregação pode ser usadas no script de carregamento de dados e em expressões de gráfico, mas a sintaxe é diferente.
Limitações:
O parâmetro da função de agregação não deve conter outras funções de agregação, a menos que essas agregações internas contenham o qualificador TOTAL. Para agregações aninhadas mais avançadas, use a função avançada Aggr junto com uma dimensão especificada.
Ao nomear uma entidade, evite atribuir o mesmo nome a mais de um campo, variável ou medida. Existe uma ordem estrita de precedência para resolver conflitos entre entidades com nomes idênticos. Essa ordem é refletida em quaisquer objetos ou contextos nos quais essas entidades são usadas. Esta ordem de precedência é a seguinte:
-
Dentro de uma agregação, um campo tem precedência sobre uma variável. Rótulos de medida não são relevantes em agregações e não são priorizados.
-
Fora de uma agregação, um rótulo de medida tem precedência sobre uma variável que, por sua vez, tem precedência sobre um nome de campo.
-
Além disso, fora de uma agregação, uma medida pode ser reutilizada ao se fazer referência ao seu rótulo, a menos que esse rótulo seja de fato um rótulo calculado. Nessa situação, a medida perde significado para reduzir o risco de autorreferência e, nesse caso, o nome sempre será interpretado primeiro como um rótulo de medida, segundo como um nome de campo e terceiro como um nome de variável.
Usando funções de agregação em um script de carga de dados
Funções de agregação só podem ser usadas em comandos LOAD e SELECT.
Usando funções de agregação em expressões do gráfico
O parâmetro da função de agregação não deve conter outras funções de agregação, a menos que essas agregações internas contenham o qualificador TOTAL. Para agregações aninhadas mais avançadas, use a função avançada Aggr junto com uma dimensão especificada.
Uma função de agregação agrega sobre um conjunto de registros possíveis definidos pela seleção. No entanto, um conjunto de registros alternativos pode ser definido usando uma expressão na análise de conjunto.
Consulte: Análise de conjunto
Como agregações são calculadas
Uma agregação percorre os registros de uma tabela específica, agregando os registros nela. Por exemplo, Count(<Field>) contará o número de registros na tabela em que <Field> reside. Se quiser agregar apenas os valores de campo distintos, você precisará usar a cláusula distinct, como Count(distinct <Field>).
Se a função de agregação contiver campos de tabelas diferentes, a função de agregação percorrerá os registros do produto cruzado das tabelas dos campos constituintes. Como isso deteriora o desempenho, essas agregações devem ser evitadas, particularmente quando você tem grandes quantidades de dados.
Agregação de campos-chave
A maneira como as agregações são calculadas significa que você não pode agregar campos-chave porque não está claro qual tabela deve ser usada para a agregação. Por exemplo, se o campo <Key> vincula duas tabelas, não está claro se Count(<Key>) deve retornar o número de registros da primeira ou da segunda tabela.
No entanto, se você usar a cláusula distinct, a agregação será bem definida e poderá ser calculada para um campo chave vinculado entre duas tabelas.
Se você usar um campo chave dentro de uma função de agregação sem a cláusula distinct, o Qlik Sense retornará um número que pode não fazer sentido. A solução é usar a cláusula distinct ou uma cópia da chave: uma cópia que resida em apenas uma tabela.
Por exemplo, nas seguintes tabelas, ProductId é a chave entre as tabelas.
Count(ProductId) pode ser contado na tabela Products (que tem apenas um registro por produto – ProductId é a chave primária) ou pode ser contado na tabela Details (que muito provavelmente tem vários registros por produto). Se você quiser contar o número de produtos distintos, deve usar o Count(distinct ProductId). Se você quiser contar o número de linhas em uma tabela específica, não deve usar a chave.
Agregações de campos chave contidos em três ou mais tabelas
O prefixo distinct funciona apenas com campos-chave que vinculam até duas tabelas. Ao agrupar uma agregação em um campo chave que existe em três ou mais tabelas, qualquer operação que exija informações de frequência para um campo retornará NULL. No caso de um campo chave vinculando três ou mais tabelas, uma cópia não-chave do campo deve ser usada.