QlikWorld 2020 Global Conference. Join us to discover how to get the most from your data. Act fast. Register now and save.

将映射用作联接的替代

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