top of page

Parte 4: Funciones, Series Temporales y Análisis Avanzado con KQL

Updated: Apr 1

Ya dominás lo básico de KQL, sabés escribir filtros, agrupar datos, unir fuentes y hasta visualizar directamente con render. Pero cuando trabajás con datos históricos, flujos en tiempo real o querés detectar anomalías o tendencias, necesitás ir más allá.


En esta cuarta entrega, nos metemos en el terreno de las series de tiempo, las funciones avanzadas, y las ventanas de análisis, que te van a permitir construir consultas verdaderamente potentes para monitoreo, predicción y análisis de comportamiento.


¿Por qué trabajar con series de tiempo en KQL?

Muchos de los datos que manejamos especialmente en sectores como finanzas, retail, IoT o seguridad son eventos ordenados cronológicamente: transacciones, precios, tasas, operaciones, lecturas, etc.


Y cuando tenés datos en secuencia temporal, podés:


  • Detectar anomalías (valores inesperados o picos).

  • Medir tendencias o patrones (subidas, bajadas, estacionalidades).

  • Realizar predicciones simples (proyecciones lineales).

  • Aplicar lógica de comparación con valores anteriores o posteriores.


Kusto está diseñado para esto. Tiene funciones nativas, altamente optimizadas, y sintaxis declarativa que te permite hacer en una línea lo que en otros motores lleva cientos.


Funciones de ventana: comparando eventos en el tiempo

Las funciones de ventana te permiten trabajar con registros “vecinos”: anteriores, siguientes, o en rangos. Muy útil para detectar diferencias, marcar outliers o crear indicadores acumulativos.


  • Principales funciones:

    • row_number() – asigna un número incremental a cada fila en una partición.

    • prev() y next() – permiten acceder al valor anterior o siguiente en el orden.

    • rank() – ordena registros dentro de un grupo.


  • Ejemplo: calcular la variación de saldo diaria por cliente

Esto permite ver cuánto cambia el saldo día a día, clave para detectar retiros fuertes, depósitos atípicos o errores de cálculo.


SaldosDiarios

| where Fecha >= ago(30d)

| sort by ClienteID, Fecha

| extend SaldoAnterior = prev(Saldo)

| extend Variacion = Saldo - SaldoAnterior

| project Fecha, ClienteID, Saldo, SaldoAnterior, Variacion


Creando series con make-series

Cuando querés generar una línea de tiempo agregada, make-series te permite construir series de tiempo densas, agrupadas por un intervalo fijo.


  • Ejemplo: volumen de transacciones en USD por día

Ideal para graficar series continuas, incluso si hay días sin datos (los llena con nulls o ceros, según configures).

Transacciones

| where Moneda == "USD"

| make-series MontoTotal = sum(Monto) on Fecha in range(ago(30d), now(), 1d)


Trabajando con datos multivaluados: extend, mv-expand, mv-apply

En muchos casos, especialmente cuando hacés parsing de campos dinámicos o cargas de JSON, podés tener columnas con múltiples valores por fila. Para tratarlas:


  • mv-expand explota cada valor en una nueva fila.

  • mv-apply permite aplicar lógica a cada valor.

  • extend te permite transformar o desanidar columnas.


  • Ejemplo: analizar múltiples productos en una transacción

Esto explota el array de productos comprados y los transforma en filas, permitiendo análisis por ítem.

Transacciones

| extend Productos = parse_json(ItemsComprados)

| mv-expand Producto = Productos

| project Fecha, ClienteID, Producto.Nombre, Producto.Valor


Detección de anomalías con series_decompose_anomalies

Este operador te permite detectar automáticamente comportamientos atípicos en una serie de tiempo. Es uno de los superpoderes de KQL, porque te da una señal clara sobre picos, caídas o datos fuera del patrón histórico.


  • Ejemplo: detectar picos en transferencias diarias

Devuelve un array de flags (0/1) marcando qué puntos son considerados anómalos. Perfecto para alertas o validaciones automatizadas


Transacciones

| where Tipo == "Transferencia"

| make-series Total = sum(Monto) on Fecha in range(ago(30d), now(), 1d)

| extend (Trend, Seasonality, Residual, Anomalies) = series_decompose_anomalies(Total)

| project Fecha, Total, Anomalies

Predicción simple con series_fit_line

Si querés hacer una proyección lineal (por ejemplo, cuánto se espera que crezca el volumen de una operación), esta función ajusta una línea de regresión sobre tu serie.


  • Ejemplo: proyectar el crecimiento en pagos electrónicos

Ideal para análisis de tendencias, especialmente si necesitás presentar crecimiento, desaceleración o estacionalidad en tus métricas clave.


PagosElectronicos

| make-series Total = sum(Monto) on Fecha in range(ago(30d), now(), 1d)

| extend (Slope, Intercept, R2, LineaAjustada) = series_fit_line(Total)

| project Fecha, Total, LineaAjustada


***Este contenido fue potenciado con IA. Porque cuando el conocimiento humano se encuentra con la inteligencia artificial, surgen mejores ideas.***


Comments


Empoderando a los entusiastas de los datos en América Latina

Connect with Us

  • YouTube
  • Facebook
  • TikTok
  • Twitter

© 2023 BI LATAM. All Rights Reserved.

bottom of page