# Usando o mapeamento como uma alternativa à junção

O prefixo Join no Qlik Sense é uma ótima maneira de combinar várias tabelas de dados no modelo de dados.

Uma desvantagem é que as tabelas combinadas podem se tornar grandes e criar problemas de desempenho. Uma alternativa ao Join, nas situações em que você precisa analisar um único valor de outra tabela, é usar o mapeamento. Isso pode prevenir o carregamento de dados desnecessários, que atrasa os cálculos e pode criar erros de cálculo, porque as junções podem mudar o número de registros nas tabelas.

A tabela de mapeamento consiste em duas colunas: um campo de comparação (entrada) e um campo de valor de mapeamento (saída).

Nesse exemplo, temos uma tabela de pedidos (Orders) e precisamos saber quais são os países dos clientes, que estão armazenados na tabela de clientes (Customers).

Tabela de dados OrdersOrders

| OrderID | OrderDate | ShipperID | Frete | CustomerID |
| --- | --- | --- | --- | --- |
| 12987 | 2007-12-01 | 1 | 27 | 3 |
| 12988 | 2007-12-01 | 1 | 65 | 4 |
| 12989 | 2007-12-02 | 2 | 32 | 2 |
| 12990 | 2007-12-03 | 1 | 76 | 3 |

Tabela de dados CustomersCustomers

| CustomerID | Nome | País | ... |
| --- | --- | --- | --- |
| 1 | DataSales | Espanha | ... |
| 2 | BusinessCorp | Itália | ... |
| 3 | TechCo | Alemanha | ... |
| 4 | Mobecho | França | ... |

A fim de procurar o país (Country) de um cliente, precisamos de uma tabela de mapeamento que teria a seguinte aparência:

Tabela de mapeamento

| CustomerID | País |
| --- | --- |
| 1 | Espanha |
| 2 | Itália |
| 3 | Alemanha |
| 4 | França |

A tabela de mapeamento, que nomeamos para MapCustomerIDtoCountry, é definida no script da seguinte forma:

```
     MapCustomerIDtoCountry:
     Mapping LOAD CustomerID, Country From Customers ;
     
```

O próximo passo é aplicar o mapeamento, utilizando a função ApplyMap ao carregar a tabela de pedidos:

```
Orders:
     LOAD *,
          ApplyMap('MapCustomerIDtoCountry', CustomerID, null()) as Country
          From Orders ;
     
```

O terceiro parâmetro da função ApplyMap é usado para definir o que deve ser retornado quando um valor não for encontrado na tabela de mapeamento, neste caso Null().

A tabela resultante teria a seguinte aparência:

Tabela de resultados

| OrderID | OrderDate | ShipperID | Frete | CustomerID | País |
| --- | --- | --- | --- | --- | --- |
| 12987 | 2007-12-01 | 1 | 27 | 3 | Alemanha |
| 12988 | 2007-12-01 | 1 | 65 | 4 | França |
| 12989 | 2007-12-02 | 2 | 32 | 2 | Itália |
| 12990 | 2007-12-03 | 1 | 76 | 3 | Alemanha |

## Saiba mais

* [ApplyMap Função de script](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/MappingFunctions/ApplyMap.htm)
* [Mapeamento](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Mapping.htm)