Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
jamirjunior
Creator
Creator

Como usar ApplyMap

DESC_FABRICANTE
DESC_MARCA_MODELODESC_MODELO
VOLKSWAGENVW/CROSSFOXCROSSFOX
VOLKSWAGENVW/CROSSFOX GIICROSSFOX GII
VOLKSWAGENVW/GOL 1.0 COPAGOL 1.0 COPA

Pessoal, não consegui incluir um arquivo, mas a tabela acima apresenta a situação, como solicitado pelo colega abaixo.

No caso, tenho apenas 2 grupos: FOX e GOL. Quero criar uma lista com apenas esses dois valores

Olá Pessoal !

Como usar ApplyMap neste caso:

LOAD Codigo_MarcaModelo,

     MarcaModelo_Id,

     MarcaModelo_Desc,

     if(Index(MarcaModelo_Desc,' GOL ') or Index(MarcaModelo_Desc,'/GOL '),'GOL',

     if(Index(MarcaModelo_Desc,' PALIO ') or Index(MarcaModelo_Desc,'/PALIO '),'PALIO',

     if(Index(MarcaModelo_Desc,' AGRALE ') or Index(MarcaModelo_Desc,'/AGRALE '),'AGRALE',

     if(Index(MarcaModelo_Desc,' COROLLA ') or Index(MarcaModelo_Desc,'/COROLLA '),'COROLLA',

     if(Index(MarcaModelo_Desc,' VOYAGE ') or Index(MarcaModelo_Desc,'/VOYAGE '),'VOYAGE'

        ))))) as saida

FROM

[T_MarcaModelo.qvd](qvd);

Obrigado

1 Solution

Accepted Solutions
Anonymous
Not applicable

Jamir,

Acredito que a solução mencionada por afurtado‌ resolve seu problema.

Utiliza o Replace para remover a barra.

Como você deseja saber como utilizar o ApplyMap, vou colocar um exemplo abaixo:

  • Primeiramente você deve mapear uma tabela, uma espécie de DE-PARA

     Estados:

     mapping

     LOAD * Inline [

     UF, Estado

     SP, São Paulo

     RS, Rio Grande do Sul

     PE, Pernambuco

     ...

     ] ;


  • Depois aplicar o ApplyMap da seguinte forma:

     ApplyMap('Estados', UF)


     Onde: Estados = Nome da Tabela de Mapeamento e UF = Campo a ser Mapeado

View solution in original post

13 Replies
Marcio_Campestrini
Specialist
Specialist

Jamir

Não consigo montar nenhuma lógica que simplifique o seu trabalho. O que vejo como problema é você não conseguir garantir que o valor do campo MarcaModelo_Desc conterá somente o nome do modelo. O ideal seria ter a informação do modelo, mas aí já resolve o problema...

Márcio Rodrigo Campestrini
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

tentou usar o replace()  ?

LOAD Codigo_MarcaModelo,

     MarcaModelo_Id,

     MarcaModelo_Desc,

     replace(MarcaModelo_Desc, '/','')     as saida

FROM

[T_MarcaModelo.qvd](qvd);

furtado@farolbi.com.br
jamirjunior
Creator
Creator
Author

Olá pessoal!

Gostaria de explicar melhor o caso:

Citei apenas 5 modelos (GOL,PALIO,AGRALE,COROLLA,VOYAGE) porém precisarei de mais uns 50 e pode ser que apareçam 1 a cada mês. Então, penso que teria uma tabela (com os modelos, os 50 e mais os novos, ou seja, instável) e outro LOAD na t_marcamodelo, mas substituindo os valores.

Me orientaram a usar o ApplyMap, por isso estou solicitando suporte.

Obrigado.

Marcio_Campestrini
Specialist
Specialist

Jamir

Você pode nos enviar uma base com todos os modelos de carros? Acredito que vai facilitar a busca por uma solução.

Márcio Rodrigo Campestrini
Anonymous
Not applicable

Jamir,

Acredito que a solução mencionada por afurtado‌ resolve seu problema.

Utiliza o Replace para remover a barra.

Como você deseja saber como utilizar o ApplyMap, vou colocar um exemplo abaixo:

  • Primeiramente você deve mapear uma tabela, uma espécie de DE-PARA

     Estados:

     mapping

     LOAD * Inline [

     UF, Estado

     SP, São Paulo

     RS, Rio Grande do Sul

     PE, Pernambuco

     ...

     ] ;


  • Depois aplicar o ApplyMap da seguinte forma:

     ApplyMap('Estados', UF)


     Onde: Estados = Nome da Tabela de Mapeamento e UF = Campo a ser Mapeado

jamirjunior
Creator
Creator
Author

Pensei em algo como:

Modelo:

     mapping

     LOAD * Inline [

     codigo,nome

     1 , GOL

     ] ;


LOAD Codigo_MarcaModelo,

     MarcaModelo_Id,

     MarcaModelo_Desc,

     if(Index(MarcaModelo_Desc,' ApplyMap('Modelo', codigo) ') or Index(MarcaModelo_Desc,'/ApplyMap('Modelo', codigo) '),'ApplyMap('Modelo', codigo)',

       ) as saida

FROM

[T_MarcaModelo.qvd](qvd);

Anonymous
Not applicable

O código é o mesmo nos dois casos ?

Tipo:      1 Gol

             1 /Gol

Se for, não precisa do IF, é só colocar direto o mapping.

ApplyMap('Modelo', codigo)

jamirjunior
Creator
Creator
Author

Preciso do if pq a palavra GOL está dentro de outra:

exemplos:

VW/GOL 1.0 COPA

GOL 1.0 ECOMOTION GIV

Anonymous
Not applicable

Mas os códigos deles são diferentes ou iguais ?

Se forem iguais, o ApplyMap do jeito que mencionei funciona pra você, caso seja diferente teria que usar duas funções encadeadas.

Poderia tentar assim:

     SubField(MarcaModelo_Desc, Index(MarcaModelo_Desc, 'GOL'), Subfield(MarcaModelo_Desc, Index(MarcaModelo_Desc, 'GOL')+1, Index(MarcaModelo_Desc, ' ')

** Estou sem ajuda do Qlik para testar, mas acredito que seja assim.