Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Alterne entre serviços usando a lista suspensa Version. Saiba mais sobre navegação.
Aplica a: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
As funções de agregação agrupam e combinam dados de várias linhas num valor resumo. O valor resumido depende da função escolhida, como um valor de contagem, máximo ou médio.
Neste tutorial, aprenderás como:
Os exemplos neste tutorial usam a StormEvents tabela, que está disponível publicamente no cluster de ajuda. Para explorar com seus próprios dados, crie seu próprio cluster gratuito.
Os exemplos neste tutorial usam a StormEvents tabela, que está disponível publicamente nos dados de exemplo de análise meteorológica.
Este tutorial baseia-se na base do primeiro tutorial, Aprenda operadores comuns.
Pré-requisitos
Para executar as consultas a seguir, você precisa de um ambiente de consulta com acesso aos dados de exemplo. Use uma das seguintes opções:
- Uma conta da Microsoft ou identidade de usuário do Microsoft Entra para entrar no cluster de ajuda
- Uma conta Microsoft ou identidade de utilizador do Microsoft Entra
- Um espaço de trabalho do Fabric com uma capacidade ativada para o Microsoft Fabric
Use o operador resumir
O operador de resumo é essencial para realizar agregações sobre os seus dados. O summarize operador agrupa as linhas com base na by cláusula e depois usa a função de agregação fornecida para combinar cada grupo numa única linha.
Encontre o número de eventos por estado usando summarize, com a função de agregação contagem.
StormEvents
| summarize TotalStorms = count() by State
Saída
| Estado | TotalStorms |
|---|---|
| TEXAS | 4701 |
| KANSAS | 3166 |
| IOWA | 2337 |
| ILLINOIS | 2022 |
| MISSOURI | 2016 |
| ... | ... |
Visualizar resultados da consulta
A visualização dos resultados da consulta em um gráfico pode ajudá-lo a identificar padrões, tendências e valores atípicos em seus dados. Pode criar estas visualizações usando o operador de renderização .
Ao longo do tutorial, vês exemplos de como render usar para mostrar os teus resultados. Alguns tipos de gráficos disponíveis incluem gráficos de barras, gráficos de linhas, gráficos circulares e gráficos de dispersão. Para já, use render para ver os resultados da consulta anterior num gráfico de barras.
StormEvents
| summarize TotalStorms = count() by State
| render barchart
Contar linhas condicionalmente
Ao analisar os seus dados, use countif() para contar linhas com base numa condição específica. Esta função ajuda-o a perceber quantas linhas cumprem os critérios dados.
A consulta seguinte utiliza countif() para contar tempestades que causaram danos. Em seguida, a consulta usa o operador top para filtrar os resultados e exibir os estados com a maior quantidade de danos às colheitas causados por tempestades.
StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage
Saída
| Estado | TempestadesComDanosNaColheita |
|---|---|
| IOWA | 359 |
| NEBRASCA | 201 |
| MISSISSIPPI | 105 |
| CAROLINA DO NORTE | 82 |
| MISSOURI | 78 |
Agrupar dados em compartimentos
Para agregar dados por valores numéricos ou temporais, primeiro agrupe os dados em compartimentos usando a função bin(). Usar bin() ajuda a perceber como os valores são distribuídos dentro de um determinado intervalo e facilita a comparação de diferentes períodos.
A consulta seguinte conta o número de tempestades que causaram danos nas colheitas para cada semana em 2007. O 7d argumento representa uma semana, pois a função requer um valor de período de tempo válido.
StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31))
and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)
Saída
| StartTime | EventCount |
|---|---|
| 2007-01-01T00:00:00Z | 16 |
| 2007-01-08T00:00:00Z | 20 |
| 2007-01-29T00:00:00Z | 8 |
| 2007-02-05T00:00:00Z | 1 |
| 2007-02-12T00:00:00Z | 3 |
| ... | ... |
Adicione | render timechart ao final da consulta para visualizar os resultados.
Observação
bin() é semelhante à floor() função em outras linguagens de programação. Ele reduz cada valor para o múltiplo mais próximo do módulo que você fornece e permite summarize atribuir as linhas a grupos.
Calcular o mín, máx, méd e soma
Para saber mais sobre os tipos de tempestades que causam danos nas colheitas, calcule os danos min(), max() e avg() nas colheitas para cada tipo de evento. Depois, ordena o resultado pelo dano médio.
Pode usar múltiplas funções de agregação num único summarize operador para produzir várias colunas computadas.
StormEvents
| where DamageCrops > 0
| summarize
MaxCropDamage=max(DamageCrops),
MinCropDamage=min(DamageCrops),
AvgCropDamage=avg(DamageCrops)
by EventType
| sort by AvgCropDamage
Saída
| Tipo de Evento | MaxCropDamage | MinCropDamage | AvgCropDamage |
|---|---|---|---|
| Geada/Congelação | 568600000 | 3000 | 9106087.5954198465 |
| Incêndio florestal | 21000000 | 10000 | 7268333.333333333 |
| Seca | 700000000 | 2000 | 6763977.8761061952 |
| Inundação | 500000000 | 1000 | 4844925.23364486 |
| Vento de Tempestade com Trovoada | 22000000 | 100 | 920328.36538461538 |
| ... | ... | ... | ... |
Os resultados da consulta anterior indicam que os eventos de geada/congelação resultam, em média, nos maiores danos nas culturas. No entanto, a consulta bin() mostra que os eventos com danos nas culturas ocorrem maioritariamente nos meses de verão.
Use sum() para verificar o número total de colheitas danificadas em vez da quantidade de eventos que causaram alguns danos, como feito na count()consulta bin() anterior.
StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31))
and DamageCrops > 0
| summarize CropDamage = sum(DamageCrops) by bin(StartTime, 7d)
| render timechart
Agora você pode ver um pico nos danos às safras em janeiro, que provavelmente foi devido à geada / congelamento.
Sugestão
Use minif(), maxif(), avgif() e sumif() para realizar agregações condicionais, como fez na secção de contagem condicional de linhas .
Calcular percentagens
O cálculo de porcentagens pode ajudá-lo a entender a distribuição e a proporção de diferentes valores em seus dados. Esta secção aborda dois métodos comuns para calcular percentagens utilizando a Linguagem de Consulta Kusto (KQL).
Calcular a percentagem com base em duas colunas
Use count() e countif para encontrar a porcentagem de eventos de tempestade que causaram danos às colheitas em cada estado. Primeiro, conte o número total de tempestades em cada estado. Em seguida, conte o número de tempestades que causaram danos nas lavouras em cada estado.
Em seguida, use estender para calcular a porcentagem entre as duas colunas, dividindo o número de tempestades com danos na safra pelo número total de tempestades e multiplicando por 100.
Para garantir que você obtenha um resultado decimal, use a função todouble() para converter pelo menos um dos valores de contagem de inteiros em um duplo antes de executar a divisão.
StormEvents
| summarize
TotalStormsInState = count(),
StormsWithCropDamage = countif(DamageCrops > 0)
by State
| extend PercentWithCropDamage =
round((todouble(StormsWithCropDamage) / TotalStormsInState * 100), 2)
| sort by StormsWithCropDamage
Saída
| Estado | TotalStormsInState | TempestadesComDanosNaColheita | PercentagemComDanosNasCulturas |
|---|---|---|---|
| IOWA | 2337 | 359 | 15.36 |
| NEBRASCA | 1766 | 201 | 11.38 |
| MISSISSIPPI | 1218 | 105 | 8.62 |
| CAROLINA DO NORTE | 1721 | 82 | 4.76 |
| MISSOURI | 2016 | 78 | 3.87 |
| ... | ... | ... | ... |
Observação
Ao calcular porcentagens, converta pelo menos um dos valores inteiros na divisão com todouble() ou toreal(). Esta conversão garante que não obtém resultados truncados devido à divisão de inteiros. Para obter mais informações, consulte Regras de tipo para operações aritméticas.
Calcular a percentagem com base no tamanho da tabela
Para comparar o número de tempestades por tipo de evento com o número total de tempestades no banco de dados, primeiro salve o número total de tempestades no banco de dados como uma variável. Utilize instruções Let para definir variáveis numa consulta.
Como as instruções de expressão tabular retornam resultados tabulares, use a função toscalar() para converter o resultado tabular da count() função em um valor escalar. Depois, use o valor numérico no cálculo percentual.
let TotalStorms = toscalar(StormEvents | summarize count());
StormEvents
| summarize EventCount = count() by EventType
| project EventType, EventCount, Percentage = todouble(EventCount) / TotalStorms * 100.0
Saída
| Tipo de Evento | EventCount | Percentagem |
|---|---|---|
| Vento de Tempestade com Trovoada | 13015 | 22.034673077574237 |
| Granizo | 12711 | 21.519994582331627 |
| Inundação repentina | 3688 | 6.2438627975485055 |
| Seca | 3616 | 6,1219652592015716 |
| Tempo de inverno | 3349 | 5.669928554498358 |
| ... | ... | ... |
Extrair valores únicos
Use make_set() para transformar uma seleção de linhas em uma tabela em uma matriz de valores exclusivos.
A consulta a seguir usa make_set() para criar uma matriz dos tipos de eventos que causam mortes em cada estado. A tabela resultante é então classificada pelo número de tipos de tempestade em cada matriz.
StormEvents
| where DeathsDirect > 0 or DeathsIndirect > 0
| summarize StormTypesWithDeaths = make_set(EventType) by State
| project State, StormTypesWithDeaths
| sort by array_length(StormTypesWithDeaths)
Saída
| Estado | Tipos de tempestade com mortes |
|---|---|
| CALIFÓRNIA | ["Vento de Trovoada","Surf Alto","Frio/Vento Frio","Vento Forte","Corrente de Rip","Calor","Calor Excessivo","Incêndio","Tempestade de Poeira","Maré Baixa Astronómica","Neblina Densa","Tempo de inverno"] |
| TEXAS | ["Inundação Repentina","Vento de Trovoada","Tornado","Relâmpago","Dilúvio","Tempestade de Gelo","Tempo de inverno","Corrente de Rip","Calor Excessivo","Neblina Densa","Furacão (Tufão)","Frio/Vento Frio"] |
| OKLAHOMA | ["Inundação Relâmpago","Tornado","Frio/Vento Frio","Tempestade de inverno","Neve Pesada","Calor Excessivo","Calor","Tempestade de Gelo","Tempo de inverno","Neblina Densa"] |
| NOVA IORQUE | ["Dilúvio","Relâmpago","Vento de Trovoada","Inundação Repentina","Tempo de inverno","Tempestade de Gelo","Frio Extremo/Vento Frio","Tempestade de inverno","Neve Pesada"] |
| KANSAS | ["Vento de Trovoada","Chuva Forte","Tornado","Dilúvio","Inundação Relâmpago","Neve Pesada","Tempo de inverno","Nevasca"] |
| ... | ... |
Dados do bucket por condição
A função case() agrupa dados em buckets com base em condições especificadas. A função retorna a expressão de resultado correspondente ao primeiro predicado satisfeito, ou a expressão else final se nenhum predicado for satisfeito.
Este exemplo agrupa os Estados com base no número de ferimentos relacionados com tempestades sofridos pelos seus cidadãos.
StormEvents
| summarize InjuriesCount = sum(InjuriesDirect) by State
| extend InjuriesBucket = case (
InjuriesCount > 50,
"Large",
InjuriesCount > 10,
"Medium",
InjuriesCount > 0,
"Small",
"No injuries"
)
| sort by State asc
Saída
| Estado | Contagem de Lesões | Repositório de Lesões |
|---|---|---|
| ALABAMA | 494 | Grande |
| ALASKA | 0 | Sem feridos |
| SAMOA AMERICANA | 0 | Sem feridos |
| ARIZONA | 6 | Pequeno |
| ARKANSAS | 54 | Grande |
| ATLÂNTICO NORTE | 15 | Médio |
| ... | ... | ... |
Crie um gráfico de setor para visualizar a proporção de estados que experienciaram tempestades resultando em um grande, médio ou pequeno número de feridos.
StormEvents
| summarize InjuriesCount = sum(InjuriesDirect) by State
| extend InjuriesBucket = case (
InjuriesCount > 50,
"Large",
InjuriesCount > 10,
"Medium",
InjuriesCount > 0,
"Small",
"No injuries"
)
| summarize InjuryBucketByState=count() by InjuriesBucket
| render piechart
Executar agregações em uma janela deslizante
O exemplo seguinte mostra como resumir colunas usando uma janela deslizante.
A consulta calcula o mínimo, máximo e médio dos danos materiais de tornados, inundações e incêndios florestais utilizando uma janela deslizante de sete dias. Cada registro no conjunto de resultados agrega os sete dias anteriores, e os resultados contêm um registro por dia no período de análise.
Aqui está uma explicação passo a passo da consulta:
- Agrupe cada registro num único dia em relação a
windowStart. - Adicione sete dias ao valor do bin para definir o fim do intervalo para cada registo. Se o valor estiver fora do intervalo de
windowStartewindowEnd, ajuste o valor de acordo. - Crie uma matriz de sete dias para cada registro, a partir do dia atual do registro.
- Expanda o array a partir do passo 3 usando o mv-expand para duplicar cada registo para sete registos com intervalos de um dia entre eles.
- Realize as agregações para cada dia. Devido ao passo 4, este passo resume os sete dias anteriores.
- Exclua os primeiros sete dias do resultado final porque não há um período de retrospetiva de sete dias para eles.
let windowStart = datetime(2007-07-01);
let windowEnd = windowStart + 13d;
StormEvents
| where EventType in ("Tornado", "Flood", "Wildfire")
| extend bin = bin_at(startofday(StartTime), 1d, windowStart) // 1
| extend endRange = iff(bin + 7d > windowEnd, windowEnd,
iff(bin + 7d - 1d < windowStart, windowStart,
iff(bin + 7d - 1d < bin, bin, bin + 7d - 1d))) // 2
| extend range = range(bin, endRange, 1d) // 3
| mv-expand range to typeof(datetime) // 4
| summarize min(DamageProperty), max(DamageProperty), round(avg(DamageProperty)) by Timestamp=bin_at(range, 1d, windowStart), EventType // 5
| where Timestamp >= windowStart + 7d; // 6
Saída
A tabela de resultados a seguir está truncada. Para ver a saída completa, execute a consulta.
| Data e Hora | Tipo de Evento | min_DamageProperty | Propriedade_DanoMáximo | avg_DamageProperty |
|---|---|---|---|---|
| 2007-07-08T00:00:00Z | Tornado | 0 | 30000 | 6905 |
| 2007-07-08T00:00:00Z | Inundação | 0 | 200000 | 9261 |
| 2007-07-08T00:00:00Z | Incêndio florestal | 0 | 200000 | 14033 |
| 2007-07-09T00:00:00Z | Tornado | 0 | 100000 | 14783 |
| 2007-07-09T00:00:00Z | Inundação | 0 | 200000 | 12529 |
| 2007-07-09T00:00:00Z | Incêndio florestal | 0 | 200000 | 14033 |
| 2007-07-10T00:00:00Z | Tornado | 0 | 100000 | 31400 |
| 2007-07-10T00:00:00Z | Inundação | 0 | 200000 | 12263 |
| 2007-07-10T00:00:00Z | Incêndio florestal | 0 | 200000 | 11694 |
| ... | ... | ... |
Próximo passo
Agora que você está familiarizado com operadores de consulta comuns e funções de agregação, vá para o próximo tutorial para aprender a unir dados de várias tabelas.