Media por ventana en Real-Time Analytics: paso a paso
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.