Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal, Boa Tarde!
Tudo Bem?
Sou novato na comunidade e no Qlik View, gostaria muito da ajuda de vocês na elaboração de um script.
As vendas no meu modelo de negócio são medidas por coleção (exemplo A0015 ). Tenho duas Tabelas, uma de vendas históricas e outra de vendas nas coleções atuais.
Preciso flegar na tabela de vendas atuais o status dos clientes, ou seja, se ele é novo ou antigo na marca. Medimos esse indicador olhando a marca e o código do cliente, se ele apresentar alguma venda anterior na marca, ou seja, comprou uma coleção anterior, ele é considerado cliente antigo. Caso a coleção seja a primeira dele na marca ele é considerado cliente novo nessa marca.
Posso chegar no mesmo resultado olhando se o cliente comprou apenas a coleção atual no histórico na marca. O Intuito de flegar na tabela atual é de utilizar esse indicador em alguns comparativos no dashboard.
Pensei em concatenate, mas não sei como faria essa validação. Alguém pode me auxiliar?
Exemplo:
VENDAS ATUAIS | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | ||||
A | 1100055 | A0015 | 29/01/2017 | ||||
B | 1100055 | B0015 | 29/01/2017 | ||||
C | 1100055 | C0015 | 29/01/2017 | ||||
D | 1100055 | D0015 | 29/01/2017 | ||||
HISTÓRICO | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | ||||
A | 1100055 | A0014 | 21/11/2016 | ||||
B | 1100055 | B0012 | 12/09/2016 | ||||
A | 1100055 | A0015 | 29/01/2017 | ||||
B | 1100055 | B0015 | 29/01/2017 | ||||
C | 1100055 | C0015 | 29/01/2017 | ||||
D | 1100055 | D0015 | 29/01/2017 | ||||
SAIDA DESEJADA | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | TIPO | OBS | ||
A | 1100055 | A0015 | 29/01/2017 | CLIENTE ANTIGO | Não Comprou a primeira vez na marca | ||
B | 1100055 | B0015 | 29/01/2017 | CLIENTE ANTIGO | Não Comprou a primeira vez na marca | ||
C | 1100055 | C0015 | 29/01/2017 | CLIENTE NOVO | Comprou a primeira vez na marca | ||
D | 1100055 | D0015 | 29/01/2017 | CLIENTE NOVO | Comprou a primeira vez na marca |
Abs,
Mensagem editada por: Anderson Silva Caso precise de maiores detalhes, por favor me comunique.
Ate deve ter uma forma mais simples, mas o tico e teco esta baleado.......
Vendas_Atual:
LOAD
*
INLINE [
MARCA, CLIENTE,COLEÇÃO, DATAVENDA
A, 1100055 ,0015, 29/01/2017
B, 1100055 ,0015, 29/01/2017
C, 1100055 ,0015, 29/01/2017
D, 1100055 ,0015, 29/01/2017
];
left join
HISTÓRICO:
LOAD
MARCA,
CLIENTE,
min(DATAVENDA) as Primeira_Compra
Group by MARCA,CLIENTE;
LOAD *
INLINE [
MARCA, CLIENTE,COLEÇÃO, DATAVENDA
A, 1100055, 0014 ,21/11/2016
B, 1100055, 0012 ,12/09/2016
A, 1100055, 0015 ,29/01/2017
B, 1100055, 0015 ,29/01/2017
C, 1100055, 0015 ,29/01/2017
D, 1100055, 0015 ,29/01/2017
];
left join
LOAD
MARCA,
CLIENTE,
DATAVENDA,
if(DATAVENDA = Primeira_Compra,'Cliente Novo','Cliente Antigo') as Tipo
Resident Vendas_Atual;
Anderson esta meio confuso.
Entendi que você precisa mas olhando seu exemplo ele confundi.
A0015 tenho na tab atual e historica com mesma data e não é primeira compra.
D0015 mesma coisa e é a primeira compra ?
Pode explicar melhor ?
Bom dia !
Penso que um jeito simples de fazer é criar um mapping por cliente e marca, assim:
1 - Carrega a tabela de HISTORICO.
2 - Cria o Mapping:
MapaCliente:
Mapping
Load DISTINCT CLIENTE &'|'&MARCA, 'Antigo' as Status RESIDENT HISTORICO;
3 - Usa o mapa para flegar o cliente como novo ou antigo, na carga da tabela vendas atuais, assim:
ApplyMap('MapaCliente',CLIENTE &'|'&MARCA,'Novo') As TipoCliente
Acho que assim já resolve.
Abs
Não me preocupei com as chaves no script. Segue exemplo.
Obs: Outra coisa que você pode fazer é, criar primeiro o MapaCliente, baseado em um load temporario da tabela HISTORICO, e na hora de concatenar as tabelas usa o mapping na hora de carregar a tabela de VENDAS_ATUAIS, lembrando que para funcionar, carrega primeiro o Historico e depois concatena a Vendas Atual para concatenar.
HISTORICO:
Load * inline [
MARCA, CLIENTE, COLEÇÃO, DATAVENDA
A, 1100055, A0014, 21/11/2016
B, 1100055, B0012, 12/09/2016
A, 1100055, A0015, 29/01/2017
B, 1100055, B0015, 29/01/2017
C, 1100055, C0015, 29/01/2017
D, 1100055, D0015, 29/01/2017
];
MapaCliente:
Mapping
Load DISTINCT CLIENTE &'|'&MARCA, 'Antigo' as Status RESIDENT HISTORICO;
VENDAS_ATUAIS:
Load ApplyMap('MapaCliente',CLIENTE &'|'&MARCA,'Novo') As TipoCliente, * inline [
MARCA, CLIENTE, COLEÇÃO, DATAVENDA
A, 1100055, A0015, 29/01/2017
B, 1100055, B0015, 29/01/2017
C, 1100055, C0015, 29/01/2017
D, 1100055, D0015, 29/01/2017
E, 1100055, D0015, 29/01/2017
] ;
Maicon, Muito Obrigado!
Isso mesmo, a tabela de vendas históricas apresenta todas as vendas, inclusive as das coleções atuais.
A ideia é verificar se o cliente comprou apenas a coleção atual na marca consultando a tabela histórica de vendas.
Exemplo: Se o cliente 1100055 comprou a marca A apenas na coleção 0015 ele é considerado cliente novo (nesta marca). No caso acima, ele é considerado um cliente antigo, pois já comprou na coleção 0014 na marca A.
A Marca é a primeira letra da coleção, sendo assim vou deixar a coleção separada para facilitar.
VENDAS ATUAIS | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | ||||
A | 1100055 | 0015 | 29/01/2017 | ||||
B | 1100055 | 0015 | 29/01/2017 | ||||
C | 1100055 | 0015 | 29/01/2017 | ||||
D | 1100055 | 0015 | 29/01/2017 | ||||
HISTÓRICO | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | ||||
A | 1100055 | 0014 | 21/11/2016 | ||||
B | 1100055 | 0012 | 12/09/2016 | ||||
A | 1100055 | 0015 | 29/01/2017 | ||||
B | 1100055 | 0015 | 29/01/2017 | ||||
C | 1100055 | 0015 | 29/01/2017 | ||||
D | 1100055 | 0015 | 29/01/2017 | ||||
SAIDA DESEJADA | |||||||
MARCA | CLIENTE | COLEÇÃO | DATAVENDA | TIPO | OBS | ||
A | 1100055 | 0015 | 29/01/2017 | CLIENTE ANTIGO | Não Comprou a primeira vez na marca | ||
B | 1100055 | 0015 | 29/01/2017 | CLIENTE ANTIGO | Não Comprou a primeira vez na marca | ||
C | 1100055 | 0015 | 29/01/2017 | CLIENTE NOVO | Comprou a primeira vez na marca | ||
D | 1100055 | 0015 | 29/01/2017 | CLIENTE NOVO | Comprou a primeira vez na |
Oi Jackson, Muito obrigado pela resposta !
Acho que é algo muito próximo disso.
Era para aparecer a marca "C e D" como primeira compra, lembrando que as compras atuais também fazem parte do histórico. Acho que o problema estaria na validação, o script precisa verificar a chave CLIENTE &'|'&MARCA na tabela atuais antes de mapear. No Mapping ele não poderia considerar a compra atual, mas só as diferentes dela na marca. Se ele não comprou alguma coleção diferente a da tabela atual no histórico, ela é cliente novo.
Grande Abraço
Anderson,
veja se isto é o que precisa
Ate deve ter uma forma mais simples, mas o tico e teco esta baleado.......
Vendas_Atual:
LOAD
*
INLINE [
MARCA, CLIENTE,COLEÇÃO, DATAVENDA
A, 1100055 ,0015, 29/01/2017
B, 1100055 ,0015, 29/01/2017
C, 1100055 ,0015, 29/01/2017
D, 1100055 ,0015, 29/01/2017
];
left join
HISTÓRICO:
LOAD
MARCA,
CLIENTE,
min(DATAVENDA) as Primeira_Compra
Group by MARCA,CLIENTE;
LOAD *
INLINE [
MARCA, CLIENTE,COLEÇÃO, DATAVENDA
A, 1100055, 0014 ,21/11/2016
B, 1100055, 0012 ,12/09/2016
A, 1100055, 0015 ,29/01/2017
B, 1100055, 0015 ,29/01/2017
C, 1100055, 0015 ,29/01/2017
D, 1100055, 0015 ,29/01/2017
];
left join
LOAD
MARCA,
CLIENTE,
DATAVENDA,
if(DATAVENDA = Primeira_Compra,'Cliente Novo','Cliente Antigo') as Tipo
Resident Vendas_Atual;
Alessandro, Sensacional!!!
Era exatamente isso que eu precisava, testei aqui e deu certo.
Muito Obrigado!
Abs,
Alessandro,
Preciso muito de um auxilio na montagem de um esquema operacional pode me ajudar por gentileza, segue link com detalhes das necessidades
Carregamento de Planilhas Excel
Atenciosamente