Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Identificando Tipo de Clientes em uma tabela

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
MARCACLIENTECOLEÇÃODATAVENDA
A1100055A001529/01/2017
B1100055B001529/01/2017
C1100055C001529/01/2017
D1100055D001529/01/2017
HISTÓRICO
MARCACLIENTECOLEÇÃODATAVENDA
A1100055A001421/11/2016
B1100055B001212/09/2016
A1100055A001529/01/2017
B1100055B001529/01/2017
C1100055C001529/01/2017
D1100055D001529/01/2017
SAIDA DESEJADA
MARCACLIENTECOLEÇÃODATAVENDATIPOOBS
A1100055A001529/01/2017CLIENTE ANTIGONão Comprou a primeira vez na marca
B1100055B001529/01/2017CLIENTE ANTIGONão Comprou a primeira vez na marca
C1100055C001529/01/2017CLIENTE NOVOComprou a primeira vez na marca
D1100055D001529/01/2017CLIENTE NOVOComprou a primeira vez na marca

Abs,

Mensagem editada por: Anderson Silva Caso precise de maiores detalhes, por favor me comunique.

Labels (2)
1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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;

furtado@farolbi.com.br

View solution in original post

9 Replies
maiconmello
Creator III
Creator III

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 ?

JacksonAlfonso
Creator
Creator

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

JacksonAlfonso
Creator
Creator

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

] ;

Anonymous
Not applicable
Author

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
MARCACLIENTECOLEÇÃODATAVENDA
A1100055001529/01/2017
B1100055001529/01/2017
C1100055001529/01/2017
D1100055001529/01/2017
HISTÓRICO
MARCACLIENTECOLEÇÃODATAVENDA
A1100055001421/11/2016
B1100055001212/09/2016
A1100055001529/01/2017
B1100055001529/01/2017
C1100055001529/01/2017
D1100055001529/01/2017
SAIDA DESEJADA
MARCACLIENTECOLEÇÃODATAVENDATIPOOBS
A1100055001529/01/2017CLIENTE ANTIGONão Comprou a primeira vez na marca
B1100055001529/01/2017CLIENTE ANTIGONão Comprou a primeira vez na marca
C1100055001529/01/2017CLIENTE NOVOComprou a primeira vez na marca
D1100055001529/01/2017CLIENTE NOVOComprou a primeira vez na
Anonymous
Not applicable
Author

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

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Anderson,

veja se isto é o que precisa

2017-01-30 19_45_33-QlikView x64 - [C__Furtado_Qlik_QlikView_Demos_Community_Historico Compra.qvw].png

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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;

furtado@farolbi.com.br
Anonymous
Not applicable
Author

Alessandro, Sensacional!!!

Era exatamente isso que eu precisava, testei aqui e deu certo.

Muito Obrigado!

Abs,

Anonymous
Not applicable
Author

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