Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

IF ou loop?

Boa noite,

Observem a tabela a seguir:

123.jpg

1 - Coluna = NF

2 - Coluna = DATA_OCORRE (Data de Ocorrencia)

3 - Coluna = DATA_ENTREGA_TRANSP (Data de entrega na transportadora)

4 - Coluna = MOTIVO

5 - Coluna = PEDIDO NO PRAZO OTD (campo criado no script)

-------------------------------------------------- -------------------------------------------------- ---------------------------------------

Condição atual:

Se a data da Coluna 2 (DATA_OCORRE) for inferior a data da Coluna 3 (DATA_ENTREGA_TRANSP),

então PEDIDO NO PRAZO OTD = S, caso contrário PEDIDO NO PRAZO OTD = N.


Até aí tudo bem. A visão por linhas está OK.

Condição que preciso:

Considere o exemplo acima da NF 624126.

Eu preciso obter a MENOR data da Coluna 2 (DATA_OCORRE) e comparar com a coluna 3 (DATA_ENTREGA_TRANSP).

Se for menor e atender a condição do PEDIDO NO PRAZO OTD (ex:. S), o campo de PEDIDO NO PRAZO OTD deverá mostrar o mesmo status (S ou N) para todos os demais registros dessa mesma NF.

Por exemplo. Na imagem acima, todos os registros deveriam estar com STATUS 'S', pois a menor data (06/10/16) daquela NF já atendeu o critério, sendo assim a regra seria deixar S também para os demais registros dessa mesma NF.

Quem pode ajudar. Eu que agradeço

1 Solution

Accepted Solutions
nicolett_yuri

Segue um exemplo simples:

Mapping_MenorData:

Mapping LOAD DISTINCT

  NF,

  Date(MIN(DATA_OCORRE), 'DD/MM/YYYY') as MENOR_DATA_OCORRE

FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1)

GROUP BY

  NF;

Tab:

LOAD

  NF,

     DATA_OCORRE,

     DATA_ENTREGA_TRANSP,

     MOTIVP,

     ApplyMap('Mapping_MenorData', NF, Null()) as MENOR_DATA_OCORRE,

     IF( ApplyMap('Mapping_MenorData', NF, Null()) <= DATA_ENTREGA_TRANSP, 'S', 'N') as PEDIDO_NO_PRAZO_OTD

FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1);

View solution in original post

6 Replies
nicolett_yuri

Rodrigo, creio que a pergunta chave seja: Você precisa do campo "PEDIDO NO PRAZO OTD" para outras métricas? Se sim, o ideal é você criar esse campo em seu script.

A dica é criar uma coluna, em sua tabela, que repita o menor valor da coluna "DATA_OCORRE" para todas as linhas da NF. Tendo essa coluna em sua tabela, basta fazer a comparação com essa nova coluna.

Caso tenha dúvidas de como criar essa coluna, envie um qvw de exemplo para eu demonstrar

Not applicable
Author

Yuri,

Sim e sim. Eu já criei ele no script (com a condição simples, comparando apenas dimensões), mas não consegui pensar na condição lógica para atender a condição completa. E vou usar também em outras métricas sim.

Sobre criar a coluna eu não consigo pois não tem como criar uma expressão em uma tabela, não gráfico. Se eu usar gráfico de tabela simples digamos que o gráfico já dá um "distinct" e não repete a nota.

Preciso que me explique melhor sobre essa coluna, então anexei um qvw em branco. Pode ser?

Download

WeTransfer

Obrigado por enquanto

nicolett_yuri

Segue um exemplo simples:

Mapping_MenorData:

Mapping LOAD DISTINCT

  NF,

  Date(MIN(DATA_OCORRE), 'DD/MM/YYYY') as MENOR_DATA_OCORRE

FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1)

GROUP BY

  NF;

Tab:

LOAD

  NF,

     DATA_OCORRE,

     DATA_ENTREGA_TRANSP,

     MOTIVP,

     ApplyMap('Mapping_MenorData', NF, Null()) as MENOR_DATA_OCORRE,

     IF( ApplyMap('Mapping_MenorData', NF, Null()) <= DATA_ENTREGA_TRANSP, 'S', 'N') as PEDIDO_NO_PRAZO_OTD

FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1);

nicolett_yuri

Não consigo te enviar os arquivos, mas basicamente a planilha contém o seu exemplo:

    

NFDATA_OCORREDATA_ENTREGA_TRANSPMOTIVP
106/10/201606/10/20162005
106/10/201606/10/20162005
111/10/201606/10/20162005
111/10/201606/10/20162005
113/10/201606/10/20162021
113/10/201606/10/20162021
201/10/201625/09/20162021
205/10/201625/09/20162021
210/10/201625/09/20162021
mauroponte
Creator II
Creator II

Rodrigo,

Não sei se entendi bem sua necessidade.

Mas estou anexando um QVW de exemplo.

Analise a expressão da TABELA COM EXPRESSÃO DEFINIDA e veja se é o que voce preccisa.

Espero ter ajudado.

Not applicable
Author

Yuri,

Fiz aqui e deu certo, não pude responder antes pois estive ocupado. Agora pretendo aplicar essa solução para um outro problema do mesmo projeto, mas com um critério diferente.

A situação é similar a do post original, mas a condição deve atender mais um critério. Agora eu tenho que criar um novo CAMPO, de nome PEDIDO_ATENDIDO. Esse campo deve conter 4 estados:

PEDIDO_ATENDIDO

S = MOTIVO_OCORREN = 2021

N = MOTIVO_OCORREN = 2001

P = MOTIVO_OCORREN  = 2003

A = MOTIVO_OCORREN <>  DAS OPÇÕES ACIMA

Deve-se pegar a menor data da NF (DATA_OCORREN) comparar com da a DAT_ENTREGA_TRANS, e se for <= o campo PEDIDO_ATENDIDO deve retornar 'S'.

Porém, como existem vários registros para a mesma NF, deve ser considerado também um campo chamado MOTIVO_OCORREN. Se a primeira DATA (DATA_OCORREN) for menor que a DATA de entrega na transportadora (DAT_ENTREGA_TRANS) e o MOTIVO_OCORREN ='2021', portanto PEDIDO_ATENDIDO = 'S'.

Se MOTIVO_OCORREN = '2001' ,PEDIDO_ATENDIDO = 'N'

Se MOTIVO_OCORREN = '2003' ,PEDIDO_ATENDIDO = 'P'


Se MOTIVO_OCORREN <> 2001, 2021, 2003 ,PEDIDO_ATENDIDO = 'A'

(TODAS POSSIBILIDADES ACIMA CONSIDERANDO A MENOR DATA)


QLIK.jpg

COLUNA 1 = NF

COLUNA 2 = DATA_OCORREN

COLUNA 3 = DAT_ENTREGA_TRANS

COLUNA 4 = MOTIVO_OCORREN

...

COLUNA 6 = PEDIDO ATENDIDO

Se há 1 registro dessa NF com STATUS 'S', todos demais registros dessa NF tem que estar 'S'. Então o campo PEDIDO_ATENDIDO deveria estar TODO COM 'S';

Obrigado