La red del Business Intelligence
Buenas.
Este post esta basado en el de il-masacratore, más precisamente en su última entrada: Estructura de la dimesión tiempo y script de carga para SQLServer. Tal y como dice il-masacratore casi siempre existen una serie de dimensiones que son comunes para todo DW, la dimensión Tiempo es una de ellas.
El objetivo de este post es traducir lo hecho por il-masacratore (SQLServer) para que pueda ser ejecutado en MySQL.
Cabe destacar que esta estructura y su consiguiente procedure, tienen fines explicativos y ejemplificadores, para que cada unx pueda luego crear su propia Dimensión Tiempo de acuerdo a sus necesidades y preferencias.
CREACION DE ESTRUCTURA DE LA DIMENSION TIEMPO
CREATE TABLE `dwventas`.`DIM_TIEMPO` (
`FechaSK` int(11) NOT NULL,
`Fecha` date NOT NULL,
`Anio` smallint(6) NOT NULL,
`Trimestre` smallint(6) NOT NULL,
`Mes` smallint(6) NOT NULL,
`Semana` smallint(6) NOT NULL,
`Dia` smallint(6) NOT NULL,
`DiaSemana` smallint(6) NOT NULL,
`NTrimestre` varchar(7) NOT NULL,
`NMes` varchar(15) NOT NULL,
`NMes3L` varchar(3) NOT NULL,
`NSemana` varchar(11) NOT NULL,
`NDia` varchar(15) NOT NULL,
`NDiaSemana` varchar(15) NOT NULL,
PRIMARY KEY (`FechaSK`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREACION DEL PROCEDURE DE CARGA
DELIMITER $$
DROP PROCEDURE IF EXISTS `dwventas`.`antDIM_TIEMPO`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `antDIM_TIEMPO`()
BEGIN
delete from DIM_TIEMPO;
SELECT '2006-01-01' INTO @fi;
SELECT '2009-07-29' INTO @ff;
while (@fi <= @ff) DO
INSERT INTO DIM_TIEMPO
(
FechaSK,
Fecha,
Anio,
Trimestre,
Mes,
Semana,
Dia,
DiaSemana,
NTrimestre,
NMes,
NMes3L,
NSemana,
NDia,
NDiaSemana
)
SELECT year(@fi)*10000+month(@fi)*100+day(@fi) as FechaSK,
(@fi) Fecha,
year(@fi) Anio,
quarter(@fi) Trimestre,
month(@fi) Mes,
week(@fi) Semana,
RIGHT(concat('0',day(@fi)),2) Dia,
weekday(@fi) DiaSemana,
concat('T',quarter(@fi),'/',year(@fi))NTrimestre,
monthname(@fi) NMes,
LEFT(monthname(@fi),3) NMes3L,
concat('Sem ',week(@fi) ,'/', year(@fi)) NSemana,
concat(RIGHT(concat('0',day(@fi)),2),' ',monthname(@fi)) NDia,
dayname(@fi) NDiaSemana;
set @fi = DATE_ADD(@fi, INTERVAL 1 DAY);
END WHILE;
END$$
DELIMITER ;
il-masacratore gracias por compartir!
Espero les sea útil.
Saludos.
Etiquetas:
Buen dia a todos. Estoy realizando un proyecto para la universidad y soy principiante en este tema asi que tengo una duda. si alguien podria ayudarme le agradeceria.
He logrado llenar ya todas las dimensiones de mi DHW, incluyendo la dim_tiempo, la cual contiene dentro de sus campos una fecha proveniente de la fuente de datos la cual esta representada por un id_fecha de tipo entero.
Al momento de poblar mi tabla de hechos, selecciono los datos que requiero para llenarla desde la fuente, incluyendo la fecha en que sucedió el hecho. Como puedo hacer para colocar el id_fecha en mi tabla de hechos?? Espero me entiendan y gracias x su ayuda!!
Buenas Sebas, cómo estás?
Dentro del SELECT que carga los datos de tu tabla de hechos, puedes hacer algo como:
SELECT (year(fecha)*10000+month(fecha)*100+day(fecha)) AS id_fecha
Saludos
Buenas tardes, una pregunta, porque realizar el llenado de la dimension tiempo con un procedimiento almacenado y no con un etl desde kettle ?
Saludos!
Guillermo
Bienvenido a
Open Business Intelligence
© 2023 Creado por Emilio.
Tecnología de