Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
Cliente | Data Transação | Transação | Cliente Novo ou Antigo |
---|---|---|---|
1 | 01/01/2017 | 1 | Novo |
2 | 01/01/2017 | 2 | Novo |
1 | 01/02/2017 | 3 | Antigo |
3 | 01/02/2017 | 5 | Novo |
2 | 05/02/2017 | 6 | Antigo |
4 | 05/02/2017 | 7 | Novo |
3 | 01/03/2017 | 8 | Antigo |
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
É 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;
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.
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
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:
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.
É 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;
Bom dia Felip,
Usei uma regra idêntica que você passou e está funcionando direitinho.
Obrigado pela ajuda.
Abrs