Ir para conteúdo principal

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:

  1. Crie um novo aplicativo e nomeie-o.
  2. Adicione uma nova seção de script no Editor de carregamento de dados.
  3. Nomeie a seção como Countries.
  4. Digite o seguinte script:
  5. 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:

Tabela de dados
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:

  1. Abaixo do script digitado acima, selecione e carregue Data.xlsx e insira o script.
  2. Digite o seguinte acima do comando LOAD recém-criado:
  3. Dados:

    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);

  4. Modifique a linha que contém Country, da seguinte maneira:
  5. 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.

  6. Clique em Carregar dados.
  7. A tabela resultante tem a seguinte aparência:

    Tabela mostrando dados carregados usando a função ApplyMap()
    Table showing data loaded using ApplyMap function.

    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.

  8. 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:
  9. 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);

  10. Clique em Carregar dados.
  11. A tabela resultante tem a seguinte aparência:

    Tabela mostrando dados carregados usando a função ApplyMap

Nota informativaPara saber mais sobre ApplyMap(), consulte esta postagem de blog no Qlik Community: Don't join - use Applymap instead (Não unir - usar Applymap em vez disso)

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:

  1. Adicione as seguintes linhas de script à seção CountryMap, porém, antes da seção Data.
  2. 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.

  3. Na seção Data do script, modifique o comando Code da seguinte forma:
  4. 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);

  5. Clique em Carregar dados.
  6. A tabela resultante tem a seguinte aparência:

    Tabela mostrando dados carregados usando a função MapSubString
    Table showing data loaded using MapSubString function.

    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'.

Nota informativaPara saber mais sobre MapSubstring(), consulte esta postagem de blog no Qlik Community: Mapping … e não o tipo geográfico

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:

  1. Substitua o script da tabela Data pelo seguinte:
  2. 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;

  3. Clique em Carregar dados.
  4. A tabela resultante tem a seguinte aparência:

    Tabela mostrando dados carregados usando a função Map … Using
    Table showing data loaded using Map … Using function.