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

Media por ventana en Real-Time Analytics: paso a paso

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

Esta guía muestra cómo calcular una media por ventana en Real-Time Analytics usando Azure Stream Analytics y enviar los resultados a Power BI. La técnica de media por ventana en Azure Stream Analytics es útil para resumir telemetría (por ejemplo, temperatura) en intervalos fijos y visualizar tendencias en tiempo real.

Pre-requisitos

  • Cuenta Azure con permisos para crear recursos.
  • Un Event Hubs (o IoT Hub) con eventos de telemetría.
  • Un Azure Stream Analytics job creado (puede ser en modo Standard).
  • Power BI con un workspace donde crear un streaming dataset.

Paso 1: Preparar el origen de eventos (Event Hubs)

Envía eventos JSON al Event Hubs con un esquema simple: DeviceId, temperature y timestamp. Mantén el timestamp en ISO8601 o usa el tiempo del Event Hub.

{
  "DeviceId": "dev01",
  "temperature": 22.5,
  "timestamp": "2026-07-01T12:00:00Z"
}

Si necesitas enviar eventos de prueba, puedes usar un pequeño script Python (instalar azure-eventhub) para empaquetar y enviar un lote:

from azure.eventhub import EventHubProducerClient, EventData

conn_str = ""
eh_name = ""
producer = EventHubProducerClient.from_connection_string(conn_str, eventhub_name=eh_name)

batch = producer.create_batch()
batch.add(EventData('{"DeviceId":"dev01","temperature":22.5,"timestamp":"2026-07-01T12:00:00Z"}'))
producer.send_batch(batch)
producer.close()

Paso 2: Crear Input y Output en Azure Stream Analytics

En el portal Azure, abre tu Azure Stream Analytics job y configura:

  • Input: tipo Event Hub, apunta al namespace y al event hub en el que llegan los eventos.
  • Output: añade un Power BI output (elige el workspace y da un nombre al dataset/table donde aparecerán los resultados).

Paso 3: Escribir la query de agregación (media por ventana)

Usa una ventana tumbling para calcular la media de temperatura por dispositivo en intervalos fijos (por ejemplo, 1 minuto). La query abajo realiza la agregación y envía al output configurado.

SELECT
  DeviceId,
  AVG(CAST(temperature AS float)) AS AvgTemp,
  System.Timestamp AS WindowEnd
INTO
  [PowerBIOutput]
FROM
  [EventHubInput] TIMESTAMP BY EventEnqueuedUtcTime
GROUP BY
  DeviceId,
  TumblingWindow(minute, 1)

Explicación rápida de lo que hace cada parte:

  • TIMESTAMP BY EventEnqueuedUtcTime: usa el tiempo de llegada del evento al Event Hubs (ajusta si tienes un campo timestamp en el payload).
  • TumblingWindow(minute, 1): agrupa eventos en ventanas consecutivas de 1 minuto (sin solapamiento).
  • AVG(...) calcula la media de temperatura por dispositivo en esa ventana.

Paso 4: Mapear campos y arrancar el job

En el output de Power BI, asegúrate de mapear los campos DeviceId, AvgTemp y WindowEnd a columnas del streaming dataset. Guarda la query y arranca el Stream Analytics job (Start). Mientras el job esté en ejecución, los resultados comenzarán a enviarse a Power BI en cada ventana.

Paso 5: Visualizar en Power BI

En Power BI, crea un dashboard con un tile que consuma el streaming dataset. Ejemplos útiles:

  • Gráfico de líneas con WindowEnd en el eje X y AvgTemp en el eje Y (agrupar por DeviceId para varias series).
  • Card para la AvgTemp más reciente de un dispositivo.

Esto permite ver actualizaciones minuto a minuto de las medias calculadas.

Verificar el resultado

Para confirmar que está correcto:

  • Envía eventos de prueba y observa si aparecen en Power BI conforme a las ventanas (cada minuto en el ejemplo).
  • En el portal de Azure, consulta el Job Diagram y las métricas de Stream Analytics (Input Events, Output Events, Watermark delay) para garantizar que no hay retrasos significativos.
  • Si los resultados están a ceros o vacíos, confirma el mapeo de campos y si los nombres JSON coinciden con los usados en la query (y si el TIMESTAMP BY está correcto).

Conclusión

Con este flujo básico puedes calcular medias por ventana en tiempo real y visualizarlas en Power BI. Próximos pasos naturales: cambiar a HoppingWindow para medias móviles con solapamiento, usar un campo timestamp del payload para mayor precisión, o aplicar filtrado y detección de anomalías. Consejo: si observas latencia, verifica el timestamp usado (EventEnqueuedUtcTime vs timestamp en el payload) y ajusta la tolerancia del job.