Como criar um mapa de calor por hora no Power BI: passo a passo
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:
- Insere uma Matrix no relatório.
- Rows: WeekdayOrder[Weekday] (já ordenada).
- Columns: Eventos[Hour].
- 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.