Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Remover Acentos No Qlikview

Olá Pessoal, estou aqui para demonstrar uma forma simples de resolver um problema bem comum quando trabalhamos múltiplas fontes de dados: como remover acentos no Qlikview.

O cenário é bem típico. Eu tenho uma aplicação que mistura dados de múltiplas fontes de dados, incluindo um banco de dados Oracle e planilhas em Excel. O problema é que o nome das Cidades na base Oracle está acentuado e no Excel nem sempre. Então como igualar para poder realizar um link/join entre as informações.

A solução é bem simples. Vamos utilizar a função MapSubString. Esta função utiliza uma tabela com dois campos para executar uma substituição do tipo DE -> PARA, carácter a carácter.

mapsubstring(‘mapname’, expr)

Antes de utilizar a função MapSubString temos que carregar nossa tabela de conversão de caracteres. Bom vou dar uma colher de chá e publicar a que estou utilizando. Ela está bem completa, mas se precisar incluir mais uma conversão, fique a vontade, é só incluir uma nova linha. Segue o LOAD da tabela abaixo:

RemoveAcento_Map:

Mapping

LOAD * INLINE [

F1, F2

Š, S

š, s

Ž, Z

ž, z

À, A

Á, A

Â, A

Ã, A

Ä, A

Å, A

Æ, A

Ç, C

È, E

É, E

Ê, E

Ë, E

Ì, I

Í, I

Î, I

Ï, I

Ñ, N

Ò, O

Ó, O

Ô, O

Õ, O

Ö, O

Ø, O

Ù, U

Ú, U

Û, U

Ü, U

Ý, Y

Þ, B

ß, B

à, a

á, a

â, a

ã, a

ä, a

å, a

æ, a

ç, c

è, e

é, e

ê, e

ë, e

ì, i

í, i

î, i

ï, i

ð, o

ñ, n

ò, o

ó, o

ô, o

õ, o

ö, o

ø, o

ù, u

ú, u

û, u

ý, y

ý, y

þ, b

ÿ, y

];

Um pouco grande certo? Bom espero que ajude.

Continuando com nosso exemplo eu fiz uma pequena aplicação. Primeiro criei uma pequena tabela de nomes ao qual dei o nome de NOMES:

NOMES:

LOAD * INLINE [

NOME_NORMAL

Luiz Otávio

Pedro Miguel

William

Ícaro

Giovanni

João Paulo

Kauê

Maitê

Eloá

Lívia

];

Logo em seguida eu utilizo a função MapSubString para remover os acentos. O primeiro parâmetro da função MapSubString é o nome da tabela DE -> PARA que apresentei acima. O segundo é o campo onde os caracteres serão substituídos. Vejamos:

LOAD

NOME_NORMAL,

MapSubString('RemoveAcento_Map', NOME_NORMAL) as NOME_SEM_ACENTO

Resident NOMES;

O Resultado pode ser visto na imagem abaixo:

Resultado da remoção de acentos

Se quiserem colocar em caixa alta (maiúscula) é só colocar um Upper antes do MapSubstring:

LOAD

NOME_NORMAL,

Upper(MapSubString('RemoveAcento_Map', NOME_NORMAL)) as NOME_SEM_ACENTO

Resident NOMES;

Bem é isso, espero que tenham gostado e que este post seja útil. Até breve e mandem seus comentários!

Segue o Código de Exemplo: http://wallace-prado.com.br/wp-content/uploads/2014/08/RemoverAcentos.zip

Labels (1)
6 Replies
nicolett_yuri

Isso ae !

Anonymous
Not applicable
Author

Muito bom o Artigo wallace.prado‌. Não conhecia a função MapSubString.

Apenas uma sugestão para otimizar essa tradução.

Coloquei na tabela de Mapeamento de Acentos, apenas os caracteres em maíusculo, e no local onde a função vai ser utilizada, usar o UPPER antes, ficando da seguinte forma:


MapSubString('RemoveAcento_Map', UPPER(NOME_NORMAL)) as NOME_SEM_ACENTO


Assim a tabela de acentos fica com metade do tamanho, e para um grande volume de dados na tabela de aplicação, a busca pela troca de caracteres levaria metade do tempo!

Um abraço!

jamirjunior
Creator
Creator

Obrigado por compartilhar, muito útil !

Vou precisar de usar em vários lugares, criei um .qvs e estou inserindo via "Arquivo de Script", existe outra alternativa ? criando uma função/módulo? queria reaproveitar o código.

dhsilva7
Contributor III
Contributor III

Olá,

Muito bom cara, vai ser muito útil nos projetos aqui.

Obrigado por compartilhar.

Abs,

andersons
Contributor II
Contributor II

Excelente, bem o que estava procurando!

Renatusfreitas
Partner - Contributor III
Partner - Contributor III

Usando a função Upper poderá declarar apenas os caracteres maiúsculos, irá ajudar na performance.

[Map_Remove_Acento]:
Mapping
LOAD * INLINE [
DE, PARA
Š, S
Ž, Z
À, A
Á, A
Â, A
Ã, A
Ä, A
Å, A
Æ, A
Ç, C
È, E
É, E
Ê, E
Ë, E
Ì, I
Í, I
Î, I
Ï, I
Ñ, N
Ò, O
Ó, O
Ô, O
Õ, O
Ö, O
Ø, O
Ù, U
Ú, U
Û, U
Ü, U
Ý, Y
Þ, B
ß, B
];

 

//--------------------------

LOAD
*,
MapSubString('Map_Remove_Acento', Trim(Upper("Rua")))     AS 'Rua S/a'
;

 

Se está solução ajudou, aceite-a como uma solução.

https://br.linkedin.com/in/renatusfreitas

https://cubotimize.com/