operador summarize

Produz uma tabela que agrega o conteúdo da tabela de entrada.

Sales | summarize NumTransactions=count(), Total=sum(UnitPrice * NumUnits) by Fruit, StartOfMonth=startofmonth(SellDateTime)

Retorna uma tabela com a quantidade de transações de venda e o valor total por fruta e mês de vendas. As colunas de saída mostram a contagem de transações, o valor da transação, a fruta e o datetime do início do mês em que a transação foi registrada.

T | summarize count() by price_range=bin(price, 10.0)

Uma tabela que mostra quantos itens têm preços em cada intervalo [0,10,0], [10,0,20,0] e assim por diante. Este exemplo tem uma coluna para a contagem e um para a faixa de preços. Todas as outras colunas de entrada são ignoradas.

Syntax

T | summarize [[Column =] Aggregation [, ...]] [by [Column =] GroupExpression [, ...]]

Argumentos

  • Column: nome opcional para uma coluna de resultados. Assume o padrão de um nome derivado da expressão.
  • Agregação: Uma chamada para uma função de agregação, como count() ou avg(), com nomes de coluna como argumentos. Confira a lista de funções de agregação.
  • GroupExpression: Uma expressão escalar que pode fazer referência aos dados de entrada. A saída terá o mesmo número de registros e de valores distintos em todas as expressões de grupo.

Observação

Quando a tabela de entrada está vazia, a saída depende do uso de GroupExpression:

  • Se GroupExpression não for fornecido, a saída será uma linha única (vazia).
  • Se GroupExpression for fornecido, a saída não terá linhas.

Retornos

As linhas de entrada são organizadas em grupos com os mesmos valores que as expressões by . Em seguida, as funções de agregação especificadas são calculadas sobre cada grupo, produzindo uma linha para cada grupo. O resultado contém as colunas by e pelo menos uma coluna para cada agregação calculada. (Algumas funções de agregação retornam várias colunas.)

O resultado tem a mesma quantidade de linhas e de diferentes combinações de valores by (que pode ser zero). Se nenhuma chave de grupo for fornecida, o resultado terá um único registro.

Para resumir intervalos de valores numéricos, use bin() para reduzir os intervalos a valores discretos.

Observação

  • Embora você possa fornecer expressões aleatórias para as expressões de agregação e de agrupamento, é mais eficiente usar nomes de coluna simples ou aplicar bin() a uma coluna numérica.
  • Não há mais suporte para os compartimentos de hora automática das colunas datetime. Em vez disso, use a compartimentalização explícita. Por exemplo, summarize by bin(timestamp, 1h).

Lista de funções de agregação

Função Descrição
arg_max() Retorna uma ou mais expressões quando o argumento é maximizado
arg_min() Retorna uma ou mais expressões quando o argumento é minimizado
avg() Retorna um valor médio em todo o grupo
avgif() Retorna um valor médio em todo o grupo (com um predicado)
binary_all_and Retorna o valor agregado usando o binário AND do grupo
binary_all_or Retorna o valor agregado usando o binário OR do grupo
binary_all_xor Retorna o valor agregado usando o binário XOR do grupo
buildschema() Retorna o esquema mínimo que admite todos os valores da entrada dynamic
count() Retorna uma contagem do grupo
countif() Retorna uma contagem com o predicado do grupo
dcount() Retorna uma contagem distinta aproximada dos elementos do grupo
dcountif() Retorna uma contagem distinta aproximada dos elementos do grupo (com um predicado)
make_bag() Retorna um recipiente de propriedades de valores dinâmicos dentro do grupo
make_bag_if() Retorna um recipiente de propriedades de valores dinâmicos dentro do grupo (com um predicado)
make_list() Retorna uma lista de todos os valores dentro do grupo
make_list_if() Retorna uma lista de todos os valores dentro do grupo (com um predicado)
make_list_with_nulls() Retorna uma lista de todos os valores dentro do grupo, incluindo valores nulos
make_set() Retorna um conjunto de valores distintos dentro do grupo
make_set_if() Retorna um conjunto de valores distintos dentro do grupo (com um predicado)
max() Retorna o valor máximo no grupo
maxif() Retorna um valor máximo do grupo (com um predicado)
min() Retorna o valor mínimo no grupo
minif() Retorna um valor mínimo do (com um predicado)
percentiles() Retorna o percentual aproximado do grupo
percentiles_array() Retorna os percentuais aproximados do grupo
percentilesw() Retorna o percentual ponderado aproximado do grupo
percentilesw_array() Retorna os percentuais ponderados aproximados do grupo
stdev() Retorna o desvio padrão no grupo
stdevif() Retorna o desvio padrão no grupo (com um predicado)
sum() Retorna a soma dos elementos dentro do grupo
sumif() Retorna a soma dos elementos dentro do grupo (com um predicado)
take_any() Retorna um valor não vazio aleatório para o grupo
take_anyif() Retorna um valor não vazio aleatório para o grupo (com um predicado)
variance() Retorna a variância no grupo
varianceif() Retorna a variância no grupo (com um predicado)

Agrega os valores padrão

A seguinte tabela resume os valores padrão das agregações:

Operador Valor padrão
count(), countif(), dcount(), dcountif() 0
make_bag(), make_bag_if(), make_list(), make_list_if(), make_set(), make_set_if() matriz dinâmica vazia ([])
Todos os outros null

Ao usar essas agregações sobre entidades que incluem valores nulos, os valores nulos serão ignorados e não participarão do cálculo (confira os exemplos abaixo).

Exemplos

Resumir o preço por fruta e por fornecedor.

Exemplo: Combinação exclusiva

Determine quais combinações exclusivas de ActivityType e de CompletionStatus existem em uma tabela. Não há funções de agregação, apenas chaves de agrupamento. A saída exibirá apenas as colunas desses resultados:

Activities | summarize by ActivityType, completionStatus
ActivityType completionStatus
dancing started
singing started
dancing abandoned
singing completed

Exemplo: Carimbo de data/hora mínimo e máximo

Localiza o carimbo de data/hora mínimo e máximo de todos os registros na tabela Atividades. Não há qualquer cláusula group-by e, portanto, há apenas uma linha na saída:

Activities | summarize Min = min(Timestamp), Max = max(Timestamp)
Min Max
1975-06-09 09:21:45 2015-12-24 23:45:00

Exemplo: Contagem distinta

Crie uma linha para cada continente, mostrando uma contagem das cidades nas quais as atividades ocorrem. Como há poucos valores para "continent", nenhuma função de agrupamento é necessária na cláusula 'by':

Activities | summarize cities=dcount(city) by continent
cities continent
4290 Asia
3267 Europe
2673 North America

Exemplo: Histograma

O exemplo a seguir calcula um histograma para cada tipo de atividade. Como Duration tem muitos valores, use bin para agrupar os valores em intervalos de dez minutos:

Activities | summarize count() by ActivityType, length=bin(Duration, 10m)
count_ ActivityType length
354 dancing 0:00:00.000
23 singing 0:00:00.000
2717 dancing 0:10:00.000
341 singing 0:10:00.000
725 dancing 0:20:00.000
2876 singing 0:20:00.000
...

Exemplo para os valores padrão agregados

Quando a entrada do operador summarize tiver pelo menos uma chave de agrupamento, o resultado também será vazio.

Quando a entrada do operador summarize não tem uma chave de agrupamento vazia, o resultado são os valores padrão das agregações usadas no summarize:

datatable(x:long)[]
| summarize any(x), arg_max(x, x), arg_min(x, x), avg(x), buildschema(todynamic(tostring(x))), max(x), min(x), percentile(x, 55), hll(x) ,stdev(x), sum(x), sumif(x, x > 0), tdigest(x), variance(x)
any_x max_x max_x_x min_x min_x_x avg_x schema_x max_x1 min_x1 percentile_x_55 hll_x stdev_x sum_x sumif_x tdigest_x variance_x
datatable(x:long)[]
| summarize  count(x), countif(x > 0) , dcount(x), dcountif(x, x > 0)
count_x countif_ dcount_x dcountif_x
0 0 0 0
datatable(x:long)[]
| summarize  make_set(x), make_list(x)
set_x list_x
[] []

A agregação média soma todos os não nulos e conta apenas aqueles que participaram do cálculo (isso não levará nulos em conta).

range x from 1 to 2 step 1
| extend y = iff(x == 1, real(null), real(5))
| summarize sum(y), avg(y)
sum_y avg_y
5 5

A contagem regular contará valores nulos:

range x from 1 to 2 step 1
| extend y = iff(x == 1, real(null), real(5))
| summarize count(y)
count_y
2
range x from 1 to 2 step 1
| extend y = iff(x == 1, real(null), real(5))
| summarize make_set(y), make_set(y)
set_y set_y1
[5.0] [5.0]