Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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?
Bom Dia.!
Tenta Assim:
nomecliente&','&mid(codigodeprodutocomprados,1,3)&','&nomeproduto&','&grupoproduto
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.
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
Muito obrigada Elvis!!!