Torna-se assim criar a dimensão Hora do Dia, ou dimensão Tempo, cuja granularidade será o minuto. No inglês seria "Time-of-day" ou só "Time". Em português vou utilizar o termo Hora do Dia.
Assim a dimensão Hora do Dia terá os seguintes campos:
Continuar a ler em www.blogdorui.pt
ResponderExcluirDROP TABLE #DIM_HORA
CREATE TABLE #DIM_HORA(
ID_DIM_HORA VARCHAR(4) NOT NULL PRIMARY KEY,
HORA smallint NOT NULL,
MINUTO smallint NOT NULL,
PERIODO varchar(15) NOT NULL
)
DECLARE @ID_DIM_HORA VARCHAR(4)
DECLARE @HORA smallint
DECLARE @MINUTO smallint
DECLARE @PERIODO varchar(15)
DECLARE @countHora SMALLINT
DECLARE @countMinuto SMALLINT
SET @countHora = 0
SET @countMinuto = 0
WHILE @countHora <= 23
BEGIN
SET @HORA = @countHora
SET @countMinuto = 0
WHILE @countMinuto < 60
BEGIN
SET @MINUTO = @countMinuto
SET @ID_DIM_HORA = REPLICATE('0', 2 - LEN(CONVERT(VARCHAR(2),@HORA))) + RTrim(CONVERT(VARCHAR(2),@HORA)) + REPLICATE('0', 2 - LEN(CONVERT(VARCHAR(2),@MINUTO))) + RTrim(CONVERT(VARCHAR(2),@MINUTO))
SET @PERIODO =
CASE
WHEN @HORA >= 0 AND @HORA < 6 THEN 'MADRUGADA'
WHEN @HORA >= 6 AND @HORA < 12 THEN 'MANHÃ'
WHEN @HORA >= 12 AND @HORA < 18 THEN 'TARDE'
WHEN @HORA >= 18 AND @HORA < 24 THEN 'NOITE'
END
INSERT INTO #DIM_HORA(ID_DIM_HORA,HORA,MINUTO,PERIODO)
SELECT @ID_DIM_HORA, @HORA, @MINUTO, @PERIODO
SET @countMinuto = @countMinuto+1
END
SET @countHora = @countHora+1
END
INSERT INTO #DIM_HORA values ('9999', -2,-2,'NÃO CADASTRADO');
INSERT INTO #DIM_HORA values ('9998', -1,-1,'NÃO SE APLICA');
SELECT
dh.ID_DIM_HORA,
dh.HORA,
dh.MINUTO,
dh.PERIODO
FROM
#DIM_HORA dh