Parte 2 – Filtrado, agregación y manipulación de datos con KQL
- Ahias Portillo
- Nov 24, 2024
- 2 min read
Updated: 6 days ago

En esta segunda entrega vamos a profundizar en las operaciones más utilizadas al trabajar con KQL (Kusto Query Language): cómo filtrar con precisión, cómo agrupar datos temporalmente, cómo calcular métricas agregadas relevantes y cómo aplicar lógica condicional.
Estas técnicas son fundamentales si estás trabajando con informes financieros, KPIs, detección de anomalías o visualización en tiempo real, tanto en Kusto DB (Microsoft Fabric) como en Azure Data Explorer.
Ejemplo de base: tabla TransaccionesFinancieras
Supongamos que estamos analizando una tabla de eventos financieros con la siguiente estructura:
Campo | Tipo | Descripción |
Fecha | datetime | Fecha y hora de la transacción |
ClienteID | string | ID del cliente |
Monto | real | Valor monetario de la transacción |
TipoTransaccion | string | "Compra", "Retiro", "Transferencia", etc. |
Canal | string | "Web", "App", "Sucursal", "Cajero", etc. |
Estado | string | "Exitosa", "Rechazada", "Pendiente" |
CategoriaProducto | string | "Cuenta corriente", "Tarjeta", "Crédito", etc. |
summarize con by, count(), avg(), percentiles
La operación summarize es la columna vertebral para el análisis agregado en KQL.
Total de transacciones por canal
TransaccionesFinancieras | summarize Total = count() by Canal |
Promedio de monto por tipo de transacción
TransaccionesFinancieras | summarize PromedioMonto = avg(Monto) by TipoTransaccion |
Percentiles de monto por producto financiero
TransaccionesFinancieras | summarize P50 = percentile(Monto, 50), P95 = percentile(Monto, 95) by CategoriaProduct |
Agrupaciones temporales: bin() y ago()
Ideal para generar gráficas de tendencias y series temporales.
Monto total por día en la última semana
TransaccionesFinancieras | where Fecha > ago(7d) | summarize MontoTotal = sum(Monto) by bin(Fecha, 1d) | order by Fecha asc |
***El operador bin() agrupa las fechas en intervalos regulares. Puedes usar 1h, 15m, 1d, etc.
Filtros más complejos: múltiples condiciones
Transacciones sospechosas: altas, por App y con estado pendiente
TransaccionesFinancieras | where Monto > 10000 and Canal == "App" and Estado == "Pendiente" |
Lógica condicional: case() y iif()
Puedes categorizar datos según reglas lógicas.
Clasificación de riesgo por monto
TransaccionesFinancieras | extend NivelRiesgo = case( Monto >= 10000, "Alto", Monto >= 5000, "Medio", "Bajo") | summarize Total = count() by NivelRiesgo |
Operadores condicionales: has, contains, startswith
Buscar transacciones relacionadas con productos "crédito"
TransaccionesFinancieras | extend NivelRiesgo = case( Monto >= 10000, "Alto", Monto >= 5000, "Medio", "Bajo") | summarize Total = count() by NivelRiesgo |
Filtrar transacciones con notas internas que incluyan “revisión manual”
TransaccionesFinancieras | extend NivelRiesgo = case( Monto >= 10000, "Alto", Monto >= 5000, "Medio", "Bajo") | summarize Total = count() by NivelRiesgo |
Resumen:
Las funciones de agregación y filtrado en KQL son poderosas, intuitivas y altamente performantes incluso con millones de registros.
El uso de summarize, bin(), case() y contains permite generar insights listos para consumir por analistas o sistemas automatizados.
Estos patrones son el corazón de cualquier dashboard financiero operativo, de riesgos o comportamiento transaccional.
Comienza con consultas simples y ve optimizándolas: KQL permite refactorizar consultas en tiempo real y encadenar lógicas de análisis sin escribir procedimientos complejos.
***Este contenido fue potenciado con IA. Porque cuando el conocimiento humano se encuentra con la inteligencia artificial, surgen mejores ideas.***
#KQL #KustoQueryLanguage #MicrosoftFabric #DataAnalytics #Finanzas #PowerBI #Dashboards #ArquitecturaDeDatos #EventStreams #KustoDB #QueryOptimization #TimeSeries #AnálisisFinanciero #AzureDataExplorer
コメント