Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
flavia_lelot
Partner - Contributor II
Partner - Contributor II

MapSubString?

Pessoal, tenho a seguinte situação para criar um painel no qlik.

Tabela 1:

nomecliente, codigodeprodutocomprados

antonio, 101102103

josé, 102404

maria, 202403404

andré, -

Sendo que codigodeprodutocomprados pode ter vários códigos, todos com 3 algarismos

Tabela 2:

codigodeproduto, nomeproduto, grupoproduto

101, toalha_rosto, banho

102, lençol, cama

103, cobertor, cama

202, toalha_mesa, mesa

403, prato, mesa

404, tapete, banho

Preciso que os dados apresentados no final fiquem assim para que eu possa construir a apresentação dos dados:

nomecliente, codigodeprodutocomprados, nomeproduto, grupoproduto

antonio,101,toalha_rosto, banho

antonio,102, lençol, cama

antonio,103, cobertor, cama

josé,102, lençol, cama

josé,404, tapete, banho

maria,202, toalha_mesa, mesa

maria,403, prato, mesa

maria,404, tapete, banho

andré, -,-,-

Como posso fazer isso? Usando MapSubString?

4 Replies
girino777
Creator III
Creator III

Bom Dia.!

Tenta Assim:

nomecliente&','&mid(codigodeprodutocomprados,1,3)&','&nomeproduto&','&grupoproduto

flavia_lelot
Partner - Contributor II
Partner - Contributor II
Author

Oi Renato, eu tenho uma base com mais de 4 milhões de registro. E coloquei um exemplo simplificado do que tenho que fazer.

Não entendi como poderia utilizar a sua sugestão ainda na carga desses dados.

elvis_schwarz
Creator
Creator

Olá Flavia

Tenta adaptar o código abaixo a sua necessidade:

[Tabela 1]:

LOAD * Inline [

nomecliente, codigodeprodutocomprados

antonio, 101102103

josé, 102404

maria, 202403404

andré, -

];

//Sendo que codigodeprodutocomprados pode ter vários códigos, todos com 3 algarismos

NoConcatenate [Tabela 2]:

LOAD

nomecliente,

codigodeprodutocomprados,

Len(codigodeprodutocomprados) as  [conta caracteres]

Resident [Tabela 1];

DROP TABLE [Tabela 1];

FimFor:

LOAD

MAX([conta caracteres]) as FimFor //Verifica qua é maior quantidade de caracteres que um codigodeprodutocomprados tem

RESIDENT [Tabela 2];

Let VFimFOr =Peek('FimFor',0,'FimFor'); //Atribui a uma variavel a maior quantidade de caracteres

TRACE -- $(VFimFOr);

FOR i = 1 to $(VFimFOr) //faz um loop para tratar o código do produto

Let vX = 3*$(i);

TRACE -- $(vX);

[Tabela 3]:

LOAD

nomecliente,

codigodeprodutocomprados,

if(Len(codigodeprodutocomprados)-$(vX) >=3,

Left(Right(codigodeprodutocomprados, [conta caracteres]-$(vX)),3),

Left(codigodeprodutocomprados,3) ) as [Código Produto]

RESIDENT [Tabela 2];

NEXT

DROP TABLE [Tabela 2];

//Faz um join com sua tabela de produtos aqui

flavia_lelot
Partner - Contributor II
Partner - Contributor II
Author

Muito obrigada Elvis!!!