Usando o mapeamento como uma alternativa à junção
O prefixo Join no QlikView é 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 qual é o país do cliente, que está armazenado na tabela de clientes (Customers).
OrderID | OrderDate | ShipperID | Freight | 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 |
CustomerID | Name | Country | ... |
---|---|---|---|
1 | DataSales | Spain | ... |
2 | BusinessCorp | Italy | ... |
3 | TechCo | Germany | ... |
4 | Mobecho | France | ... |
A fim de procurar o país (Country) de um cliente, precisamos de uma tabela de mapeamento que teria a seguinte aparência:
CustomerID | Country |
---|---|
1 | Spain |
2 | Italy |
3 | Germany |
4 | France |
A tabela de mapeamento, que nomeamos para MapCustomerIDtoCountry, é definida no script da seguinte forma:
O próximo passo é aplicar o mapeamento, utilizando a função ApplyMap ao carregar a tabela de pedidos:
O terceiro parâmetro da função ApplyMap é usado para definir o que deve ser retornado quando o valor não for encontrado na tabela de mapeamento, neste caso Null().
A tabela resultante teria a seguinte aparência:
OrderID | OrderDate | ShipperID | Freight | CustomerID | Country |
---|---|---|---|---|---|
12987 | 2007-12-01 | 1 | 27 | 3 | Germany |
12988 | 2007-12-01 | 1 | 65 | 4 | France |
12989 | 2007-12-02 | 2 | 32 | 2 | Italy |
12990 | 2007-12-03 | 1 | 76 | 3 | Germany |