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

Média por janela em Real-Time Analytics: passo a passo

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

Este guia mostra como calcular uma média por janela em Real-Time Analytics usando Azure Stream Analytics e enviar os resultados para o Power BI. A técnica de média por janela em Azure Stream Analytics é útil para resumir telemetria (por exemplo, temperatura) em intervalos fixos e visualizar tendências em tempo real.

Pré-requisitos

  • Conta Azure com permissões para criar recursos.
  • Um Event Hubs (ou IoT Hub) com eventos de telemetria.
  • Um Azure Stream Analytics job criado (pode ser em modo Standard).
  • Power BI com um workspace onde criar um streaming dataset.

Passo 1: Preparar a origem de eventos (Event Hubs)

Envia eventos JSON para o Event Hubs com um esquema simples: DeviceId, temperature e timestamp. Mantém o timestamp em ISO8601 ou usa o tempo do Event Hub.

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

Se precisares de enviar eventos de teste, podes usar um pequeno script Python (instalar azure-eventhub) para empacotar e enviar um 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()

Passo 2: Criar Input e Output no Azure Stream Analytics

No portal Azure, abre o teu Azure Stream Analytics job e configura:

  • Input: tipo Event Hub, aponta para o namespace e o event hub em que os eventos chegam.
  • Output: adiciona um Power BI output (escolhe o workspace e dá um nome ao dataset/table onde os resultados irão aparecer).

Passo 3: Escrever a query de agregação (média por janela)

Usa uma janela tumbling para calcular a média de temperatura por dispositivo em intervalos fixos (por exemplo, 1 minuto). A query abaixo faz a agregação e envia para o 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)

Explicação rápida do que faz cada parte:

  • TIMESTAMP BY EventEnqueuedUtcTime: usa o tempo de chegada do evento no Event Hubs (ajusta se tiveres um campo timestamp no payload).
  • TumblingWindow(minute, 1): agrupa eventos em janelas consecutivas de 1 minuto (sem sobreposição).
  • AVG(...) calcula a média de temperatura por dispositivo nessa janela.

Passo 4: Mapear campos e arrancar o job

No output do Power BI, certifica-te de que fazes o mapeamento dos campos DeviceId, AvgTemp e WindowEnd para colunas do streaming dataset. Guarda a query e arranca o Stream Analytics job (Start). Enquanto o job estiver a correr, os resultados começam a ser enviados para o Power BI em cada janela.

Passo 5: Visualizar no Power BI

No Power BI, cria um dashboard com um tile que consome o streaming dataset. Exemplos úteis:

  • Gráfico de linhas com WindowEnd no eixo X e AvgTemp no eixo Y (agrupar por DeviceId para múltiplas séries).
  • Card para o AvgTemp mais recente de um dispositivo.

Isto permite ver actualizações minuto a minuto das médias calculadas.

Verificar o resultado

Para confirmar que está correcto:

  • Envia eventos de teste e observa se aparecem no Power BI conforme as janelas (cada minuto no exemplo).
  • No portal do Azure, vê o Job Diagram e as métricas do Stream Analytics (Input Events, Output Events, Watermark delay) para garantir que não há atrasos significativos.
  • Se os resultados estiverem a zeros ou vazios, confirma o mapeamento de campos e se os nomes JSON coincidem com os usados na query (e se o TIMESTAMP BY está correcto).

Conclusão

Com este fluxo básico consegues calcular médias por janela em tempo real e visualizar no Power BI. Próximos passos naturais: mudar para HoppingWindow para médias móveis com sobreposição, usar um campo timestamp do payload para maior precisão, ou aplicar filtragem e deteção de anomalias. Dica: se observares latência, verifica o timestamp usado (EventEnqueuedUtcTime vs timestamp no payload) e ajusta a tolerância do job.