使用對應作為聯結的替代選項
QlikView 中的 Join 前置詞是結合資料模型中數個資料表格的極有效方法。一個不足之處是結合的表格可能較大,並造成效能問題。在您需要從另一個表格中查閱單一值時,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 |