
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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:
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
- Tags:
- Group_Documents


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Isso ae !

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Olá,
Muito bom cara, vai ser muito útil nos projetos aqui.
Obrigado por compartilhar.
Abs,

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Excelente, bem o que estava procurando!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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'
;
https://br.linkedin.com/in/renatusfreitas
https://cubotimize.com/
