Open Business Intelligence

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.

Visitas: 1298

Respuestas a esta discusión

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

Buenas Guillermo, cómo estás?

Esta manera de hacerlo es solo a modo de ejemplo, puedes utilizar la forma que prefieras o te sea más funcional.

Saludos

--

Ing. Bernabeu R. Dario
web | youtube | twitter

RSS

Distintivo

Cargando…

© 2021   Creado por Emilio.   Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio