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

Como criar séries temporais com make-series em KQL

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

O operador make-series em KQL transforma linhas de eventos numa série temporal contínua, com um ponto por cada intervalo de tempo — mesmo nos períodos em que não houve dados. É o que precisas para desenhar gráficos de tendência fiáveis e para aplicar as funções de análise de séries do KQL. Esta é a forma de criar séries temporais com make-series passo a passo, desde dados de exemplo até um gráfico de linhas, no Real-Time Analytics do Microsoft Fabric ou no Azure Data Explorer.

Pré-requisitos

  • Acesso a um KQL Queryset no Microsoft Fabric ou a um cluster do Azure Data Explorer.
  • Noções básicas de KQL: saber usar summarize e where ajuda, mas não é obrigatório.
  • Uma tabela com uma coluna de data/hora (datetime). Neste exemplo criamos os dados com datatable, por isso podes seguir sem qualquer tabela.

Passo 1: Perceber a diferença para o summarize

Com summarize ... by bin() obténs uma linha por cada intervalo que tem dados. Os dias sem eventos simplesmente não aparecem, o que cria "buracos" no gráfico. O make-series resolve isto: gera um eixo de tempo regular do início ao fim e preenche os intervalos vazios com um valor à tua escolha (por exemplo, 0). O resultado é uma única linha que contém arrays com todos os pontos da série. Sem esta grelha regular, uma quebra no gráfico pode parecer uma descida real quando afinal foram apenas dados em falta — e isso leva a leituras e a decisões erradas.

Passo 2: Preparar dados de exemplo

Vamos usar um pequeno conjunto de vendas. Repara que não há registos nos dias 2 e 5 de julho — é precisamente aí que o make-series vai brilhar.

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

Sem indicares um intervalo, o make-series usa a data mínima e máxima dos dados. Já obténs uma série, mas o ideal é controlares o início e o fim.

Passo 3: Definir início, fim e passo

Usa from, to e step para fixar a grelha temporal, e default=0 para preencher com zero os dias sem vendas:

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

Agora a série tem sempre 6 pontos (de 1 a 6 de julho), com 0 nos dias 2 e 5. A grelha fica regular, o que é essencial para comparar períodos e para usar as funções de série.

O step aceita qualquer intervalo de tempo: usa 1h para agrupar por hora, 15m a cada quinze minutos ou 7d por semana. Escolhe a granularidade que a tua análise precisa.

Passo 4: Uma série por categoria

Para comparar produtos, acrescenta by. Cada produto passa a ter a sua própria série, alinhada no mesmo eixo de tempo:

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

O resultado tem uma linha por produto, cada uma com o seu array TotalDiario.

Passo 5: Visualizar a tendência

O make-series encaixa diretamente no render timechart, que desenha um gráfico de linhas com o tempo no eixo 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

Verificar o resultado

Confirma que está correto de três formas: (1) a coluna TotalDiario aparece como um array (tipo dynamic); (2) cada array tem exatamente 6 valores, incluindo os zeros dos dias 2 e 5; (3) no gráfico, a linha é contínua e desce a zero nesses dias, em vez de "saltar" por cima. Se quiseres voltar a ter uma linha por dia, usa mv-expand para expandir os arrays.

Conclusão

Com o make-series passaste de eventos soltos para uma série temporal regular e pronta a analisar. O próximo passo natural é explorar as funções de série do KQL, como series_fir para médias móveis ou series_decompose_anomalies para detetar anomalias automaticamente. Qual vais experimentar primeiro no teu próximo painel de Real-Time Analytics?