4 Replies Latest reply: Apr 18, 2012 7:52 AM by Juliana Holstein RSS

    Dúvida carga incremental

      Pessoal, estou com um probleminha na minha carga incremental.
      O que eu quero fazer: tenho uma tabela  de quantidade de funcionários.
      Fiz a carga total, até o dia de hoje, porém como as informações dos meses anteriores ao atual não modificam mais, eu gostaria de ler

      estas informações do QVD que criei, e as informações do mes atual (abril,no caso), gostaria de ler na minha base.
      Fiz um script conforme abaixo, porém quando eu realizo a carga os valores de abril, vão duplicadando a cada nova carga minha

       

      O que estou errando? Alguém pode me dar uma dica?

       

      //************* W_DATA_MES_ANTERIOR => data do mês anterior ao mês atual.

       

      QUANTIDADE_FUNCIONARIO:

      //******* Aqui a idéia é ler do QVD todos os registros até o mês anterior. No caso até MARCO/2012.
      LOAD  DATA,
                CD_SETOR,
                ID_TURNO,
               QTDE_FUNC
      FROM [$(QVDPath)\QUANTIDADE_FUNCIONARIO.qvd] (qvd)
      WHERE   DATA <= '$(W_DATA_MES_ANTERIOR)';      

       

      CONCATENATE

      //************* Aqui eu gostaria de ler da base, mas somente o que for maior que o mês anterior, ou seja os dados atuais de ABRIL/2012.
      SELECT
             '01/'||to_char(freq.dt_frequencia,'MM/YYYY')  AS  DATA,
              f.cd_setor                                   AS  CD_SETOR,
              f.id_turno                                   as  ID_TURNO,
              COUNT(DISTINCT F.CD_FUNCIONARIO)             AS  QTDE_FUNC  
         FROM
              FUNCIONARIO F,
              frequencia freq
        WHERE
              to_char(freq.dt_frequencia,'YYYYMM') > '$(W_DATA_MES_ANTERIOR)'  and
              TO_CHAR(F.DT_ADMISSAO,'YYYYMM') <=  to_char(freq.dt_frequencia,'YYYYMM') and
              (F.DT_RESCISAO IS NULL OR
              to_char(F.DT_RESCISAO,'YYYYMM') >  to_char(freq.dt_frequencia,'YYYYMM')) and
              f.cd_centro_custo <> 746      
      group by
             '01/'||to_char(freq.dt_frequencia,'MM/YYYY'),
             f.cd_setor, 
             f.id_turno;    
      Store QUANTIDADE_FUNCIONARIO into [$(QVDPath)\QUANTIDADE_FUNCIONARIO.qvd] (qvd);
      DROP Table QUANTIDADE_FUNCIONARIO;

       

      Desde já agradeço,

       

      Abs,

      Juliana.

        • Dúvida carga incremental
          Aderlan Rodrigues

          Olá Juliana, tudo bem?

           

          Respondi uma dúvida sobre carga incremental a algum tempo, dá uma olha, principalmente no arquivo anexo, vai lhe ajudar com certeza.

           

          http://community.qlik.com/message/191503#191503

           

          Abraço.

          • Dúvida carga incremental
            Erich Shiino

            Juliana,

            Acredito que seu problema seja devido aos diferentes formatos de datas que está usando.

            Nesta primeira passagem( WHERE   DATA <= '$(W_DATA_MES_ANTERIOR)' ) DATA está no formato DD/MM/YYYY

             

            Nesta outra passagem ( to_char(freq.dt_frequencia,'YYYYMM') > '$(W_DATA_MES_ANTERIOR)' ) a comparação é feita com contra o formato YYYYMM

             

            Não sei como formatou o  '$(W_DATA_MES_ANTERIOR)', mas só uma delas vai dar certo.

            Sugiro a criação de uma segunda variável ( W_DATA_MES_ANTERIOR2 ) com um segundo formato (e mesma data) para que consiga efetuara as comparações.

             

            Se você habilitar a geração de logs (configurações -> Propriedades do Documento -> Aba geral -> Gerar log), poderá ver em texto ( com as variáveis) já interpretadas, a query que está sendo passada ao banco e poderá testar melhor seus resultados.

             

            Espero que ajude,

            Abs,

             

            Erich

              • Dúvida carga incremental

                Olá Erich,
                Era isso mesmo, criei uma nova váriavel conforme você me sugeriu e funcionou corretamente .

                 

                Muito obrigada pela dica.


                Ficou assim o script:

                 

                // variavel utilizada para ler o QVD de QTDE_FUNCIONARIOS
                W_DATA_COMPLETA_ANTERIOR   = Monthend(now(),-1)
                W_DATA_MES_ANO_ANTERIOR    = Date(Monthend(now(),-1),'YYYYMM')


                QUANTIDADE_FUNCIONARIO:
                LOAD DATA,
                     CD_SETOR,
                     ID_TURNO,
                     QTDE_FUNC
                FROM [$(QVDPath)\QUANTIDADE_FUNCIONARIO.qvd] (qvd)
                WHERE DATA <= '$(W_DATA_COMPLETA_ANTERIOR)';

                 

                CONCATENATE

                SELECT
                       '01/'||to_char(freq.dt_frequencia,'MM/YYYY')  AS  DATA,
                        f.cd_setor                                   AS  CD_SETOR,
                        f.id_turno                                   as  ID_TURNO,
                        COUNT(DISTINCT F.CD_FUNCIONARIO)             AS  QTDE_FUNC  
                   FROM
                        FUNCIONARIO F,
                        frequencia freq
                  WHERE
                        to_char(freq.dt_frequencia,'YYYYMM') > '$(W_DATA_MES_ANO_ANTERIOR)'  and
                        TO_CHAR(F.DT_ADMISSAO,'YYYYMM') <=  to_char(freq.dt_frequencia,'YYYYMM') and
                        (F.DT_RESCISAO IS NULL OR
                        to_char(F.DT_RESCISAO,'YYYYMM') >  to_char(freq.dt_frequencia,'YYYYMM')) and
                        f.cd_centro_custo <> 746      
                group by
                       '01/'||to_char(freq.dt_frequencia,'MM/YYYY'),
                       f.cd_setor, 
                       f.id_turno;    
                Store QUANTIDADE_FUNCIONARIO into [$(QVDPath)\QUANTIDADE_FUNCIONARIO.qvd] (qvd);
                DROP Table QUANTIDADE_FUNCIONARIO;