Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá,
Eu montei um script a partir de um LOAD e RESIDENT, nele, preciso fazer uma condição baseado em campos pertencentes a duas tabelas distintas que uni-as com um INNER JOIN criando a tabela TB_R01.qvd.
Meu problema é, quando crio a cláusula IF conforme exemplo abaixo na linha 92, o QlikView não reconhece minha cláusula IF.
Alguém sabe me dizer onde pode estar errado?
P.S: Tentei fazer utilizando a cláusula CASE WHEN (abaixo), porém, o QlikView também não reconheceu.
(CASE WHEN DATA_DO_FATURAMENTO IS NOT NULL THEN
(CASE WHEN RECEB_DOCTOS_EXP IS NULL THEN
SUM(V_SOLICITACAO_LI_33 + V_PROTOCOLO_LI_PRE_35 + DT_AUTORIZACAO + AUTORIZACAO_EMBARQUE + PRE_ALERTA + CHEGADA + ATRAQUE + REMOCAO + V_PROTOCOLO_LI_POS_42 + DT_DEFERIMENTO + DT_REGISTRO_DEC + DESEMBARACO + CARREGAMENTO + DT_LIBERA_FATURA)
(CASE WHEN SUM(V_SOLICITACAO_LI_33 + V_PROTOCOLO_LI_PRE_35 + DT_AUTORIZACAO + AUTORIZACAO_EMBARQUE + PRE_ALERTA + CHEGADA + ATRAQUE + REMOCAO + V_PROTOCOLO_LI_POS_42 + DT_DEFERIMENTO + DT_REGISTRO_DEC + DESEMBARACO + CARREGAMENTO + DT_LIBERA_FATURA) = 0
DATA_DO_FATURAMENTO + (INVOICING + DOCS_RECEIVE + REQUESTING_LI + PROTOCOLING_LI_PRE + WAITING_LI_PRE + AUTORIZ_SHIPPING + PRE_ALERT_WAIT + INTERNL_TRANSIT + SHIPM_T_ARRIVAL_ACKNOL + PROTOCOLING_LI_POST + WAITING_LI_POST + REGISTERING_DI + CLEARING_CUSTOMS + WAITING_WH_REQUEST + DELIVERING + DELIVERED) END)
END)
ELSE
DATA_DO_FATURAMENTO = '99999999'
END) as DT_ESTIMATED_DELIVERY
TB_R01:
LOAD LINHA_DE_NEGOCIO
, EXPORTADOR_SAP
, FK_CD_FAB_SAP
, MEIO_TRANSPORTE
, PROCESSO
, DATA_DO_FATURAMENTO
, RECEB_DOCTOS_EXP
, V_SOLICITACAO_LI_33
, V_PROTOCOLO_LI_PRE_35
, DT_AUTORIZACAO
, AUTORIZACAO_EMBARQUE
, PRE_ALERTA
, CHEGADA
, ATRAQUE
, REMOCAO
, V_PROTOCOLO_LI_POS_42
, DT_DEFERIMENTO
, DT_REGISTRO_DEC
, DESEMBARACO
, CARREGAMENTO
, DT_LIBERA_FATURA
FROM FOLLOWUP.qvd (qvd);
INNER JOIN
LOAD LINHA_DE_NEGOCIO
, EXPORTADOR_SAP
, FK_CD_FAB_SAP
, MEIO_TRANSPORTE
, INVOICING
, DOCS_RECEIVE
, REQUESTING_LI
, PROTOCOLING_LI_PRE
, WAITING_LI_PRE
, AUTORIZ_SHIPPING
, PRE_ALERT_WAIT
, INTERNL_TRANSIT
, SHIPM_T_ARRIVAL_ACKNOL
, PROTOCOLING_LI_POST
, WAITING_LI_POST
, REGISTERING_DI
, CLEARING_CUSTOMS
, WAITING_WH_REQUEST
, DELIVERING
, DELIVERED
, BASELINE
, TT_TARGET
FROM FASES.qvd (qvd);
STORE TB_R01 INTO TB_R01.qvd;
TB_R01_RES:
LOAD LINHA_DE_NEGOCIO
, EXPORTADOR_SAP
, FK_CD_FAB_SAP
, MEIO_TRANSPORTE
, PROCESSO
, DATA_DO_FATURAMENTO
, RECEB_DOCTOS_EXP
, V_SOLICITACAO_LI_33
, V_PROTOCOLO_LI_PRE_35
, DT_AUTORIZACAO
, AUTORIZACAO_EMBARQUE
, PRE_ALERTA
, CHEGADA
, ATRAQUE
, REMOCAO
, V_PROTOCOLO_LI_POS_42
, DT_DEFERIMENTO
, DT_REGISTRO_DEC
, DESEMBARACO
, CARREGAMENTO
, DT_LIBERA_FATURA
, INVOICING
, DOCS_RECEIVE
, REQUESTING_LI
, PROTOCOLING_LI_PRE
, WAITING_LI_PRE
, AUTORIZ_SHIPPING
, PRE_ALERT_WAIT
, INTERNL_TRANSIT
, SHIPM_T_ARRIVAL_ACKNOL
, PROTOCOLING_LI_POST
, WAITING_LI_POST
, REGISTERING_DI
, CLEARING_CUSTOMS
, WAITING_WH_REQUEST
, DELIVERING
, DELIVERED
, BASELINE
, TT_TARGET
, IF(DATA_DO_FATURAMENTO <> '', (IF RECEB_DOCTOS_EXP = '', (SUM(V_SOLICITACAO_LI_33 + V_PROTOCOLO_LI_PRE_35 + DT_AUTORIZACAO + AUTORIZACAO_EMBARQUE + PRE_ALERTA + CHEGADA + ATRAQUE + REMOCAO + V_PROTOCOLO_LI_POS_42 + DT_DEFERIMENTO + DT_REGISTRO_DEC + DESEMBARACO + CARREGAMENTO + DT_LIBERA_FATURA)), 0), 99999999) as DATA_DO_FATURAMENTO
RESIDENT TB_R01;
//DROP TABLE TB_R01;
Jean, a sua sintaxe do segundo IF esta incorreta, veja que ele nem ficou azul.
Após o IF, deve se abrir um parenteses, por exemplo:
if( campo1 = 1, a+b, if( campo2 = 2, a-b, if( campo3 = 3, a*b, a/b))) as CAMPO
Jean, seu erro esta em utilizar uma função de agregação (SUM) sem utilizar o GROUP BY.
Obrigado pelo pronta resposta.
Entendo o que esteja falando, assimilei com o SQL mesmo, porém, tentei aplicar o Group By no QlikView como no SQL e não funcionou, tem alguma dica?
Tentei inserir a clausula AGGR no inicio da minha cláusula IF e também não funcionou.
AGGR(IF(DATA_DO_FATURAMENTO <> '', (IF RECEB_DOCTOS_EXP = '', (SUM(V_SOLICITACAO_LI_33 + V_PROTOCOLO_LI_PRE_35 + DT_AUTORIZACAO + AUTORIZACAO_EMBARQUE + PRE_ALERTA + CHEGADA + ATRAQUE + REMOCAO + V_PROTOCOLO_LI_POS_42 + DT_DEFERIMENTO + DT_REGISTRO_DEC + DESEMBARACO + CARREGAMENTO + DT_LIBERA_FATURA)), 0), 99999999)) as DATA_DO_FATURAMENTO
Obrigado!
Remova o SUM()
Olá cleveranjos,
Eu removi e ainda sim continua dando erro, a impressão que tenho é que o QlikView não reconhece, não consegue interpretar dois IF's na mesma condição, certamente o erro está na minha cláusula.
Veja:
Ao carregar retorna o erro abaixo.
AGGR não funciona no script.
O group by do qlikview funciona da mesma forma que em um sql. Deve-se adicionar todos os campos que não estão sendo agrupados no group by separados por virgula.
Jean, a sua sintaxe do segundo IF esta incorreta, veja que ele nem ficou azul.
Após o IF, deve se abrir um parenteses, por exemplo:
if( campo1 = 1, a+b, if( campo2 = 2, a-b, if( campo3 = 3, a*b, a/b))) as CAMPO
Reveja seus ")", a mensagem é beeeem clara