Estructura de la Dimensión Tiempo y Procedure de carga para MySQL

Buenas.
Este post esta basado en el de il-masacratore, más precisamente en su última entrada: Estructura de la dimensió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.

 

Excelente!!! Muchas gracias por compartir. Lo único que agregué fue la localización con lc_time_names = 'es_AR' para Español Argentina.