Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
joao_sp_campina
Creator II
Creator II

Identificar Clientes Novos ou Antigos por Período

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

1 Solution

Accepted Solutions
felipedl
Partner - Specialist III
Partner - Specialist III

É 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

View solution in original post

6 Replies
felipedl
Partner - Specialist III
Partner - Specialist III

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

joao_sp_campina
Creator II
Creator II
Author

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

felipedl
Partner - Specialist III
Partner - Specialist III

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

joao_sp_campina
Creator II
Creator II
Author

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.

felipedl
Partner - Specialist III
Partner - Specialist III

É 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

joao_sp_campina
Creator II
Creator II
Author

Bom dia Felip,

Usei uma regra idêntica que você passou e está funcionando direitinho.

Obrigado pela ajuda.

Abrs