Limpeza de dados
Existem situações em que a fonte de dados carregada no Qlik Sense não está necessariamente na forma como desejamos no aplicativo do Qlik Sense. O Qlik Sense oferece uma variedade de funções e comandos que permitem transformar os dados em um formato de acordo com nossas necessidades.
O mapeamento pode ser usado em um script do Qlik Sense para substituir ou modificar os valores ou nomes de campo durante a execução do script. Portanto, o mapeamento pode ser usado para limpar os dados e torná-los mais consistentes ou para substituir partes ou a totalidade de um valor de campo.
Ao carregar dados de diferentes tabelas, os valores de campo que indicam a mesma coisa nem sempre são nomeados de forma consistente. Já que esta falta de consistência dificulta as associações, o problema precisa ser resolvido. Isso pode ser feito de uma maneira organizada e simples, criando uma tabela de mapeamento para a comparação dos valores de campo.
Tabelas de mapeamento
As tabelas carregadas usando carregamento de Mapping ou seleção de Mapping são tratadas de forma diferente de outras tabelas. Eles serão armazenados em uma área separada da memória e usados apenas como tabelas de mapeamento durante a execução do script. Depois da execução do script, essas tabelas são descartadas automaticamente.
Regras:
- A tabela de mapeamento deve ter duas colunas: a primeira contendo valores de comparação e a segunda, os valores de mapeamento desejados.
- As duas colunas devem ser nomeadas, mas os nomes não têm relevância neles mesmos. Os nomes de coluna não têm conexão com os nomes de campo nas tabelas internas normais.
Funções e comandos do Mapping
As seguintes funções/comandos de mapeamento serão abordadas neste tutorial:
• Prefixo Mapping
• ApplyMap()
• MapSubstring()
• Comando Map … Using
• Comando Unmap
Prefixo Mapping
O prefixo Mapping é usado em um script para criar uma tabela de mapeamento. Em seguida, a tabela de mapeamento pode ser usada com a função ApplyMap(), a função MapSubstring() ou o comando Map … Using.
Faça o seguinte:
- Crie um novo aplicativo e nomeie-o.
- Adicione uma nova seção de script no Editor de carregamento de dados.
- Nomeie a seção como Countries.
- Digite o seguinte script:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
A tabela CountryMap armazena duas colunas: Country e NewCountry. A coluna Country armazena as várias formas nas quais o país foi inserido no campo Country. A coluna NewCountry armazena a forma como os valores serão mapeados. Esta tabela de mapeamento será usada para armazenar valores de país US consistentes no campo Country. Por exemplo, se U.S.A. estiver armazenado no campo Country, mapeie-o para ser US.
ApplyMap() função
Use ApplyMap() para substituir os dados de um campo com base em uma tabela de mapeamento criada anteriormente. A tabela de mapeamento precisa ser carregada antes que a função ApplyMap() possa ser usada. Os dados na tabela Data.xlsx que você carregará são semelhantes aos seguintes:
ID | Nome | País | Código |
---|---|---|---|
1 | John Black | U.S.A. | SDFGBS1DI |
2 | Steve Johnson | U.S. | 2ABC |
3 | Mary White | Estados Unidos | DJY3DFE34 |
4 | Susan McDaniels | u | DEF5556 |
5 | Dean Smith | US | KSD111DKFJ1 |
Observe que o país é inserido de várias maneiras. Para tornar o campo Country consistente, a tabela de mapeamento é carregada e, em seguida, a função ApplyMap() é usada.
Faça o seguinte:
- Abaixo do script digitado acima, selecione e carregue Data.xlsx e insira o script.
- Digite o seguinte acima do comando LOAD recém-criado:
- Modifique a linha que contém Country, da seguinte maneira:
- Clique em Carregar dados.
- Adicione 'US' como o terceiro parâmetro da função ApplyMap(), para lidar com os casos em que o país possa ter sido digitado incorretamente:
- Clique em Carregar dados.
Data:
Seu script deve ter a seguinte aparência:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
Data:
LOAD
ID,
Name,
Country,
Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
ApplyMap('CountryMap', Country) as Country,
O primeiro parâmetro da função ApplyMap() contém o nome do mapa entre aspas simples. O segundo parâmetro é o campo que contém os dados que serão substituídos.
A tabela resultante tem a seguinte aparência:
As várias grafias de United States foram alteradas para US. Existe um registro que não foi escrito corretamente; portanto, a função ApplyMap() não alterou esse valor de campo. Ao usar a função ApplyMap(), é possível usar o terceiro parâmetro para adicionar uma expressão padrão se a tabela de mapeamento não contiver um valor correspondente.
ApplyMap('CountryMap', Country, 'US') as Country,
Seu script deve ter a seguinte aparência:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
Data:
LOAD
ID,
Name,
ApplyMap('CountryMap', Country, 'US') as Country,
Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
A tabela resultante tem a seguinte aparência:
MapSubstring() função
A função MapSubstring() permite mapear partes de um campo.
Na tabela criada por ApplyMap(), agora desejamos que os números serão escritos como texto; portanto, a função MapSubstring() será usada para substituir os dados numéricos pelo texto.
Para fazer isso, primeiro precisamos criar uma tabela de mapeamento.
Faça o seguinte:
- Adicione as seguintes linhas de script à seção CountryMap, porém, antes da seção Data.
- Na seção Data do script, modifique o comando Code da seguinte forma:
- Clique em Carregar dados.
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
Na tabela CodeMap, os números 1 a 5 e 11 serão mapeados.
MapSubString('CodeMap', Code) as Code
Seu script deve ter a seguinte aparência:
CountryMap:
MAPPING LOAD * INLINE [
Country, NewCountry
U.S.A., US
U.S., US
United States, US
United States of America, US
];
CodeMap:
MAPPING LOAD * INLINE [
F1, F2
1, one
2, two
3, three
4, four
5, five
11, eleven
];
Data:
LOAD
ID,
Name,
ApplyMap('CountryMap', Country, 'US') as Country,
MapSubString('CodeMap', Code) as Code
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
A tabela resultante tem a seguinte aparência:
Os caracteres numéricos foram substituídos por texto no campo Code. Se um número aparecer mais de uma vez como ocorre com ID=3 e ID=4, o texto também será repetido. ID=4. Susan McDaniels tinha um 6 em seu código. Já que 6 não foi mapeado na tabela CodeMap, ele permanecerá inalterado. ID=5, Dean Smith, tinha 111 em seu código. Ele foi mapeado como 'elevenone'.
Map … Using
O comando Map … Using também pode ser usado para aplicar um mapa a um campo. No entanto, ele funciona um pouco diferente de ApplyMap(). Enquanto ApplyMap() lida com o mapeamento todas as vezes que o nome do campo é encontrado, Map … Using lida como o mapeamento quando o valor é armazenado embaixo do nome do campo na tabela interna.
Vamos dar uma olhada em um exemplo. Suponha que estivéssemos carregando o campo Country várias vezes no script e quiséssemos aplicar um mapa todas as vezes que o campo fosse carregado. A função ApplyMap() pode ser usada como ilustrada anteriormente neste tutorial ou Map … Using pode ser usada.
Se Map … Using for usada, o mapa será aplicada ao campo quando o campo estiver armazenado na tabela interna. Portanto, no exemplo descrito abaixo, o mapa é aplicado ao campo Country da tabela Data1, mas ele não seria aplicado ao campo Country2 da tabela Data2. Isso ocorre porque o comando Map … Using é aplicado somente a campos chamados Country. Quando o campo Country2 é armazenado na tabela interna, ele não é mais chamado Country. Se desejar que o mapa seja aplicado à tabela Country2, será necessário usar a função ApplyMap().
O comando Unmap termina o comando Map … Using, para que se Country fosse carregado após o comando Unmap, CountryMap não seria aplicado.
Faça o seguinte:
- Substitua o script da tabela Data pelo seguinte:
- Clique em Carregar dados.
Map Country Using CountryMap;
Data1:
LOAD
ID,
Name,
Country
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
Data2:
LOAD
ID,
Country as Country2
FROM [lib://DataFiles/Data.xlsx]
(ooxml, embedded labels, table is Sheet1);
UNMAP;
A tabela resultante tem a seguinte aparência: