Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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?
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;
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;
Obrigado Rodrigo
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).
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;
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!
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.