Emprestado de BI, fazer agrupamentos que mostre dados em dimensão de tempo é uma ferramenta
de grande ajuda.
São diversas as situações onde é aplicável dimensionamento de dados por tempo – melhor utilizar
exemplos:
Ex: Deseja saber qual dia da semana as vendas são mais concentradas – Seg, Ter, Qua, Qui, Sex,
Sab, Dom….
with CTE as ( select data,wdia,cdia from DIM_DATE('12/01/2015','12/31/2015') ) Select d.wdia as dia, d.cdia as cdia, sum(valor) as Valor from cte d join TAB_VENDAS a on (d.data=a.data) group by d.wdia,d.cdia
Código para a procedure DIM_DATE:
SET TERM ^ ; CREATE OR ALTER PROCEDURE DIM_DATE ( p_data_de date, p_data_ate date) returns ( data date, dia integer, wdia integer, cdia varchar(1), mes integer, ano integer, semestre integer, trimestre integer, nsemana integer, inimes date, fimmes date) as declare variable dt date; begin dt = :p_data_de; while (dt <= :p_data_ate ) do begin data = :dt; dia = extract(day from :dt); wdia = extract(weekday from :dt); -- cdia base cdia = substr('DSTQQSS',wdia+1,wdia+1); mes = extract(month from :dt); ano = extract(year from :dt); semestre = case when mes<=6 then 1 else 2 end; trimestre = trunc((mes-1) / 3)+1; inimes = :dt - dia +1; fimmes = dateadd(month, 1,:inimes) - 1; nsemana = extract(week from :data); suspend; dt = dt+1; end end^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE DIM_DATE TO SYSDBA;