Hitachi Vantara Pentaho Community Forums
Results 1 to 2 of 2

Thread: Bucle "while" de MySQL en PDI

  1. #1
    Join Date
    Sep 2015
    Posts
    1

    Default Bucle "while" de MySQL en PDI

    ¡Hola!

    Bueno, creo que es hora de poner un primer post en esta área. Jeje.

    Verán, necesito incluir en un script SQL en PDI, un bucle "while" para llenar una dimensión tiempo. Tengo el siguiente código que me funciona perfectamente en MySQL pero no logro hacer que funcione en el control "Ejecutar script SQL" de PDI. Leí por ahí que no es posible que los bucles en script se ejecuten. ¿Tiene alguien alguna idea o sugerencia de cómo puedo hacer? ¡Muchas gracias desde ya!

    Code:
    DROP procedure IF EXISTS `llenarDimTiempo`;
    
    SET lc_time_names = 'es_SV';
    
    /* Obtengo las fechas mínima y máxima para la dimensión tiempo*/
    SET @fecMin = (SELECT MIN(LEAST(fecrecib, fecdiag, fecrepar, fecdevol)) FROM tempExcel);
    SET @fecMax = (SELECT MAX(GREATEST(fecrecib, fecdiag, fecrepar, fecdevol)) FROM tempExcel);
    
    DELETE from tempExcel where YEAR(fecrecib)<2002 or YEAR(fecdiag)<2002 or YEAR(fecrepar)<2002 or YEAR(fecdevol)<2002;
    
    DELIMITER $$
    
    CREATE PROCEDURE `llenarDimTiempo` ()
    
    /* Lleno la dimensión tiempo con cada fecha comprendida en el rango obtenido de la tabla 'tempExcel' */
    BEGIN
    WHILE (@fecMin <= @fecMax) DO
    
        set @diaMes = dayofmonth(@fecMin);
        set @diaAnio = dayofyear(@fecMin);
        set @nombreDiaSemana = dayname(@fecMin);
        set @diaSemana = dayofweek(@fecMin);
        set @esDiaSemana = IF(@diaSemana=1 or @diaSemana=7,'No','Sí');
        set @semanaAnio =  WEEK(@fecMin,0);
        set @nombreMes = monthname(@fecMin);
        set @mesAnio = MONTH(@fecMin);
        set @anioCalendario = YEAR(@fecMin);
        set @trimestreCalendario = CONCAT('Trimestre ',QUARTER(@fecMin));
        set @semestreCalendario = IF(QUARTER(@fecMin)=1 or QUARTER(@fecMin)=2,'Semestre 1','Semestre 2');
        set @anioCalendarioMes = IF(@mesAnio<10, CONCAT(@anioCalendario,'0',@mesAnio), CONCAT(@anioCalendario,@mesAnio));
        set @anioCalendarioTrimestre = CONCAT(@anioCalendario,'0',RIGHT(@trimestreCalendario,1));
        set @anioCalendarioSemestre = CONCAT(@anioCalendario,'0',RIGHT(@semestreCalendario,1));
        set @esUltimoDiaMes = if(@fecMin=LAST_DAY(@fecMin),'Sí','No');
        set @tiempoKey = CONCAT(@anioCalendario,IF(@mesAnio<10,'0',''),@mesAnio,IF(@diaMes<10,'0',''),@diaMes);
    
        insert into DimTiempo (tiempoKey,fechaCompleta,diaSemana,nombreDiaSemana,diaMes,diaAnio,esDiaSemana,
        semanaAnio,nombreMes,mesAnio,esUltimoDiaMes,trimestreCalendario,semestreCalendario,anioCalendario,
        anioCalendarioMes,anioCalendarioTrimestre,anioCalendarioSemestre) values (@tiempoKey,@fecMin,@diaSemana,@nombreDiaSemana,@diaMes,@diaAnio,@esDiaSemana,
        @semanaAnio,@nombreMes,@mesAnio,@esUltimoDiaMes,@trimestreCalendario,@semestreCalendario,@anioCalendario,
        @anioCalendarioMes,@anioCalendarioTrimestre,@anioCalendarioSemestre);
        delete from dimclientes;
        
    /* Incremento la fecha en uno hasta llegar a la fecha máxima obtenida al inicio */
    set @fecMin = DATE_ADD(@fecMin, INTERVAL 1 day);
    
    END WHILE;
    
    END $$
    
    DELIMITER ;
    
    call llenarDimTiempo();

  2. #2

    Default

    Hola Gilberto,

    Primero que nada, existen diferentes maneras de crear una dimension tiempo. No necesariamente leer todo desde un archivo de excel.
    Yo uso este ktr para la generación de mis dimensiones de tiempo, espero te sirva mucho y cualquier novedad estaré muy gustoso de ayudarte.

    Un saludo.
    http://www.espritsur.com.ec/uploads/...Dim_Tiempo.ktr
    Ricardo Díaz
    Pentaho Consultant
    Quito - Ecuador

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Privacy Policy | Legal Notices | Safe Harbor Privacy Policy

Copyright © 2005 - 2017 Pentaho Corporation. All Rights Reserved.