Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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!!!