Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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.
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;
acho que falta o load, não?
PESAGEM:
load * ;
select ....
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.
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)
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á