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

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

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.

Si no estás registrado recuerda que tu comentario entrará en una cola de aprobación.

Más información sobre opciones de formato

Enviando este formulario, acepta la política de privacidad de Mollom.

 



 

  BI   |    CRM     |    CMS    |    Tendencias en software empresarial    |    Cloud computing  |    Software libre    |   Internet    |    Movilidad y apps