6 Replies Latest reply: Sep 15, 2016 11:28 AM by rodrigo silvestre RSS

    Contar passagens dos clientes

    Bruno Ducatti

      Bom dia, tenho uma regra para atender em relação a quantidade de vezes que o cliente passou pela loja em um determinado período que não encontrei uma forma de tratar.

      A passagem significa a quantidade de vezes que o cliente comprou na loja.

      Porém, a regra que preciso atender é que se o cliente passou pela loja em um intervalo de até 5 dias, esta passagem devo contar apenas uma vez.

       

      Exemplo:

      Neste QVW que estou enviando o cliente de código 120 comprou no dia 01/08, 05/08 e 15/08. Como a passagem do dia 05/08 está em até 5 dias em relação a 01/08, devo considerar apenas 1 passagem. Neste caso, o cliente terá 2 passagens no período (01/08 e 15/08).

       

      Há como fazer isso no qlikview?

        • Re: Contar passagens dos clientes
          rodrigo silvestre

          Bom dia Bruno,

           

          criei um contador pelo script, vê se atende.

           

           

          tmp:

          LOAD NF,

            Data,

            [Codigo Cliente] as cliente,

            Valor

          FROM base.xlsx (ooxml, embedded labels, table is Plan1);

           

          Vendas:

          NoConcatenate

          LOAD *,

          if(cliente = Previous(cliente) , if(num(Data) - num(Previous(Data)) > 5 , 1 ,0) , 1) as Qtde_passagem

          Resident tmp

          order by cliente asc, Data asc ;

           

           

          drop Table tmp;

            • Re: Contar passagens dos clientes
              Bruno Ducatti

              Obrigado Rodrigo

              • Re: Contar passagens dos clientes
                Bruno Ducatti

                Rodrigo, se for colocar uma nova condição, exemplo, no Excel anexo coloquei uma nova coluna com tipo de produto. Uma mesma NF pode ter vendido mais de um tipo de produto, mas quero criar uma regra, onde se a mesma NF tiver mais de um tipo de produto, considerar a prioridade abaixo:

                 

                1. Acessorios

                2. Opcionais

                3. Basico

                 

                Resumindo, só vamos contar 1 vez a NF e exibir o tipo de produto conforme a regra acima (no caso teria que mostrar Acessorios).

                  • Re: Contar passagens dos clientes
                    rodrigo silvestre

                    No seu caso eu faria da seguinte maneira, uma tabela de mapeamento com o número do tipo de produto ( map_prioridade) ; depois criaria uma tabela com a regra (regra_prioridade) ; por último uso a função EXISTS() na tabela principal para trazer somente os valores da tabela regra_prioridade.

                     

                    map_prioridade:

                    Mapping

                    load  * inline

                    [de,para

                    Acessorios,1

                    Opcionais,2

                    Basico,3];

                     

                    regra_prioridade:

                    LOAD NF,

                      NF&'|'&min(ApplyMap( 'map_prioridade' , [Tipo Produto])) AS chave_prioridade

                    FROM base.xlsx (ooxml, embedded labels, table is Plan1)

                    group by NF;

                     

                    tmp:

                    LOAD NF,

                      Data,

                      [Codigo Cliente] as cliente,

                        [Tipo Produto],

                      Valor

                    FROM base.xlsx (ooxml, embedded labels, table is Plan1)

                    where Exists(chave_prioridade ,  NF&'|'&ApplyMap( 'map_prioridade' , [Tipo Produto]));

                     

                    drop table regra_prioridade;

                  • Re: Contar passagens dos clientes
                    Bruno Ducatti

                    Rodrigo, bom dia! Tudo bem?

                    Tive que parar este projeto e agora estou retomando.

                     

                    Fui fazer um teste com a rotina de contar as passagens dos clientes a partir de 6 dias da ultima e me deparei com um caso que não entendi muito bem o problema ocorrido.

                    Tem 3 passagens do mesmo cliente no mesmo dia (05/09), nesta regra como todas estão inferiores a 5 dias, só deveria contar uma, mas não entendi porque está contando duas.

                     

                    Segue o exemplo que está selecionado no qvw.

                     

                    Obrigado desde ja!

                      • Re: Contar passagens dos clientes
                        rodrigo silvestre

                        Seguinte...

                         

                        A função Previous() , vai pegar o registro anterior, ou seja para funcionar da forma que você quer, é preciso que a tabela esteja ordenada corretamente.

                         

                        Volte ao exemplo que te passei e perceba que eu faço um resident da tabela, para poder ordena-la da forma correta "order by cliente asc, Data asc ;'

                         

                        * O order by só funciona em um resident, então você precisa primeiro carregar a tabela normalmente (será uma tabela temporária), fazer um resident dela aplicando a função e o cálculo de passagens e depois excluir a tabela temporária.