6 Replies Latest reply: Dec 15, 2017 5:55 AM by Joao Ferreira RSS

    Identificar Clientes Novos ou Antigos por Período

    Joao Ferreira

      Bom dia Pessoal,

       

      Tenho uma dúvida que acredito ser bem simples, mas não estou conseguindo chegar no resultado correto.

       

      Tenho uma tabela de Clientes que efetuaram transações por período. Sendo que cada cliente pode efetuar transações em vários períodos diferentes.

       

      Preciso identificar os clientes Novos ou Antigos.

       

      Clientes Novos -> Efetuou sua primeira transação em um determinando período e não tinha efetuado  nenhuma transação em períodos anteriores

      Clientes Antigos -> Efetuou transação em um determinado período, já havia efetuado alguma transação antes.

       

      ClienteData TransaçãoTransaçãoCliente Novo ou Antigo
      101/01/20171Novo
      201/01/20172Novo
      101/02/20173Antigo
      301/02/20175Novo
      205/02/20176Antigo
      405/02/20177Novo
      301/03/20178Antigo

       

      Analisando a tabela acima, os clientes 1, 2 e 3 estão com status Antigo ou Novo por efetuarem transações em períodos diferentes.

       

      Cliente 1 no mês de janeiro, foi sua primeira transação, então quando filtrar Janeiro entra como Novo

      Cliente 1 no mês de Fevereiro efetuou outra transação, já havia efetuado uma transação anterior, então em fevereiro ele é considerado Antigo.

       

      Cliente 2 no mês de janeiro, foi sua primeira transação, então quando filtrar Janeiro entra como Novo

      Cliente 2  no mês de Fevereiro efetuou outra transação, já havia efetuado uma transação anterior, então em fevereiro ele é considerado Antigo.

       

      Cliente 3 no mês de Fevereiro, foi sua primeira transação, então quando filtrar Janeiro entra como Novo

      Cliente 3  no mês de Março efetuou outra transação, já havia efetuado uma transação anterior, então em Março ele é considerado Antigo.

       

       

      Preciso montar um gráfico de barras por período com os Clientes Novos e Clientes Antigos, usando a lógica acima. Qual a melhor forma de criar o status dos clientes via script. ou será possível criar o status por expressão?

       

      Desde já agradeço a ajuda de vocês,

       

      Obrigado

       

      João Carlos Ferreira

        • Re: Identificar Clientes Novos ou Antigos por Período
          Felip Drechsler

          Olá João, com o script a seguir:

           

          data:

          load * Inline

          [

          Cliente, Data Transação, Transação

          1, 01/01/2017, 1

          2, 01/01/2017, 2

          1, 01/02/2017, 3

          3, 01/02/2017, 5

          2, 05/02/2017, 6

          4, 05/02/2017, 7

          3, 01/03/2017, 8

          ];

           

          tmp:

          Load

          Cliente,

          date(max([Data Transação]),'DD/MM/YYYY') as Teste,

          count([Data Transação]) as Teste2

          Resident data

          Group by Cliente;

           

          left join (data)

          Load

          Cliente,

          Teste,

          Teste2

          Resident tmp;

           

          drop table tmp;

           

          NoConcatenate

          dataFinal:

          Load

          Cliente,

          [Data Transação],

          [Transação],

          if([Data Transação] = Teste and Teste2 >1, 'Antigo','Novo') as [Cliente Novo ou Antigo]

          Resident data;

           

          drop table data;

           

          APresenta o seguinte comportamento, conforme o que você precisa.

          Sample.png

            • Re: Identificar Clientes Novos ou Antigos por Período
              Joao Ferreira

              Bom dia Felip,

               

              Os dados que passei pra você não foi suficiente para atender a todas as situações.

               

              Eu posso ter um cliente com mais de uma transação no mês ou no mesmo ano ou na mesma semana etc...Ou em anos diferentes, meses diferentes ou datas diferentes..

               

              Melhorei um pouco os dados para testar. Estou enviando o qvw anexo com uma situação de testes com 2 anos diferentes. Como exemplo o cliente 1 fez sua primeira transação  em 2016, então ele é novo em 2016. Fez transações em 2017 também, neste caso ele já deveria entrar apenas como cliente antigo, pois ele já fez uma transação em 2016. Preciso no exemplo que o cliente 1 apareça como apenas antigo em 2017, pois já fez transações em 2016.

               

              Veja anexo o exemplo;

               

              João Carlos

                • Re: Identificar Clientes Novos ou Antigos por Período
                  Felip Drechsler

                  Olá João,

                   

                  Utilize o código abaixo:

                   

                  data:

                  load * Inline

                  [

                  Cliente, Data Transação,Ano Transação, Transação

                  1, 01/01/2017,2017, 1

                  1, 05/01/2017,2017, 9

                  2, 01/01/2017,2017, 2

                  1, 01/02/2016,2016, 3

                  3, 01/02/2016,2016, 5

                  2, 05/02/2016,2016, 6

                  4, 05/02/2017,2017, 7

                  3, 01/03/2017,2017, 8

                  ];

                   

                  tmp:

                  Load

                  Cliente,

                  date(min([Data Transação]),'DD/MM/YYYY') as Teste,

                  count([Data Transação]) as Teste2

                  Resident data

                  Group by Cliente;

                   

                  left join (data)

                  Load

                  Cliente,

                  Teste,

                  Teste2

                  Resident tmp;

                  //

                  drop table tmp;

                   

                  dataFinal:

                  Load

                  Cliente,

                  [Data Transação],

                  [Ano Transação],

                  Transação,

                  if([Data Transação] = Teste,'Novo','Antigo') as T

                  Resident data;

                   

                  drop table data;

                   

                  Com esse código, tem-se a seguinte situação:

                  Sample.png

                    • Re: Identificar Clientes Novos ou Antigos por Período
                      Joao Ferreira

                      Felip,

                       

                       

                      A solução apresentada resolve a análise por Data,  independente do Ano, Mês ou Semana por exemplo. Preciso destas analises por Ano, Mês, Semana e Data.  Analisando apenas Data, OK funciona.

                       

                      Vou precisar criar um gráfico de barras com as quantidades de clientes Novos ou Antigos com grupo hierárquico com os Campos Ano, Mês, Semana e Data.

                       

                      No exemplo de teste, temos 2 anos 2016 e 2017. No gráfico de barras no Ano de 2016 deverão ser considerados todos Novos, pois não temos o ano 2015. No ano 2017 temos os clientes Antigos de 2016 mais os Novos de 2017.

                       

                      Olhando para o Ano 2016, o cliente 1 em duas datas diferentes 01/02/2016 (nesta data Cliente Novo), Mes 2 (Cliente Novo) e 01/03/2016 (nesta data Cliente Antigo), Mes 3 (Cliente Antigo). Se estou com gráfico de barras Ano, O cliente 1 entra apenas como Novo em 2016, se eu abrir o Ano, exibe os meses, o cliente 1 entra como Novo no Mês 2 e Antigo no mês 3. Se eu abrir o mês 2, o cliente 1 entra como Novo data 01/02/2016.


                      Veja anexo o que está acontecendo. No gráfico de barras temos duas situações conforme falei no ano 2016 cliente 1 no ano 2017 cliente 4. Estão entrando como Antigos nestes anos respectivamente, deveriam ser apenas novos na análise por Ano.


                      Att,


                           João Carlos.

                        • Re: Identificar Clientes Novos ou Antigos por Período
                          Felip Drechsler

                          É só adicionar uma agregação por [Ano Transação] na conta,

                           

                          então fica assim

                           

                          data:

                          load * Inline

                          [

                          Cliente, Data Transação,Ano Transação, Transação

                          1, 01/01/2017,2017, 1

                          1, 05/01/2017,2017, 9

                          2, 01/01/2017,2017, 2

                          1, 01/02/2016,2016, 3

                          3, 01/02/2016,2016, 5

                          2, 05/02/2016,2016, 6

                          4, 05/02/2017,2017, 7

                          3, 01/03/2017,2017, 8

                          4, 07/02/2017,2017, 9

                          ];

                           

                          tmp:

                          Load

                          Cliente,

                          [Ano Transação],

                          date(min([Data Transação]),'DD/MM/YYYY') as Teste,

                          count([Data Transação]) as Teste2

                          Resident data

                          Group by Cliente,[Ano Transação];

                           

                          left join (data)

                          Load

                          Cliente,

                          [Ano Transação],

                          Teste,

                          Teste2

                          Resident tmp;

                           

                          drop table tmp;

                           

                          dataFinal:

                          Load

                          Cliente,

                          [Data Transação],

                          [Ano Transação],

                          Transação,

                          if([Data Transação] = Teste,'Novo','Antigo') as T

                          Resident data;

                           

                          drop table data;

                           

                          Sample.png