# 結合の代替としてのマッピング

Qlik Sense の Join プレフィックスは、データ モデルで複数のデータ テーブルを組み合わせる強力な方法です。

ただし、組み合わされたテーブルが大きくなり、パフォーマンスに問題が生じる可能性があるという欠点もあります。そこで、別のテーブルから単一の値を探す必要がある場合など、Join の代わりにマッピングを使用することができます。結合ではテーブルのレコード数が変わるため、計算のスピードダウンとエラーの原因になる可能性がある不要なデータのロードを回避できます。

マッピング テーブルは、比較項目 (入力) とマッピング値項目 (出力) という 2 つの列で構成されます。

この例では注文テーブル (Orders), を使用しており、顧客の国を把握する必要があります。この情報は、顧客テーブル (Customers) に保管されています。

OrdersOrders データ テーブル

| 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 |

CustomersCustomers データ テーブル

| CustomerID | 名前 | [Country] (国) | ... |
| --- | --- | --- | --- |
| 1 | DataSales | スペイン | ... |
| 2 | BusinessCorp | イタリア | ... |
| 3 | TechCo | ドイツ | ... |
| 4 | Mobecho | フランス | ... |

顧客の国 (Country) を見つけるには、以下のようなマッピング テーブルが必要です。

マッピング テーブル

| CustomerID | [Country] (国) |
| --- | --- |
| 1 | スペイン |
| 2 | イタリア |
| 3 | ドイツ |
| 4 | フランス |

MapCustomerIDtoCountry という名前を付けたマッピング テーブルは、以下のようにスクリプトで定義されます。

```
     MapCustomerIDtoCountry:
     Mapping LOAD CustomerID, Country From Customers ;
     
```

次に、注文テーブルをロードする際に、ApplyMap 関数を使用してマッピングを適用します。

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

ApplyMap 関数の 3 番目のパラメータは、マッピング テーブルで値が見つからない場合に何を返すのか定義するために使われます。この例では、Null() です。

この結果、テーブルは次のようになります。

結果テーブル

| OrderID | OrderDate | ShipperID | Freight | CustomerID | [Country] (国) |
| --- | --- | --- | --- | --- | --- |
| 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 | ドイツ |

## 詳細を見る

* [ApplyMap スクリプト関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/MappingFunctions/ApplyMap.htm)
* [マッピング](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Mapping.htm)