(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo crear series temporales con make-series en KQL

João Barros 07 de July de 2026 4 min de lectura

El operador make-series en KQL convierte filas de eventos en una serie temporal continua, con un punto por cada intervalo de tiempo, incluso en los periodos en los que no hubo datos. Es lo que necesitas para dibujar gráficos de tendencia fiables y para aplicar las funciones de análisis de series de KQL. Así es como crear series temporales con make-series paso a paso, desde datos de ejemplo hasta un gráfico de líneas, en Real-Time Analytics de Microsoft Fabric o en Azure Data Explorer.

Requisitos previos

  • Acceso a un KQL Queryset en Microsoft Fabric o a un clúster de Azure Data Explorer.
  • Conocimientos básicos de KQL: saber usar summarize y where ayuda, pero no es obligatorio.
  • Una tabla con una columna de fecha/hora (datetime). En este ejemplo creamos los datos con datatable, así que puedes seguirlo sin ninguna tabla.

Paso 1: Entender la diferencia con summarize

Con summarize ... by bin() obtienes una fila por cada intervalo que tiene datos. Los días sin eventos simplemente no aparecen, lo que deja "huecos" en el gráfico. make-series lo resuelve: genera un eje de tiempo regular de principio a fin y rellena los intervalos vacíos con un valor que tú elijas (por ejemplo, 0). El resultado es una única fila que contiene arrays con todos los puntos de la serie. Sin esta rejilla regular, un corte en el gráfico puede parecer una caída real cuando solo faltaban datos, y eso lleva a lecturas y decisiones equivocadas.

Paso 2: Preparar datos de ejemplo

Vamos a usar un pequeño conjunto de ventas. Fíjate en que no hay registros los días 2 y 5 de julio: es justo ahí donde make-series brilla.

let Vendas = datatable(Timestamp:datetime, Produto:string, Valor:real)
[
    datetime(2026-07-01 09:15), "A", 120,
    datetime(2026-07-01 11:40), "B", 80,
    datetime(2026-07-03 14:05), "A", 200,
    datetime(2026-07-04 10:00), "B", 150,
    datetime(2026-07-06 16:30), "A", 90
];
Vendas
| make-series TotalDiario = sum(Valor) on Timestamp step 1d

Sin indicar un rango, make-series usa la fecha mínima y máxima de los datos. Ya obtienes una serie, pero lo ideal es controlar el inicio y el fin.

Paso 3: Definir inicio, fin y paso

Usa from, to y step para fijar la rejilla temporal, y default=0 para rellenar con cero los días sin ventas:

Vendas
| make-series TotalDiario = sum(Valor) default=0
    on Timestamp
    from datetime(2026-07-01) to datetime(2026-07-07) step 1d

Ahora la serie siempre tiene 6 puntos (del 1 al 6 de julio), con 0 los días 2 y 5. La rejilla queda regular, algo esencial para comparar periodos y para usar las funciones de serie.

El step acepta cualquier intervalo de tiempo: usa 1h para agrupar por hora, 15m cada quince minutos o 7d por semana. Elige la granularidad que tu análisis necesite.

Paso 4: Una serie por categoría

Para comparar productos, añade by. Cada producto pasa a tener su propia serie, alineada en el mismo eje de tiempo:

Vendas
| make-series TotalDiario = sum(Valor) default=0
    on Timestamp
    from datetime(2026-07-01) to datetime(2026-07-07) step 1d
    by Produto

El resultado tiene una fila por producto, cada una con su propio array TotalDiario.

Paso 5: Visualizar la tendencia

make-series encaja directamente con render timechart, que dibuja un gráfico de líneas con el tiempo en el eje horizontal:

Vendas
| make-series TotalDiario = sum(Valor) default=0
    on Timestamp
    from datetime(2026-07-01) to datetime(2026-07-07) step 1d
    by Produto
| render timechart

Comprobar el resultado

Confirma que es correcto de tres formas: (1) la columna TotalDiario aparece como un array (tipo dynamic); (2) cada array tiene exactamente 6 valores, incluidos los ceros de los días 2 y 5; (3) en el gráfico, la línea es continua y baja a cero esos días en lugar de "saltar" por encima. Si quieres volver a tener una fila por día, usa mv-expand para expandir los arrays.

Conclusión

Con make-series has pasado de eventos sueltos a una serie temporal regular y lista para analizar. El siguiente paso natural es explorar las funciones de serie de KQL, como series_fir para medias móviles o series_decompose_anomalies para detectar anomalías automáticamente. ¿Cuál vas a probar primero en tu próximo panel de Real-Time Analytics?