結合の代替としてのマッピング
QlikView の Join プレフィックスは、データ モデルで複数のデータ テーブルを組み合わせる強力な方法です。ただし、組み合わされたテーブルが大きくなり、パフォーマンスに問題が生じる可能性があるという欠点もあります。そこで、別のテーブルから単一の値を探す必要がある場合など、Join の代わりにマッピングを使用することができます。結合ではテーブルのレコード数が変わるため、計算のスピードダウンとエラーの原因になる可能性がある不要なデータのロードを回避できます。
マッピング テーブルは、比較項目 (入力) とマッピング値項目 (出力) の 2 つの列で構成されています。
この例では注文テーブル (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 関数の 3 番目のパラメータは、マッピング テーブルで値が見つからない場合に何を返すのか定義するために使われます。この例では、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 |