6 Replies Latest reply: Oct 26, 2016 12:39 PM by Rodrigo Tadeu RSS

    IF ou loop?

    Rodrigo Tadeu

      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

        • Re: IF ou loop?
          Yuri Nicolett

          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

            • Re: IF ou loop?
              Rodrigo Tadeu

              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

                • Re: IF ou loop?
                  Yuri Nicolett

                  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);

                    • Re: IF ou loop?
                      Yuri Nicolett

                      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
                  • Re: IF ou loop?
                    Rodrigo Tadeu

                    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

                  • Re: IF ou loop?
                    mauro ponte

                    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.