Dashboard RH — Como foi feito (explicado fácil)
RH precisa saber: "quantos somos hoje, quantos contratamos, quantos saíram, e a taxa de saída tá normal?". Pra responder bem, tem uma pegadinha — a base só tem eventos (admissão/demissão). Eu preciso reconstruir o "estado atual" mês a mês.
O que é isso, em uma frase?
É um painel no Power BI que entrega 4 indicadores fundamentais de RH: headcount, contratações, demissões e turnover anualizado, com estrutura hierárquica por área e cargo.
Por que importa? Porque RH bom é o que vê o problema antes dele estourar. Turnover subindo numa área específica? Reunião antes da próxima demissão, não depois.
Reconstruir o "estado atual" mês a mês
1 · A pegadinha: a base tem 1 linha por evento — "Maria foi admitida em jan/22", "João foi demitido em ago/23". Mas pra saber o headcount em mar/23, preciso varrer todo histórico até essa data e ver quem estava ativo.
2 · A solução: tabela calculada de status mensal. Crio uma tabela DAX que enumera meses × colaboradores e marca ativo/inativo de cada um em cada mês.
fato_status_mensal =
SUMMARIZECOLUMNS (
dim_tempo[YearMonth],
dim_colaborador[Id_Colaborador],
"Status",
IF (
dim_colaborador[Data_Admissao] <= MAX ( dim_tempo[Date] )
&& ( ISBLANK ( dim_colaborador[Data_Demissao] )
|| dim_colaborador[Data_Demissao] > MAX ( dim_tempo[Date] ) ),
"Ativo",
"Inativo"
)
)
Agora o headcount sai com 1 linha de DAX.
3 · Headcount, contratações, demissões.
Headcount Atual =
CALCULATE (
DISTINCTCOUNT ( fato_status_mensal[Id_Colaborador] ),
fato_status_mensal[Status] = "Ativo"
)
Contratacoes Mes =
CALCULATE ( COUNTROWS ( fato_movimentacao ),
fato_movimentacao[TipoEvento] = "Admissao" )
Demissoes Mes =
CALCULATE ( COUNTROWS ( fato_movimentacao ),
fato_movimentacao[TipoEvento] = "Demissao" )
4 · Turnover anualizado — o KPI mais pedido. Fórmula RH clássica: demissões nos últimos 12 meses / headcount médio do período.
Turnover Anualizado % =
VAR _demis_12m =
CALCULATE (
[Demissoes Mes],
DATESINPERIOD (
dim_tempo[Date],
MAX ( dim_tempo[Date] ),
-12, MONTH
)
)
VAR _hc_medio =
AVERAGEX ( VALUES ( dim_tempo[YearMonth] ), [Headcount Atual] )
RETURN
DIVIDE ( _demis_12m, _hc_medio )
Régua de leitura: <10% saudável, 10-20% atenção, >20% problema sério.
5 · Visual. Pirâmide por nível hierárquico, mapa de calor de turnover por área, evolução temporal das movimentações. Cada slicer filtra todos os visuais ao mesmo tempo.
O painel final
Em uma linha: o que esse projeto ensina
Que "estado atual" a partir de "histórico de eventos" é um dos padrões mais comuns em BI. Saber resolver isso em DAX (com tabela calculada) é skill muito procurado.
Coisas técnicas que apareceram aqui: SUMMARIZECOLUMNS para tabela calculada, lógica condicional dentro de DAX, DATESINPERIOD, AVERAGEX para média sobre dimensão, fórmula RH de turnover anualizado.