Analises Temporais com uma Dimensao de Datas
O desafio pedia uma dim_dates para sustentar o Data Warehouse. Construi a dimensao de datas e respondi as perguntas de negocio sobre o tempo — com um tratamento honesto dos dados: os dias de dump artificial foram excluidos para nao distorcer os padroes.
Por que uma dimensao de datas
Uma dimensao de datas (dim_dates) bem construida viabiliza analises temporais robustas sem recalcular atributos de calendario a cada consulta. Montei uma tabela com uma linha por dia, contendo trimestre, mes, dia da semana, semana do ano, se o mes tem a letra “R” no nome, se e par ou impar, e marcadores de inicio/fim de mes.
Tratamento honesto (regra de ouro): ao explorar as transacoes descobri que os dias 29 e 30/12/2022 concentram um “dump” artificial de ~20 mil registros — impossivel para um banco de ~1.000 contas, cuja media real e de ~12 transacoes/dia. Esses dias de outlier foram excluidos das analises de padrao temporal; caso contrario, Q4, dezembro e sexta-feira ficariam falsamente inflados. Restam 49.315 transacoes reais (de 71.999).
Como a dim_dates foi construida
No PostgreSQL, gerei o calendario com generate_series (1 linha por dia, 2010–2022) e derivei os atributos com funcoes de data nativas. As transacoes se ligam a dimensao por data_transacao::date, e as analises usam HAVING COUNT(*) <= 200 por dia para descartar o dump.
CREATE TABLE stg_banvic.dim_dates AS
SELECT data,
EXTRACT(QUARTER FROM data)::int AS trimestre,
EXTRACT(MONTH FROM data)::int AS mes,
EXTRACT(ISODOW FROM data)::int AS dia_semana_num,
INITCAP(TO_CHAR(data,'TMDay')) AS dia_semana_nome,
(EXTRACT(MONTH FROM data)::int % 2 = 0) AS mes_par,
(EXTRACT(MONTH FROM data)::int
IN (1,2,3,4,9,10,11,12)) AS mes_tem_r -- janeiRo, abRil...
FROM generate_series(DATE '2010-01-01', DATE '2022-12-31', INTERVAL '1 day') AS data;
Respostas com a dim_dates
1 · Qual trimestre lidera? O Q4 tem a maior media de transacoes (14,8/dia) e o maior volume (R$ 12 mil/dia).
2 · Meses com “R” diferem? Sim, ha diferenca (12,7 vs 11,4 tx/dia, p=0,001) — mas e sazonalidade (meses com R caem em Q4/Q1, mais movimentados), nao o efeito da letra.
3 · Qual dia da semana lidera? A quinta-feira tem a maior media de transacoes (12,6/dia) e de volume — embora as diferencas entre os dias sejam pequenas.
4 · Meses pares tem volume maior? Nao. Ao contrario do sugerido, os meses impares tem volume maior (R$ 11,5 mil vs R$ 9,6 mil/dia, p=0,022).
Placar das hipoteses
Outras 4 analises propostas com a dim_dates: (3) dia da semana e (4) par/impar acima; (5) sazonalidade mensal e efeito de feriados; (6) comportamento de inicio vs fim de mes (salarios, contas, propostas de credito). Todas exploram a mesma dimensao para gerar valor de negocio.