将映射用作联接的替代
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 的映射表已在脚本中定义,如下所示:
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 |