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

Como agregar eventos de sessão em Real-Time Analytics: passo a passo

João Barros 06 de September de 2026 4 min de leitura

Este tutorial mostra como agregar eventos de sessão em Real-Time Analytics para obter métricas por sessão (duração, contagem de eventos, últimos atributos). Agregar por sessão é útil para análises de comportamento, medição de retenção e deteção de experiências anormais em tempo real.

Pré-requisitos

  • Conta e cluster com suporte a Real-Time Analytics (por exemplo, Azure Data Explorer / Kusto).
  • Dados de eventos com um identificador de sessão (sessionId), timestamp e tipo de evento.
  • Conhecimentos básicos de KQL (Kusto Query Language) e de ingestão de dados.

Passo 1: entender o objetivo e o esquema

Antes de escrever a query é importante saber quais colunas existem: sessionId, timestamp (datetime), eventType e, opcionalmente, userId e properties. O objetivo é agregar por sessionId e produzir métricas: start, end, duration, event_count, last_event_type.

Passo 2: filtrar e normalizar eventos

Filtre o intervalo temporal relevante e normalize o timestamp. Isto reduz o custo de processamento e evita incluir sessões antigas ou eventos fora da janela.

Events
| where Timestamp between (ago(1h) .. now())
| where isnotempty(sessionId)

Passo 3: agregar por sessão para métricas básicas

Use summarize para obter start, end e contagem. start=min(Timestamp) e end=max(Timestamp) fornecem o período da sessão; duration é a diferença entre ambos.

Events
| where Timestamp between (ago(1h) .. now())
| where isnotempty(sessionId)
| summarize
    session_start = min(Timestamp),
    session_end = max(Timestamp),
    event_count = count()
  by sessionId, userId
| extend duration_sec = todouble(session_end - session_start) / 1s

Passo 4: obter o último evento e outros atributos por sessão

Para saber o último tipo de evento ou o último valor de uma propriedade use arg_max que seleciona a linha com maior timestamp por sessão.

let sessions_basic = Events
| where Timestamp between (ago(1h) .. now())
| where isnotempty(sessionId)
| summarize
    session_start = min(Timestamp),
    session_end = max(Timestamp),
    event_count = count()
  by sessionId, userId;

let sessions_last = Events
| where Timestamp between (ago(1h) .. now())
| where isnotempty(sessionId)
| summarize arg_max(Timestamp, *) by sessionId;

sessions_basic
| join kind=inner (sessions_last) on sessionId
| project sessionId, userId, session_start, session_end, duration_sec, event_count, last_event_type = eventType, last_properties = properties

Passo 5: tratar sessões inativas e falsos positivos

Nem todos os sessionId representam sessões válidas. Defina um limiar mínimo de duração ou contagem de eventos para filtrar ruído (ex.: ignorar sessões com ≤1 evento ou duração <5s).

// Filtrar sessões muito curtas ou com poucos eventos
...
| where event_count > 1 and duration_sec > 5

Passo 6: produzir métricas agregadas em tempo real

Com as sessões processadas, calcule métricas agregadas por janela temporal (ex.: por minuto) para dashboards em Real-Time Analytics.

let sessions = (
  // query de sessão final do passo anterior
  Events
  | where Timestamp between (ago(1h) .. now())
  | where isnotempty(sessionId)
  | summarize session_start = min(Timestamp), session_end = max(Timestamp), event_count = count() by sessionId
  | extend duration_sec = todouble(session_end - session_start) / 1s
  | where event_count > 1 and duration_sec > 5
);

sessions
| summarize
    avg_duration = avg(duration_sec),
    sessions_count = count(),
    pct_long = 100.0 * sumif(1, duration_sec > 300) / count()
  by bin(session_start, 1m)
| order by session_start desc

Verificar o resultado

Para confirmar que tudo correu bem: 1) compare o número de eventos originais com a soma de event_count por sessionId (devem corresponder); 2) veja exemplos de sessões (limit 10) para inspecionar start/end; 3) valide as métricas agregadas num dashboard em tempo real e procure outliers (durações muito longas ou muito curtas).

Conclusão

Agora consegue agregar eventos por sessionId em Real-Time Analytics e gerar métricas por sessão e por janela temporal. Próximos passos: enriquecer com segmentação por userId, deviceType ou country e exportar sessões para um downstream ETL/streaming. Dica: se notar latência elevada, reduza a janela de consulta e pré-agrupa eventos na ingestão.