Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cambie los servicios mediante la lista desplegable Versión . Más información sobre la navegación.
Se aplica a: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Las funciones de agregación agrupan y combinan datos de varias filas en un valor de resumen. El valor de resumen depende de la función elegida, como un recuento, un máximo o un valor medio.
En este tutorial aprenderá a:
- Use el operador summarize
- Visualización de los resultados de la consulta
- Recuento condicional de filas
- Agrupar datos en contenedores
- Calcular el mínimo, máximo, promedio y suma
- Cálculo de porcentajes
- Extracción de valores únicos
- Cubo de datos por condición
- Realizar la agregación en una ventana deslizante
En los ejemplos de este tutorial se utiliza la tabla StormEvents, que está disponible públicamente en el clúster de ayuda. Para explorar con sus propios datos, cree su propio clúster gratuito.
En los ejemplos de este tutorial se usa la tabla StormEvents, que está disponible de forma pública en los análisis meteorológicodatos de ejemplo.
Este tutorial se basa en la base del primer tutorial y aprende operadores comunes.
Requisitos previos
Para ejecutar las siguientes consultas, necesita un entorno de consulta con acceso a los datos de ejemplo. Use una de las siguientes opciones:
- Una cuenta de Microsoft o una identidad de usuario de Microsoft Entra para iniciar sesión en el clúster de ayuda
- Una cuenta microsoft o una identidad de usuario de Microsoft Entra
- Un área de trabajo de Fabric con una capacidad habilitada para Microsoft Fabric
Uso del operador summarize
El operador summarize es esencial para realizar agregaciones sobre los datos. El summarize operador agrupa filas basadas en la by cláusula y, a continuación, usa la función de agregación proporcionada para combinar cada grupo en una sola fila.
Encuentre el número de eventos por estado con summarize y la función de agregación de recuento.
StormEvents
| summarize TotalStorms = count() by State
Salida
| Estado | TotalStorms |
|---|---|
| TEXAS | 4701 |
| KANSAS | 3166 |
| IOWA | 2337 |
| ILLINOIS | 2022 |
| MISURI | 2016 |
| ... | ... |
Visualización de los resultados de la consulta
Visualizar los resultados de una consulta en un gráfico o gráfico puede ayudarle a identificar patrones, tendencias y valores atípicos en los datos. Puede crear estas visualizaciones mediante el operador render .
A lo largo del tutorial, verá ejemplos de cómo usar render para mostrar los resultados. Algunos tipos de gráficos disponibles incluyen gráficos de barras, gráficos de líneas, gráficos circulares y gráficos de dispersión. Por ahora, use render para ver los resultados de la consulta anterior en un gráfico de barras.
StormEvents
| summarize TotalStorms = count() by State
| render barchart
Contar filas de forma condicional
Al analizar los datos, use countif() para contar filas en función de una condición específica. Esta función le ayuda a comprender cuántas filas cumplen los criterios especificados.
La consulta siguiente usa countif() para contar tormentas que causaron daños. A continuación, la consulta usa el top operador para filtrar los resultados y mostrar los estados con la mayor cantidad de daños causados por tormentas.
StormEvents
| summarize StormsWithCropDamage = countif(DamageCrops > 0) by State
| top 5 by StormsWithCropDamage
Salida
| Estado | TormentasConDañosEnLosCultivos |
|---|---|
| IOWA | 359 |
| NEBRASKA | 201 |
| MISISIPÍ | 105 |
| CAROLINA DEL NORTE | 82 |
| MISURI | 78 |
Agrupar datos en contenedores
Para agregar datos por valores numéricos o de hora, primero agrupe los datos en contenedores mediante la función bin(). El uso bin() de ayuda a comprender cómo se distribuyen los valores dentro de un intervalo determinado y facilita la comparación de diferentes períodos.
En la consulta siguiente se cuenta el número de tormentas que causaron daños en el cultivo por cada semana en 2007. El 7d argumento representa una semana, ya que la función requiere un valor de intervalo de tiempo válido.
StormEvents
| where StartTime between (datetime(2007-01-01) .. datetime(2007-12-31))
and DamageCrops > 0
| summarize EventCount = count() by bin(StartTime, 7d)
Salida
| StartTime | Recuento de eventos |
|---|---|
| 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 |
| ... | ... |
Agregue | render timechart al final de la consulta para visualizar los resultados.
Nota:
bin() es similar a la floor() función en otros lenguajes de programación. Reduce cada valor al múltiplo más cercano del módulo que se proporciona y permite summarize asignar las filas a los grupos.
Calcular el mínimo, máximo, promedio y suma
Para obtener más información sobre los tipos de tormentas que causan daños en los cultivos, calcule los daños mínimos, máximos y medios en los cultivos para cada tipo de evento mediante min(), max() y avg(). A continuación, ordene el resultado por el daño medio.
Puede usar varias funciones de agregación en un único summarize operador para generar varias columnas calculadas.
StormEvents
| where DamageCrops > 0
| summarize
MaxCropDamage=max(DamageCrops),
MinCropDamage=min(DamageCrops),
AvgCropDamage=avg(DamageCrops)
by EventType
| sort by AvgCropDamage
Salida
| EventType | MaxCropDamage | MinCropDamage | AvgCropDamage |
|---|---|---|---|
| Helada/Congelación | 568600000 | 3000 | 9106087.5954198465 |
| Incendio forestal | 21000000 | 10 000 | 7268333.333333333 |
| Sequía | 700 000 000 | 2000 | 6763977.8761061952 |
| Inundación | 500000000 | 1 000 | 4844925.23364486 |
| Viento de tormenta | 22000000 | 100 | 920328.36538461538 |
| ... | ... | ... | ... |
Los resultados de la consulta anterior indican que los eventos Frost/Freeze producen el mayor daño en el cultivo en promedio. Sin embargo, la consulta bin() muestra que los eventos con daños en el cultivo tienen lugar principalmente en los meses de verano.
Use sum() para comprobar el número total de cultivos dañados en lugar de la cantidad de eventos que causaron algún daño, como se hizo con count() en la 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
Ahora puede ver un pico en los daños en el cultivo en enero, que probablemente se debió a Frost/Freeze.
Sugerencia
Use minif(), maxif(), avgif()y sumif() para realizar agregaciones condicionales, como hizo en la sección filas de recuento condicional .
Cálculo de porcentajes
El cálculo de porcentajes puede ayudarle a comprender la distribución y proporción de valores diferentes dentro de los datos. En esta sección se tratan dos métodos comunes para calcular porcentajes mediante el lenguaje de consulta kusto (KQL).
Cálculo del porcentaje basado en dos columnas
Use count() y countif para encontrar el porcentaje de eventos de tormenta que causaron daños en el cultivo en cada estado. En primer lugar, cuente el número total de tormentas en cada estado. A continuación, cuente el número de tormentas que causaron daños en el cultivo en cada estado.
Después, use extend para calcular el porcentaje entre las dos columnas dividiendo el número de tormentas con daño de cultivo por el número total de tormentas y multiplicando por 100.
Para asegurarse de obtener un resultado decimal, use la función todouble() para convertir al menos uno de los valores de recuento de enteros en un doble antes de realizar la división.
StormEvents
| summarize
TotalStormsInState = count(),
StormsWithCropDamage = countif(DamageCrops > 0)
by State
| extend PercentWithCropDamage =
round((todouble(StormsWithCropDamage) / TotalStormsInState * 100), 2)
| sort by StormsWithCropDamage
Salida
| Estado | Total de tormentas en el estado | TormentasConDañosEnLosCultivos | Porcentaje con daños en los cultivos |
|---|---|---|---|
| IOWA | 2337 | 359 | 15.36 |
| NEBRASKA | 1766 | 201 | 11,38 |
| MISISIPÍ | 1218 | 105 | 8,62 |
| CAROLINA DEL NORTE | 1721 | 82 | 4.76 |
| MISURI | 2016 | 78 | 3,87 |
| ... | ... | ... | ... |
Nota:
Al calcular porcentajes, convierta al menos uno de los valores enteros de la división con todouble() o toreal().. Esta conversión garantiza que no se truncan los resultados debido a la división de enteros. Para obtener más información, consulte Reglas de tipo para operaciones aritméticas.
Cálculo del porcentaje en función del tamaño de tabla
Para comparar el número de tormentas por tipo de evento con el número total de tormentas de la base de datos, guarde primero el número total de tormentas en la base de datos como una variable. Utiliza las instrucciones Let para definir variables dentro de una consulta.
Dado que las instrucciones de expresión tabular devuelven resultados tabulares, use la función toscalar() para convertir el resultado tabular de la count() función en un valor escalar. A continuación, use el valor numérico en el cálculo de porcentaje.
let TotalStorms = toscalar(StormEvents | summarize count());
StormEvents
| summarize EventCount = count() by EventType
| project EventType, EventCount, Percentage = todouble(EventCount) / TotalStorms * 100.0
Salida
| EventType | Recuento de eventos | Porcentaje |
|---|---|---|
| Viento de tormenta | 13015 | 22.034673077574237 |
| Granizo | 12711 | 21.519994582331627 |
| Inundación repentina | 3688 | 6.2438627975485055 |
| Sequía | 3616 | 6.1219652592015716 |
| Clima de invierno | 3349 | 5.669928554498358 |
| ... | ... | ... |
Extraer valores únicos
Use make_set() para convertir una selección de filas de una tabla en una matriz de valores únicos.
La consulta siguiente usa make_set() para crear una matriz de los tipos de eventos que provocan muertes en cada estado. Luego, la tabla resultante se ordena por el número de tipos de tormenta en cada matriz.
StormEvents
| where DeathsDirect > 0 or DeathsIndirect > 0
| summarize StormTypesWithDeaths = make_set(EventType) by State
| project State, StormTypesWithDeaths
| sort by array_length(StormTypesWithDeaths)
Salida
| Estado | TiposDeTormentaConMuertes |
|---|---|
| CALIFORNIA | ["Vientos tormentosos","Oleaje fuerte","Frío/sensación térmica","Viento fuerte","Corriente de resaca","Calor","Calor excesivo","Incendio forestal","Tormenta de polvo","Marea baja astronómica","Niebla densa","Tiempo invernal"] |
| TEXAS | ["Inundación repentina","Viento de tormenta eléctrica","Tornado","Rayos","Inundación","Tormenta de hielo","Tiempo invernal","Corriente de resaca","Calor excesivo","Niebla densa","Huracán (Tifón)","Frío/Sensación térmica"] |
| OKLAHOMA | ["Inundación Relámpago", "Tornado", "Frío/Escalofríos por Viento", "Tormenta Invernal", "Nieve Abundante", "Calor Extremo", "Calor", "Tormenta de Hielo", "Clima Invernal", "Niebla Densa"] |
| NUEVA YORK | ["Inundación", "Relámpago", "Viento de Tormenta Eléctrica", "Inundación Repentina", "Clima Invernal", "Tormenta de Hielo", "Frío Extremo/Sensación Térmica", "Tormenta Invernal", "Nieve Intensa"] |
| KANSAS | ["Viento de tormenta","Lluvia intensa","Tornado","Inundación","Inundación flash","Rayo","Nieve pesada","Clima de invierno","Blizzard"] |
| ... | ... |
Agrupar datos por condición
La función case() agrupa los datos en cubos en función de las condiciones especificadas. La función devuelve la expresión de resultado correspondiente al primer predicado que se cumpla, o la expresión else final si no se cumple ninguno de los predicados.
En este ejemplo se agrupan estados basados en el número de lesiones relacionadas con tormentas que sus ciudadanos han sufrido.
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
Salida
| Estado | Número de lesiones | LesionesBucket |
|---|---|---|
| ALABAMA | 494 | Grande |
| ALASKA | 0 | Sin lesiones |
| SAMOA AMERICANA | 0 | Sin lesiones |
| ARIZONA | 6 | Pequeño |
| ARKANSAS | 54 | Grande |
| NORTE DEL ATLÁNTICO | 15 | Medio |
| ... | ... | ... |
Cree un gráfico circular para visualizar la proporción de estados que experimentaron tormentas, lo que da lugar a un número grande, mediano o pequeño de lesiones.
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
Realizar agregaciones sobre una ventana deslizante
En el ejemplo siguiente se muestra cómo resumir columnas mediante una ventana deslizante.
La consulta calcula el daño mínimo, máximo y promedio de propiedad de tornados, inundaciones y incendios forestales mediante una ventana deslizante de siete días. Cada registro del conjunto de resultados agrega los siete días anteriores, y los resultados contienen un registro por día en el período de análisis.
Esta es una explicación paso a paso de la consulta:
- Agrupe cada registro en un único día con respecto a
windowStart. - Agregue siete días al valor bin para establecer el final del intervalo para cada registro. Si el valor está fuera del intervalo de
windowStartywindowEnd, ajuste el valor en consecuencia. - Cree una matriz de siete días para cada registro, empezando por el día actual del registro.
- Expanda la matriz del paso 3 mediante mv-expand para duplicar cada registro a siete registros con intervalos de un día entre ellos.
- Realice las agregaciones para cada día. Debido al paso 4, este paso resume realmente los siete días anteriores.
- Excluya los primeros siete días del resultado final porque no hay ningún período de retrospección de siete días para esos días.
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
Salida
La siguiente tabla de resultados está truncada. Para ver la salida completa, ejecute la consulta.
| Marca de tiempo | EventType | min_PropiedadDeDaño | max_DamageProperty | avg_DamageProperty |
|---|---|---|---|---|
| 2007-07-08T00:00:00Z | Tornado | 0 | 30000 | 6905 |
| 2007-07-08T00:00:00Z | Inundación | 0 | 200000 | 9261 |
| 2007-07-08T00:00:00Z | Incendio forestal | 0 | 200000 | 14033 |
| 2007-07-09T00:00:00Z | Tornado | 0 | 100000 | 14783 |
| 2007-07-09T00:00:00Z | Inundación | 0 | 200000 | 12529 |
| 2007-07-09T00:00:00Z | Incendio forestal | 0 | 200000 | 14033 |
| 2007-07-10T00:00:00Z | Tornado | 0 | 100000 | 31400 |
| 2007-07-10T00:00:00Z | Inundación | 0 | 200000 | 12,263 |
| 2007-07-10T00:00:00Z | Incendio forestal | 0 | 200000 | 11694 |
| ... | ... | ... |
Paso siguiente
Ahora que está familiarizado con los operadores de consulta comunes y las funciones de agregación, vaya al siguiente tutorial para aprender a combinar datos de varias tablas.