Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
brunoducatti
Creator
Creator

Contar passagens dos clientes

Bom dia, tenho uma regra para atender em relação a quantidade de vezes que o cliente passou pela loja em um determinado período que não encontrei uma forma de tratar.

A passagem significa a quantidade de vezes que o cliente comprou na loja.

Porém, a regra que preciso atender é que se o cliente passou pela loja em um intervalo de até 5 dias, esta passagem devo contar apenas uma vez.

Exemplo:

Neste QVW que estou enviando o cliente de código 120 comprou no dia 01/08, 05/08 e 15/08. Como a passagem do dia 05/08 está em até 5 dias em relação a 01/08, devo considerar apenas 1 passagem. Neste caso, o cliente terá 2 passagens no período (01/08 e 15/08).

Há como fazer isso no qlikview?

Labels (3)
1 Solution

Accepted Solutions
Anonymous
Not applicable

Bom dia Bruno,

criei um contador pelo script, vê se atende.

tmp:

LOAD NF,

  Data,

  [Codigo Cliente] as cliente,

  Valor

FROM base.xlsx (ooxml, embedded labels, table is Plan1);

Vendas:

NoConcatenate

LOAD *,

if(cliente = Previous(cliente) , if(num(Data) - num(Previous(Data)) > 5 , 1 ,0) , 1) as Qtde_passagem

Resident tmp

order by cliente asc, Data asc ;

drop Table tmp;

View solution in original post

6 Replies
Anonymous
Not applicable

Bom dia Bruno,

criei um contador pelo script, vê se atende.

tmp:

LOAD NF,

  Data,

  [Codigo Cliente] as cliente,

  Valor

FROM base.xlsx (ooxml, embedded labels, table is Plan1);

Vendas:

NoConcatenate

LOAD *,

if(cliente = Previous(cliente) , if(num(Data) - num(Previous(Data)) > 5 , 1 ,0) , 1) as Qtde_passagem

Resident tmp

order by cliente asc, Data asc ;

drop Table tmp;

brunoducatti
Creator
Creator
Author

Obrigado Rodrigo

brunoducatti
Creator
Creator
Author

Rodrigo, se for colocar uma nova condição, exemplo, no Excel anexo coloquei uma nova coluna com tipo de produto. Uma mesma NF pode ter vendido mais de um tipo de produto, mas quero criar uma regra, onde se a mesma NF tiver mais de um tipo de produto, considerar a prioridade abaixo:

1. Acessorios

2. Opcionais

3. Basico

Resumindo, só vamos contar 1 vez a NF e exibir o tipo de produto conforme a regra acima (no caso teria que mostrar Acessorios).

Anonymous
Not applicable

No seu caso eu faria da seguinte maneira, uma tabela de mapeamento com o número do tipo de produto ( map_prioridade) ; depois criaria uma tabela com a regra (regra_prioridade) ; por último uso a função EXISTS() na tabela principal para trazer somente os valores da tabela regra_prioridade.

map_prioridade:

Mapping

load  * inline

[de,para

Acessorios,1

Opcionais,2

Basico,3];

regra_prioridade:

LOAD NF,

  NF&'|'&min(ApplyMap( 'map_prioridade' , [Tipo Produto])) AS chave_prioridade

FROM base.xlsx (ooxml, embedded labels, table is Plan1)

group by NF;

tmp:

LOAD NF,

  Data,

  [Codigo Cliente] as cliente,

    [Tipo Produto],

  Valor

FROM base.xlsx (ooxml, embedded labels, table is Plan1)

where Exists(chave_prioridade ,  NF&'|'&ApplyMap( 'map_prioridade' , [Tipo Produto]));

drop table regra_prioridade;

brunoducatti
Creator
Creator
Author

Rodrigo, bom dia! Tudo bem?

Tive que parar este projeto e agora estou retomando.

Fui fazer um teste com a rotina de contar as passagens dos clientes a partir de 6 dias da ultima e me deparei com um caso que não entendi muito bem o problema ocorrido.

Tem 3 passagens do mesmo cliente no mesmo dia (05/09), nesta regra como todas estão inferiores a 5 dias, só deveria contar uma, mas não entendi porque está contando duas.

Segue o exemplo que está selecionado no qvw.

Obrigado desde ja!

Anonymous
Not applicable

Seguinte...

A função Previous() , vai pegar o registro anterior, ou seja para funcionar da forma que você quer, é preciso que a tabela esteja ordenada corretamente.

Volte ao exemplo que te passei e perceba que eu faço um resident da tabela, para poder ordena-la da forma correta "order by cliente asc, Data asc ;'

* O order by só funciona em um resident, então você precisa primeiro carregar a tabela normalmente (será uma tabela temporária), fazer um resident dela aplicando a função e o cálculo de passagens e depois excluir a tabela temporária.