> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# インポートしたオーディエンスをターゲティングする

> データインジェスチョンタスクを通じてインポートしたデータウェアハウスのオーディエンスを、カスタムデータとセグメントを設定して Kameleoon キャンペーンのターゲティング条件として使用します。

<Note>
  データウェアハウス連携は、当社の Web Experimentation および Feature Experimentation モジュールのプレミアムアドオンとしてご利用いただけます。詳細については、カスタマーサクセスマネージャーまでお問い合わせください。
</Note>

現在、次のプロバイダーからのデータウェアハウス連携をサポートしています：

* BigQuery
* Snowflake
* Redshift
* Databricks

以下のプロバイダーのサポートは近日中に提供予定です：

* Microsoft Azure

詳細について、また当社のアーリーアダプタープログラムに参加したい場合は、カスタマーサクセスマネージャーまでお問い合わせください。

## Kameleoon 実験でインポートしたオーディエンスをターゲティングする

この標準的な例では、Kameleoon 実験でインポートしたオーディエンスをターゲティングする最もシンプルな方法を示します。ウェアハウス内に次のようなサンプルの **user** テーブルがあるとします：

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/target-your-imported-audiences/0.png)
</Frame>

この例では、ロンドンで生まれたすべてのユーザーをターゲティングしたいとします。このオーディエンスには、上述のように設定できるインジェスチョンタスクが必要です。このインジェスチョンタスクを「**The Londoners**」と命名します。このタスクの SQL クエリは次のようになります：

`SELECT id FROM user WHERE place_of_birth="LONDON"`

このインジェスチョンタスク（およびその他のすべてのインジェスチョンタスク）でポーリングしたオーディエンスをターゲティングするには、次のセットアップを行う必要があります。

### [Kameleoon カスタムデータ](../../assets/custom-data/create-custom-data)エントリを設定する

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/target-your-imported-audiences/1.png)
</Frame>

1. 左メニューで、**Configure > Custom data** をクリックします。

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/target-your-imported-audiences/2.png)
</Frame>

2. **New custom data** をクリックします。
3. カスタムデータの名前を入力します。
4. データインジェスチョンタスクを設定したプロジェクトを選択します。
5. 取得方法として **Kameleoon SDK method** または **Custom JavaScript code** を選択します。
   * このパラメーターについては、[こちら](#custom-data-acquisition)の専用セクションを参照してください。
6. タイプには **List**、フォーマットには **String** を選択します。
7. **Scope** には **Visit** を選択します。
8. **Next** をクリックします。

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/target-your-imported-audiences/3.png)
</Frame>

9. 作成するセグメントのターゲティング条件に表示されるさまざまな値を設定できます。**Save the values for the targeting condition associated with the custom data point** をクリックします。

```javascript theme={null}
const sitecode= "YOUR_SITE_CODE"; //replace this value with your project's sitecode.
const xhr = new XMLHttpRequest();
 xhr.open('GET', `https://data.kameleoon.io/map/maps?siteCode=${sitecode}&keys=%5B%22warehouse%5Faudience%5Fconfig%22%5D`, false);
 xhr.send(null);
 if (xhr.status === 200) {
    const data = JSON.parse(xhr.responseText)
    if ("warehouse_audience_config" in data) {
       if ("audience_labels" in data["warehouse_audience_config"]) {
          return data["warehouse_audience_config"]["audience_labels"];
       }
    }
    return [];
 } else {
    console.error("Error calling for existing custom data values");
    return [];
 }
```

10. **Create** をクリックします。

### カスタムデータの取得

カスタムデータ取得方法は、カスタムデータの値をどのコードで埋め、そのコードがどこで実行されるかを指定します。Kameleoon の設定に応じて、いくつかの取得方法が用意されています。

**Feature Experimentation** のみを使用している場合は、**Kameleoon SDK method** を選択できます。この方法を使用すると、Kameleoon SDK メソッドを呼び出した箇所で取得コードが実行されます。これらの Kameleoon メソッドは、訪問者が属するウェアハウスオーディエンスを取得し、その情報をカスタムデータセクションに格納します。具体的なコードスニペットは使用している SDK により異なります。JavaScript SDK で書かれた例を以下に示します：

```javascript theme={null}
import { KameleoonClient, KameleoonUtils } from '@kameleoon/javascript-sdk';
 const client = new KameleoonClient('my_site_code');
 async function init() {
 await client.initialize();
 // -- Get visitor code
 const visitorCode = KameleoonUtils.getVisitorCode('www.example.com');
 // -- Get the warehouse visitor id
 warehouseVisitorId = anyClient.getThisVisitorId();
 // -- Index of your custom data
 const customDataIndex = 10;
 // -- Get visitor warehouse audience data using `warehouseKey`
 // and add it to storage
 const customData: CustomData = await getVisitorWarehouseAudience({
 visitorCode: 'my_visitor',
 customDataIndex: customDataIndex,
 warehouseKey: warehouseVisitorId,
 });
 }
 init();
```

`warehouseVisitorId` 変数には、組織がこの訪問者のウェアハウス内で使用している訪問者 ID を設定する必要があることに注意してください。このコード行は、組織の訪問者識別システムによって異なります。識別システムがない場合は、Kameleoon Visitor Code を使用できますが、ウェアハウスでも Kameleoon Visitor Code を使用する必要があります。

`customDataIndex` の値をカスタムデータのインデックスに置き換えます。インデックスはダッシュボードで確認できます：

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/user-manual/images/integrations/data-warehouses/target-your-imported-audiences/4.png)
</Frame>

**Web Experimentation**（または **Web Experimentation と Feature Experimentation** の両方）を使用している場合は、**Custom JavaScript code** を選択できます。この場合、コードスニペットは kameleoon.js ファイルによって実行されます。次のスニペットをプロジェクトのグローバルスクリプトに追加できます（**Admin** > **Configure** > 該当するプロジェクトを編集）：

```javascript theme={null}
const warehouseVisitorId = anyClient.getThisVisitorId();
KameleoonAPI.Data.retrieveDataFromRemoteSource(warehouseVisitorId, function(data) {
     if("warehouseAudiences" in data){
         Kameleoon.API.Data.setCustomData("My Warehouse Audiences", Object.keys(data["warehouseAudiences"]));
 }
```

この場合、前述の SDK の例とは異なり、カスタムデータのインデックスではなく名前を使用する必要があります。

または、カスタムデータを設定する際に、適切なフィールドに以下のスニペットを入力することもできます：

```javascript theme={null}
const warehouseVisitorId = anyClient.getThisVisitorId();
 if (typeof window.kameleoon_configured_warehouse_audiences === 'undefined') {
    window.kameleoon_configured_warehouse_audiences = null;
    Kameleoon.API.Data.retrieveDataFromRemoteSource(warehouseVisitorId, function(data) {
      if ("warehouseAudiences" in data) {
        window.kameleoon_configured_warehouse_audiences = Object.keys(data["warehouseAudiences"]);
      }
    });
 }
 if (window.kameleoon_configured_warehouse_audiences === null) {
    return null;
 }
 return {"value": window.kameleoon_configured_warehouse_audiences};
```

<Note>
  これは 1 回のセットアップで、すべてのインジェスチョンタスクに対して機能します。
</Note>

たとえば、3 月生まれの訪問者をポーリングする 2 つ目のインジェスチョンタスクがあり、それを「Born in March」と呼んだとします。3 月生まれ**かつ**ロンドン生まれの訪問者のカスタムデータの値には、両方のオーディエンス（「The Londoners」、「Born in March」）が含まれます。

**したがって、この単一のカスタムデータをウェアハウスオーディエンスをターゲティングするすべての Kameleoon セグメントで使用できます。** その後、このカスタムデータを Kameleoon キャンペーン（実験、フィーチャー実験、パーソナライゼーション）で使用して、ウェアハウス内の特定のオーディエンスに属するかどうかに基づいてユーザーをターゲティングできます。

このようなセグメントを作成するには、次の手順に従います：

1. [専用ドキュメントに記載されているとおりにセグメントを作成します](../../assets/segments/create-a-segment)。
2. セグメントで、[カスタムデータ条件](../../assets/segments/create-a-segment#custom-data)を使用します。
3. **is among the values** 演算子を選択すると、作成したデータインジェスチョンタスクに関連付けられたオーディエンスのリスト（The Londoners、Born in March など）が表示されるはずです。

## 属性によるインポートしたオーディエンスのターゲティング

このセクションでは、ウェアハウスからインポートしたオーディエンスをターゲティングする別の方法について説明します。この方法は、同じ訪問者属性の異なる値をターゲットとする複数の実験を実行したい場合に特に役立ちます。前の例と同じデータとユースケースを保ちますが、今回はロンドン生まれの訪問者だけでなく、さまざまな出身都市をターゲットにしたいとします。このターゲティングは、前述のセットアップでも可能です：ターゲットにしたい各出生地に対してインジェスチョンタスクを作成することになります。ただし、50 の異なる都市をターゲットにしたい場合、これは少し面倒になる可能性があります。

Kameleoon では、ウェアハウスオーディエンスの訪問者の属性をインポートできます。インポートは、訪問者 ID フィールドの**後**に追加フィールドを SQL クエリに追加することで実現します。例えば次のようになります：

`SELECT id, place_of_birth FROM user`

その後、今回は属性 `place_of_birth` の値を含むカスタムデータを作成できます。JavaScript SDK 実装の場合、コードは次のようになります：

```javascript theme={null}
import { KameleoonClient } from '@kameleoon/javascript-sdk';
const client = new KameleoonClient('my_site_code');
async function init() {
    await client.initialize();
    // -- Get the warehouse visitor id
    warehouseVisitorId = anyClient.getThisVisitorId();
    // -- Id of the ingestion task
    const taskId = your_task_id;
    // -- Name of the attribute
    const attributeName = "place_of_birth";
    // -- Get remote data
    const jsonData = await getRemoteData(warehouseVisitorId);
    const data = JSON.parse(jsonData);
    if ("warehouseAudiences" in data){
        if (taskId in data["warehouseAudiences"]){
            const city = data["warehouseAudiences"][taskId][attributeName];
             `// -- The index of the custom data you have created`
             const customDataIndex = your_index;
             const customData = new CustomData(customDataIndex, city);
             // -- Add custom data
             client.addData(warehouseVisitorId, customData); 
         }
     }
}
init();
```

または、取得方法「Custom JavaScript code」でカスタムデータを設定する際に使用できる、同等のコードは次のとおりです：

```javascript theme={null}
const warehouseVisitorId = anyClient.getThisVisitorId();
const taskId = "your_task_id";
const attributeName = "place_of_birth";

 if (typeof window.kameleoon_configured_warehouse_attribute === 'undefined') {
     window.kameleoon_configured_warehouse_attribute = null;
     Kameleoon.API.Data.retrieveDataFromRemoteSource(warehouseVisitorId, function(data) {
         if ("warehouseAudiences" in data) {
             if (taskId in data["warehouseAudiences"]){
                  const city = data["warehouseAudiences"][taskId][attributeName];
                  window.kameleoon_configured_warehouse_attribute = city;
             }
         }
     });
 }
 if (window.kameleoon_configured_warehouse_attribute === null) {
     return null;
 }
 return {"value": window.kameleoon_configured_warehouse_attribute};
```

その後、カスタムデータ値の都市名をターゲットとする Kameleoon セグメントを作成できます。1 つのセグメントで複数の都市をターゲットにしたい場合は、セグメントを構築する際に同じカスタムデータに複数の **Or** 条件を追加できます。

ここでの **`taskId`** は、タスクが定義されたユーザーインターフェースに表示される、インジェスチョンタスクの一意の数値識別子であることに注意してください。

SQL リクエストには訪問者属性を好きなだけ追加でき、これらの属性を当社の SDK でさまざまな方法で使用できます。

## 訪問者識別

最新のアプリやウェブサイトでは、多くの外部ツールが使用され、多くの場合複数の訪問者識別子が使用されます。この機能が動作するためには、上記のコード例で JSON オブジェクトを取得するために使用する訪問者識別子は、ウェアハウスから抽出された識別子と同じである必要があります。

この訪問者識別子の生成方法は自由です。さまざまな選択肢があります。メールアドレスのように、ユーザーがソリューションにログインした後にのみ取得される識別子を使用できます。ビジネスがログインを必要としない、またはサポートしない場合は、匿名識別子を使用できます。ログインしているかどうかに関わらずユーザーをターゲットにしたいユースケースがある場合は、両方を混在して使用することもできます。

データウェアハウスと Kameleoon がクエリするテーブルの管理は皆様の責任で行いますので、識別子はある時点でトラッキングに利用できる必要があるという点を除いて、制限はありません。

Kameleoon のカスタマーサクセスチームは、特定のセットアップ、外部ツール、ビジネス要件に基づいて識別子を選択する際のアドバイスを提供できます。
