Использование сопоставления как альтернативы соединению
Префикс Join в программе QlikView является мощным инструментом для объединения нескольких таблиц данных в модель данных. Единственным недостатком является то, что объединенные таблицы могут оказаться большими, из-за чего могут возникнуть проблемы при выполнении. Альтернативой соединению Join в ситуациях, когда необходимо найти одиночное значение в другой таблице, является сопоставление. В этом случае не будут загружены ненужные данные, которые могли бы замедлить вычисления и создать ошибки при вычислениях, поскольку при соединении может измениться число записей в таблицах.
Таблица сопоставления состоит из двух столбцов: поле сравнения (входные данные) и поле со значением сопоставления (выходные данные).
В этом примере у нас есть таблица с заказами (Orders). Нам необходимо узнать страну клиента, который указан в таблице клиентов (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 | ... |
Чтобы найти страну (Country) клиента, нам нужна таблица сопоставления, которая выглядит следующим образом:
CustomerID | Country |
---|---|
1 | Spain |
2 | Italy |
3 | Germany |
4 | France |
Таблица сопоставления, которую мы назвали MapCustomerIDtoCountry, определена в скрипте следующим образом:
Далее мы применим сопоставление с помощью функции ApplyMap при загрузке таблицы с заказами:
Третий параметр функции ApplyMap используется, чтобы определить, какие значения вернуть. Если значение в таблице сопоставления не найдено, возвращается значение Null().
Результирующая таблица будет выглядеть так:
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 |