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

Como criar um mapa de calor por hora no Power BI: passo a passo

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

Este tutorial mostra como criar um mapa de calor por hora no Power BI para identificar padrões de atividade ao longo dos dias e horas. Um mapa de calor é útil para destacar picos, períodos ociosos e verificar sazonalidade diária de forma visual e imediata.

Pré-requisitos

  • Power BI Desktop instalado
  • Uma fonte de dados com timestamp (ex.: registos de eventos com coluna DateTime)
  • Noções básicas de Power Query e DAX

Passo 1: Preparar os dados no Power Query

Importa a tua tabela com a coluna DateTime para o Power Query. O objectivo é extrair o dia da semana e a hora para construir as dimensões do mapa de calor.

// No Power Query (Editor Avançado) um exemplo mínimo para adicionar colunas
let
  Fonte = Csv.Document(File.Contents("caminho\meus_dados.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),
  Promoted = Table.PromoteHeaders(Fonte, [PromoteAllScalars=true]),
  ChangedType = Table.TransformColumnTypes(Promoted,{{"DateTime","datetime"}}),
  Hora = Table.AddColumn(ChangedType, "Hour", each Date.Hour([DateTime]), Int64.Type),
  DiaSemana = Table.AddColumn(Hora, "Weekday", each Date.DayOfWeekName(Date.From([DateTime]), "pt-PT"))
in
  DiaSemana

Explicação: criámos as colunas Hour (0–23) e Weekday (segunda-feira, terça-feira, ...). Poderás também normalizar nomes ou criar uma ordem numérica para os dias se quiseres ordenar depois no visual.

Passo 2: Criar tabela de dias ordenada

Para garantir a ordenação correcta dos dias no eixo do mapa (segunda-feira a domingo), cria uma pequena tabela em DAX com ordem implícita.

WeekdayOrder =
DATATABLE(
  "Weekday", STRING,
  "Order", INTEGER,
  {
    {"segunda-feira",1}, {"terça-feira",2}, {"quarta-feira",3},
    {"quinta-feira",4}, {"sexta-feira",5}, {"sábado",6}, {"domingo",7}
  }
)

Depois relaciona WeekdayOrder[Weekday] com a coluna Weekday da tabela de eventos. Define WeekdayOrder[Order] como coluna de ordenação para WeekdayOrder[Weekday]. Isto evita a ordenação alfabética.

Passo 3: Criar medidas de contagem e normalização

Cria medidas DAX para contar eventos por combinação de dia e hora. Uma medida simples e outra normalizada (percentual) ajudam na visualização.

ContagemEventos = COUNTROWS('Eventos')

EventosPorCelula =
CALCULATE(
  [ContagemEventos],
  ALLEXCEPT('Eventos', 'Eventos'[Weekday], 'Eventos'[Hour])
)

EventosPercentual =
DIVIDE(
  [EventosPorCelula],
  CALCULATE([ContagemEventos], ALL('Eventos'[Hour])),
  0
)

Explicação: EventosPorCelula agrega por Weekday+Hour; EventosPercentual normaliza pelo total (opcional para cores relativas).

Passo 4: Escolher o visual e construir a matriz

Para um mapa de calor simples podes usar a visualização Matrix nativa com formatação condicional. Outra opção é um visual de terceiros tipo "Heatmap" no AppSource. Aqui usamos a Matrix:

  1. Insere uma Matrix no relatório.
  2. Rows: WeekdayOrder[Weekday] (já ordenada).
  3. Columns: Eventos[Hour].
  4. Values: EventosPorCelula (ou EventosPercentual).

Em seguida aplica formatação condicional: em Values escolhe Background color scales e define escala de cor (ex.: azul claro -> vermelho escuro). Selecciona mínimo, médio e máximo ou quantis para destacar valores médios e extremos.

Passo 5: Ajustes visuais e interacções

Melhora a leitura com estas pequenas alterações:

  • Mostrar cabeçalhos das colunas rotacionados para economizar espaço (Column headers > Word wrap).
  • Definir formato de número sem casas decimais para contagens.
  • Adicionar um slicer de data para filtrar por período (mês/intervalo).
  • Configurar Tooltip para mostrar total do dia e média por hora usando medidas adicionais.

Verificar o resultado

Valida o mapa de calor verificando: 1) A ordenação dos dias está correcta (segunda-feira→domingo); 2) As horas aparecem de 0 a 23; 3) As cores seguem a lógica das tuas medidas (picos visíveis). Testa filtros de data para ver se os padrões mudam como esperado e compara alguns totais com uma tabela simples para confirmar as contagens.

Conclusão

Passaste de registos temporais brutos a um mapa de calor por hora no Power BI, útil para descobrir picos e comportamentos horários. Próximos passos: experimentar normalizações diferentes (por dia ou por hora), usar um visual de Heatmap do AppSource para layouts mais ricos, ou combinar com R/Python para smoothing. Dica: se vires valores inesperados, confirma sempre fusos horários e conversões de DateTime.