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

Pegando as últimas vendas de cada vendedor em uma tabela

            Em uma tabela de vendas, eu quero pegar apenas a última venda de cada vendedor (ordem:data e hora mais recente). Ex:

Tabela Origem:

Vendedor

 

Data

 

Hora

 

Produto

 

Péricles

 

10/04/2012

 

12:00

 

Webcam

 

Marcelo

 

11/04/2012

 

13:00

 

Celular

 

Paulo

 

12/04/2012

 

14:00

 

Pen Drive

 

Paulo

 

25/04/2012

 

16:00

 

Webcam

 

Péricles

 

13/04/2012

 

09:00

 

Webcam

 

Péricles

 

14/04/2012

 

11:00

 

Celular

 

Péricles

 

25/04/2012

 

14:00

 

Pen Drive

 

Marcelo

 

25/04/2012

 

15:00

 

Celular

 

Marcelo

 

12/04/2012

 

17:00

 

Webcam

 

Tabela Resultante:

Vendedor

 

Data

 

Hora

 

Produto

 

Péricles

 

25/04/2012

 

14:00

 

Pen Drive

 

Marcelo

 

25/04/2012

 

15:00

 

Celular

 

Paulo

 

25/04/2012

 

16:00

 

Webcam

 

Script Tabela Origem:

VENDAS:

LOAD * INLINE [

    Vendedor, Data, Hora, Produto

    Péricles, 10/04/2012, 12:00, Webcam

    Marcelo, 11/04/2012, 13:00, Celular

    Paulo, 12/04/2012, 14:00, Pen Drive

    Paulo, 25/04/2012, 16:00, Webcam

    Péricles, 13/04/2012, 09:00, Webcam

    Péricles, 14/04/2012, 11:00, Celular

    Péricles, 25/04/2012, 14:00, Pen Drive

    Marcelo, 25/04/2012, 15:00, Celular

    Marcelo, 12/04/2012, 17:00, Webcam

];

1 Solution

Accepted Solutions
aderlanrm
Partner - Specialist
Partner - Specialist

Olá Pericles,

Também não entendi o comportamento do MaxString, ele deveria trazer o resultado correto, funcionando como um Max do agrupamento, algo como o que acontece com o SQL, mas...

Fazendo uma junção da ideia do Cesar com a minha e depois de alguns teste, cheguei no script abaixo, dá o resultado que você precisa, o que é mais importante. Rsrsrrs...

Como o MaxString está fazendo correto com a data, agrupando pelo Vendedor ou pelo Produto, no scrpt abaixo funciona.

Abraço.

Temp:

LOAD Vendedor,

    Date#(Data&' '&Hora,'dd/MM/yyyy HH:mm') as Data,

    Produto

INLINE [

    Vendedor, Data, Hora, Produto

    Péricles, 10/04/2012, 12:00, Webcam

    Marcelo, 11/04/2012, 13:00, Celular

    Paulo, 12/04/2012, 14:00, Pen Drive

    Paulo, 25/04/2012, 16:00, Webcam

    Péricles, 13/04/2012, 09:00, Webcam

    Péricles, 14/04/2012, 11:00, Celular

    Péricles, 25/04/2012, 14:00, Pen Drive

    Marcelo, 25/04/2012, 15:00, Celular

    Marcelo, 12/04/2012, 17:00, Webcam

];

Vendas:

LOAD Vendedor,

    MaxString(Data) as Data

Resident Temp

Group By Vendedor;

Left Join (Vendas)

LOAD Produto,

    MaxString(Data) as Data

Resident Temp

Group By Produto;

DROP Table Temp;

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)

View solution in original post

11 Replies
cesaraccardi
Specialist
Specialist

Olá Péricles,

Você pode fazer o seguinte:

Carregue a tabela fazendo uma agregação com a função max para a maior (última) data, fica assim:

LOAD

Vendedor,
Produto,
max(Data)
INLINE[...]
GROUP BY Vendedor, Produto;


Se ocorrerem vendas na mesma data você teria que incluir a hora no campo Data antes de realizar o "max", acredito que você possa fazer isso com uma simples concatenação dos campos Data e Hora com um espaço separador...

Espero ter ajudado, abraços.
Cesar

aderlanrm
Partner - Specialist
Partner - Specialist

Olá Pericles, tenta esse o script abaixo.

Com o Group By você diz qual campo será o agrupador e a função MaxString, pega o maior valor encontrado na coluna correspondente, se você quiser saber qual o último dia e hora, tem que fazer esse campo se um só, assim o MaxString vai reotornar o maior dia/hora correspondente, um pouco diferente do que acontece com esse script, não sei se é exatamente isso que você está tentando fazer.

Abraço.

Script Tabela Origem:

VENDAS:

LOAD Vendedor,

     MaxString(Data) as Data,

     MaxString(Hora) as Hora,

     MaxString(Produto) as Produto

INLINE [

    Vendedor, Data, Hora, Produto

    Péricles, 10/04/2012, 12:00, Webcam

    Marcelo, 11/04/2012, 13:00, Celular

    Paulo, 12/04/2012, 14:00, Pen Drive

    Paulo, 25/04/2012, 16:00, Webcam

    Péricles, 13/04/2012, 09:00, Webcam

    Péricles, 14/04/2012, 11:00, Celular

    Péricles, 25/04/2012, 14:00, Pen Drive

    Marcelo, 25/04/2012, 15:00, Celular

    Marcelo, 12/04/2012, 17:00, Webcam

] Group By Vendedor;

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
aderlanrm
Partner - Specialist
Partner - Specialist

Nossa! Diferença de minutos nas respostas! Rsrsrsrs... Em quanto eu escrevia, você já estava respondendo Cesar! Hahaha!

Fica como complemento... Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
cesaraccardi
Specialist
Specialist

O Aderlan, você não tem o que fazer não? De madrugada respondendo aí? rs....

Abraço.

aderlanrm
Partner - Specialist
Partner - Specialist

A reciproca é verdadeira! Rsrsrsr...

Aproveito o tempo livre das 00:00 e as 06:00 para aprender um pouco mais com os feras aqui da community!

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
pericles_silva
Contributor III
Contributor III
Author

Aderlan, seu script funcionou perfeitamente, mas só com um problema: Como o campo Produto está com MaxString, ele retorna sempre a Webcam, pois é o maior caracter dentre os outros. Mas o certo era retornar o produto correspondente a linha. Tem alguma ideia?

Cesar, muito obrigado mas não deu a tabela resultante. Concatenei os valores de Data e Hora no mesmo campo, formando um único campo, mas mesmo assim não deu a tabela resultante. Mas valeu ae.

Anonymous
Not applicable

tente tirar o maxstring do produto.

deixe apenas na data e hora

pericles_silva
Contributor III
Contributor III
Author

Rodrigo, ai que é o problema. Se eu tirar o Maxstring(Produto) as Produto e deixar apenas Produto, isto quer dizer que eu obrigatoriamente terei que agrupar também o campo Produto (GROUP BY Vendedor, Produto) e isso não pode ser feito, pois aparecerão vendas de outras datas (exatamente o que aconteceu no Script do Cesar mais acima).

Não sei se você testou mas veja o erro de lógica que acontece:

VENDAS:

LOAD Vendedor,

     MaxString(Data) as Data,

     MaxString(Hora) as Hora,

     Produto

INLINE [

    Vendedor, Data, Hora, Produto

    Péricles, 10/04/2012, 12:00, Webcam

    Marcelo, 11/04/2012, 13:00, Celular

    Paulo, 12/04/2012, 14:00, Pen Drive

    Paulo, 25/04/2012, 16:00, Webcam

    Péricles, 13/04/2012, 09:00, Webcam

    Péricles, 14/04/2012, 11:00, Celular

    Péricles, 25/04/2012, 14:00, Pen Drive

    Marcelo, 25/04/2012, 15:00, Celular

    Marcelo, 12/04/2012, 17:00, Webcam

] Group By Vendedor, Produto;

Lembrando que a tabela resultante é essa:

Tabela Resultante:

Vendedor

Data

Hora

Produto

Péricles

25/04/2012

14:00

Pen Drive

Marcelo

25/04/2012

15:00

Celular

Paulo

25/04/2012

16:00

Webcam

cesaraccardi
Specialist
Specialist

Olá Péricles, se você incluir o Produto nesta carga obrigatoriamente mostrará a última venda de cada Produto por Vendedor. Se o seu objetivo é mostrar a última venda independente do produto você deve carregar o produto em outra tabela que não esteja agregada e usar algum campo para vincular (ex. Código da Venda), este campo obviamente deverá constar no group by.