5 Replies Latest reply: Jul 2, 2013 10:49 AM by Thiago das Chagas cunha RSS

    Consulta da Base retorna o Qlikview nao?

    Thiago das Chagas cunha

      Boas Pessoal,

       

      Alguem ja passou por isso? na base de dados tem 5.000 registros, quando vai fazer a select no qlikview ele diz 0 registro lidos.

        • Re: Consulta da Base retorna o Qlikview nao?
          Thiago das Chagas cunha

          SELECT   M.ID, M.CRUN_ID, M.SIGLA_CTR,

                   TO_CHAR (M.DATA_GATE_IN, 'DD/MM/YYYY') DATA_GATE_IN,

                   CASE

                      WHEN (   BL.MOT_CAPTA = 'BALD'

                            OR BL.MOT_CAPTA = 'TRAN'

                            OR BL.MOT_CAPTA = 'REEM'

                           )

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'BALD'

                      WHEN (BL.MOT_CAPTA = 'CABO' OR BL.MOT_CAPTA = 'CBEM')

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'CABO'

                      WHEN BL.MOT_CAPTA = 'DTAP'

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'DTA'

                      WHEN SUBSTR (CTQU_ID, 3, 1) = 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'EXCESSO'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NOT NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'REEFER'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NOT NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'IMO'

                      WHEN M.PESO_MANIF_CTR <= 10000

                         THEN 'PESO'

                      ELSE 'IMPO'

                   END MOT_CAPTA

              FROM SGTAP.MINDECTR@SGTAP_LINK M,

                   SGTAP.AMR@SGTAP_LINK,

                   SGTAP.BL@SGTAP_LINK,

                   SGTAP.PESAGEM_RTG@SGTAP_LINK PR,

                   CNTR_RUN C,

                   RFR_DECLARATION R,

                   IMO_DECLARATION I,

                   CONTAINER CO,

                   CNTR_TYPE CT        

             WHERE ID_TERMCARG = 1

               AND M.DATA_GATE_IN >= '17/06/2012'

               AND M.DATA_GATE_IN <= '26/06/2012'

               AND M.SIGLA_CTR = AMR.SIGLA_CTR

               AND M.NUMERO_VIAGEM = AMR.NUMERO_VIAGEM

               AND AMR.ID_BL = BL.ID

               AND M.CRUN_ID = C.CRUN_ID

               AND C.CNTR_NO = CO.CNTR_NO

               AND CO.CTYP_ID = CT.CTYP_ID

               AND C.CRUN_ID = R.CRUN_ID(+)

               AND C.CRUN_ID = I.CRUN_ID(+)

               AND C.CRUN_ID = PR.CRUN_ID(+)

               AND (STATUS_COMPLETO <> 'S' OR PR.ID IS NULL)

          GROUP BY M.ID,

                   M.CRUN_ID,

                   M.SIGLA_CTR,

                   TO_CHAR (M.DATA_GATE_IN, 'DD/MM/YYYY'),

                   CASE

                      WHEN (   BL.MOT_CAPTA = 'BALD'

                            OR BL.MOT_CAPTA = 'TRAN'

                            OR BL.MOT_CAPTA = 'REEM'

                           )

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'BALD'

                      WHEN (BL.MOT_CAPTA = 'CABO' OR BL.MOT_CAPTA = 'CBEM')

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'CABO'

                      WHEN BL.MOT_CAPTA = 'DTAP'

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'DTA'

                      WHEN SUBSTR (CTQU_ID, 3, 1) = 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'EXCESSO'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NOT NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'REEFER'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NOT NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'IMO'

                      WHEN M.PESO_MANIF_CTR <= 10000

                         THEN 'PESO'

                      ELSE 'IMPO'

                   END;

           

          Essa select na minha base retorna 5.000 mil registros, no Qlikview coloquei assim:

           

          PESAGEM:

          SELECT   M.ID, M.CRUN_ID, M.SIGLA_CTR,

                   TO_CHAR (M.DATA_GATE_IN, 'DD/MM/YYYY') DATA_GATE_IN,

                   CASE

                      WHEN (   BL.MOT_CAPTA = 'BALD'

                            OR BL.MOT_CAPTA = 'TRAN'

                            OR BL.MOT_CAPTA = 'REEM'

                           )

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'BALD'

                      WHEN (BL.MOT_CAPTA = 'CABO' OR BL.MOT_CAPTA = 'CBEM')

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'CABO'

                      WHEN BL.MOT_CAPTA = 'DTAP'

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'DTA'

                      WHEN SUBSTR (CTQU_ID, 3, 1) = 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'EXCESSO'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NOT NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'REEFER'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NOT NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'IMO'

                      WHEN M.PESO_MANIF_CTR <= 10000

                         THEN 'PESO'

                      ELSE 'IMPO'

                   END MOT_CAPTA

              FROM SGTAP.MINDECTR@SGTAP_LINK M,

                   SGTAP.AMR@SGTAP_LINK,

                   SGTAP.BL@SGTAP_LINK,

                   SGTAP.PESAGEM_RTG@SGTAP_LINK PR,

                   CNTR_RUN C,

                   RFR_DECLARATION R,

                   IMO_DECLARATION I,

                   CONTAINER CO,

                   CNTR_TYPE CT        

             WHERE ID_TERMCARG = 1

               AND M.DATA_GATE_IN >= '17/06/2012'

               AND M.DATA_GATE_IN <= '26/06/2012'

               AND M.SIGLA_CTR = AMR.SIGLA_CTR

               AND M.NUMERO_VIAGEM = AMR.NUMERO_VIAGEM

               AND AMR.ID_BL = BL.ID

               AND M.CRUN_ID = C.CRUN_ID

               AND C.CNTR_NO = CO.CNTR_NO

               AND CO.CTYP_ID = CT.CTYP_ID

               AND C.CRUN_ID = R.CRUN_ID(+)

               AND C.CRUN_ID = I.CRUN_ID(+)

               AND C.CRUN_ID = PR.CRUN_ID(+)

               AND (STATUS_COMPLETO <> 'S' OR PR.ID IS NULL)

          GROUP BY M.ID,

                   M.CRUN_ID,

                   M.SIGLA_CTR,

                   TO_CHAR (M.DATA_GATE_IN, 'DD/MM/YYYY'),

                   CASE

                      WHEN (   BL.MOT_CAPTA = 'BALD'

                            OR BL.MOT_CAPTA = 'TRAN'

                            OR BL.MOT_CAPTA = 'REEM'

                           )

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'BALD'

                      WHEN (BL.MOT_CAPTA = 'CABO' OR BL.MOT_CAPTA = 'CBEM')

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'CABO'

                      WHEN BL.MOT_CAPTA = 'DTAP'

                      AND SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'DTA'

                      WHEN SUBSTR (CTQU_ID, 3, 1) = 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'EXCESSO'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NOT NULL

                      AND I.CRUN_ID IS NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'REEFER'

                      WHEN SUBSTR (CTQU_ID, 3, 1) <> 'F'

                      AND R.CRUN_ID IS NULL

                      AND I.CRUN_ID IS NOT NULL

                      AND M.PESO_MANIF_CTR > 10000

                         THEN 'IMO'

                      WHEN M.PESO_MANIF_CTR <= 10000

                         THEN 'PESO'

                      ELSE 'IMPO'

                   END;

          STORE PESAGEM INTO $(vPath)\PESAGEM.QVD;

          DROP TABLE PESAGEM;

           

            • Re: Consulta da Base retorna o Qlikview nao?
              rodrigo silvestre

              acho que falta o load, não?

               

              PESAGEM:

              load * ;

              select ....

                • Re: Consulta da Base retorna o Qlikview nao?
                  Raphael Pacheco

                  Bom Thiago, você pode testar incluindo o Load como o Rodrigo sinalizou. Mas aqui tenho cargas que utilizam o Load e apenas o Select após o nome da tabela e todas as duas formas funcionam.

                   

                  Uma vez isso aconteceu comigo e a solução foi modificar a forma de inclusão das datas de intervalo.

                  Criei duas variáveis e no Where da consulta coloquei da seguinte forma:

                   

                   

                  Campo BETWEEN to_date('$(DATAinicio)', 'DD/MM/YYYY') AND to_date('$(DATAfim)', 'DD/MM/YYYY')

                   

                  De qualquer forma, sugiro que você traga o tratamento destes dados para a camada do Qlikview e não no Banco de Dados.

                  Crie scripts de carga e Store das tabelas, em seguida scripts de tratamento dos dados levando em consideração as regras desta consulta.

                  Desta forma você não sobrecarrega o seu banco de dados. Bom, é apenas uma sugestão

                   

                  Abs.

              • Re: Consulta da Base retorna o Qlikview nao?

                Um caminho facil para encontrar o problema é ir debugando o seu select.

                 

                Faça um teste tipo com a sua consulta retornando * para facilitar o monitoramento (fica menos poluido).

                 

                Comente todas as tabelas e faça manualmente os joins entre elas uma por uma até encontrar o que esta matando sua consulta.

                 

                    SELECT   *

                    FROM SGTAP.MINDECTR@SGTAP_LINK M,

                         SGTAP.AMR@SGTAP_LINK,

                         SGTAP.BL@SGTAP_LINK,

                         SGTAP.PESAGEM_RTG@SGTAP_LINK PR,

                         CNTR_RUN C,

                         RFR_DECLARATION R,

                         IMO_DECLARATION I,

                         CONTAINER CO,

                         CNTR_TYPE CT       

                   WHERE ID_TERMCARG = 1

                     AND M.SIGLA_CTR = AMR.SIGLA_CTR

                     AND M.NUMERO_VIAGEM = AMR.NUMERO_VIAGEM

                     AND AMR.ID_BL = BL.ID

                     AND M.CRUN_ID = C.CRUN_ID

                     AND C.CNTR_NO = CO.CNTR_NO

                     AND CO.CTYP_ID = CT.CTYP_ID

                     AND C.CRUN_ID = R.CRUN_ID(+)

                     AND C.CRUN_ID = I.CRUN_ID(+)

                     AND C.CRUN_ID = PR.CRUN_ID(+)

                     AND (STATUS_COMPLETO <> 'S' OR PR.ID IS NULL)

                  • Re: Consulta da Base retorna o Qlikview nao?
                    Thiago das Chagas cunha

                         Bom eu alterei a Query , fazendo uma junção do que Eduardo falou + do que Raphael falou, tirei todo meu Group By e vo fazer-lo no ato do LOAD no document  para fazer a divisão é que me passaram essa Select pronta do sistema.

                         ela fico assim

                     

                    SELECT   M.ID,

                             M.CRUN_ID,

                             M.SIGLA_CTR,

                             CTQU_ID,

                             R.CRUN_ID REFE_CRUN,

                             I.CRUN_ID IMO_CRUN,

                             M.PESO_MANIF_CTR,

                             TO_CHAR (M.DATA_GATE_IN, 'DD/MM/YYYY') DATA_GATE_IN,

                             BL.MOT_CAPTA

                        FROM SGTAP.MINDECTR@SGTAP_LINK M,

                             SGTAP.AMR@SGTAP_LINK,

                             SGTAP.BL@SGTAP_LINK,

                             SGTAP.PESAGEM_RTG@SGTAP_LINK PR,

                             CNTR_RUN C,

                             RFR_DECLARATION R,

                             IMO_DECLARATION I,

                             CONTAINER CO,

                             CNTR_TYPE CT      

                       WHERE ID_TERMCARG = 1

                         AND M.DATA_GATE_IN to_date('$(DATAinicio)', 'DD/MM/YYYY') AND to_date('$(DATAfim)', 'DD/MM/YYYY')

                         AND M.SIGLA_CTR = AMR.SIGLA_CTR

                         AND M.NUMERO_VIAGEM = AMR.NUMERO_VIAGEM

                         AND AMR.ID_BL = BL.ID

                         AND M.CRUN_ID = C.CRUN_ID

                         AND C.CNTR_NO = CO.CNTR_NO

                         AND CO.CTYP_ID = CT.CTYP_ID

                         AND C.CRUN_ID = R.CRUN_ID(+)

                         AND C.CRUN_ID = I.CRUN_ID(+)

                         AND C.CRUN_ID = PR.CRUN_ID(+)

                         AND (STATUS_COMPLETO <> 'S' OR PR.ID IS NULL);

                     

                     

                    Tem alguma especie de Bug que nao esta lendo valor como sem to_Date na verdade era isso.Agora não se isso e problema do Qlikview  enviar a select para o banco ou retorno do Banco para Qlikview

                    Prefiro usar o Load só no Document por que padrão que consultores deixara, aqui já