Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Clausula IF com erro?

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;

Labels (2)
1 Solution

Accepted Solutions
nicolett_yuri

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

View solution in original post

7 Replies
nicolett_yuri

Jean, seu erro esta em utilizar uma função de agregação (SUM) sem utilizar o GROUP BY.

Not applicable
Author

yuri.nicolett‌,

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!

Clever_Anjos
Employee
Employee

Remova o SUM()

Not applicable
Author

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:

Clausula_IF.png

Ao carregar retorna o erro abaixo.

Erro_IF.png

nicolett_yuri

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.

nicolett_yuri

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

Clever_Anjos
Employee
Employee

Reveja seus ")", a mensagem é beeeem clara