Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
As funções de agregação permitem agrupar e combinar dados de várias linhas em um valor de resumo. O valor de resumo depende da função escolhida, por exemplo, um valor de contagem, máximo ou médio.
Neste tutorial, você aprenderá a:
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. Você pode usar 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 executar agregações sobre seus dados. O summarize operador agrupa linhas com base na cláusula e, em by seguida, usa a função de agregação fornecida para combinar cada grupo em uma ú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. Você pode fazer isso com o operador de renderização .
Ao longo do tutorial, você verá exemplos de como usar render para exibir seus resultados. Por enquanto, vamos usar render para ver os resultados da consulta anterior em um gráfico de barras.
StormEvents
| summarize TotalStorms = count() by State
| render barchart
Contar linhas condicionalmente
Ao analisar seus dados, use countif() para contar linhas com base em uma condição específica para entender quantas linhas atendem aos critérios fornecidos.
A consulta a seguir usa 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 por valores numéricos ou de tempo, primeiro você desejará agrupar os dados em compartimentos usando a função bin( ). O uso bin() pode ajudá-lo a entender como os valores são distribuídos dentro de um determinado intervalo e fazer comparações entre 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() para cada tipo de evento e, em seguida, classifique o resultado pelo dano médio.
Observe que você pode usar várias funções de agregação em um ú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/congelamento resultaram, em média, na maior parte dos danos causados às culturas. No entanto, a consulta bin() mostrou que os eventos com danos nas culturas ocorreram principalmente 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 executar agregações condicionais, como fizemos quando na seçã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 seção aborda dois métodos comuns para calcular porcentagens com a Kusto Query Language (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(). Isso garantirá que você não obtenha resultados truncados devido à divisão por 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. As instruções Let são usadas para definir variáveis dentro de uma 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. Em seguida, o valor numérico pode ser usado no cálculo da porcentagem.
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 a seguir mostra como resumir colunas usando uma janela deslizante.
A consulta calcula os danos materiais mínimos, máximos e médios de tornados, inundações e incêndios florestais usando 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 a matriz da etapa 3 com mv-expand para duplicar cada registro para sete registros 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.