Использование сопоставления как альтернативы соединению

Префикс Join в программе QlikView является мощным инструментом для объединения нескольких таблиц данных в модель данных. Единственным недостатком является то, что объединенные таблицы могут оказаться большими, из-за чего могут возникнуть проблемы при выполнении. Альтернативой соединению Join в ситуациях, когда необходимо найти одиночное значение в другой таблице, является сопоставление. В этом случае не будут загружены ненужные данные, которые могли бы замедлить вычисления и создать ошибки при вычислениях, поскольку при соединении может измениться число записей в таблицах.

Таблица сопоставления состоит из двух столбцов: поле сравнения (входные данные) и поле со значением сопоставления (выходные данные).

В этом примере у нас есть таблица с заказами (Orders). Нам необходимо узнать страну клиента, который указан в таблице клиентов (Customers).

Orders Таблица данных
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
Customers Таблица данных
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, определена в скрипте следующим образом:

MapCustomerIDtoCountry: Mapping LOAD CustomerID, Country From Customers ;

Далее мы применим сопоставление с помощью функции ApplyMap при загрузке таблицы с заказами:

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

Третий параметр функции 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