---
title: マージルールのスティッチング
description: スティッチングマージルールは、2つの訪問プロファイルがステッチされたときに属性の最終値を決定するオプションの属性ごとのルールです。
url: https://docs.tealium.com/ja/server-side/visitor-stitching/stitching-merge-rules/
---
## 要件

* Tealium AudienceStreamが有効
* 訪問スティッチングが有効
* アカウント管理者権限

## スティッチングマージルールの仕組み

訪問スティッチングはイベントリプレイを使用して歴史的イベントからマージされたプロファイルを構築しますが、イベント保持期間や最大1,500イベントといったシステムの制限を受けます。訪問プロファイルがこれらの制限を超える場合、古いイベントはスティッチング中にリプレイされない可能性があり、長期間または高ボリュームのプロファイルの場合、歴史的データが不完全になることがあります。

スティッチングマージルールは、このような場合にスティッチングプロセスを属性固有のロジックで補強し、イベントリプレイに依存しないで毎回同じ耐久性のある一貫した結果を生成します。

マージルールは2つの訪問プロファイルの属性を比較して最終的な属性値を決定し、歴史的イベントがマージされた訪問プロファイルでリプレイされた後に適用されます。これにより、歴史的イベント処理がすべての過去のイベントを含めることができない場合でも、最も重要な属性が意図した値を保持することが保証されます。

### マージルールが適用されるタイミング

スティッチングマージルールは、以前に活動があった2人の訪問がステッチされた場合にのみ適用されます。これは、イベントリプレイが古いイベントを破棄し、最終的な属性値を解決するルールが必要なシナリオです。

マージに含まれる訪問のどちらかが以前の訪問がない場合、スティッチングマージルールは適用されません。なぜなら、戻ってきた訪問のイベントリプレイが結果を決定するからです。

## マージルールが必要な属性を特定する

すべての属性にスティッチングマージルールが必要なわけではないので、最初のステップは、スティッチングマージルールから最も恩恵を受ける重要な属性を決定することです。一般的に、スティッチングマージルールは、生涯価値を追跡する最も重要な属性や、データプライバシーおよび同意に関連する属性にのみ使用されます。

スティッチングマージルールの候補となる属性のカテゴリーは次のとおりです：

* **同意状態属性**  
決定的な同意イベントが保持ウィンドウより古い場合やボリュームによって置き換えられた場合でも、正しい同意状態が維持されるようにします。    
* **生涯メトリックス**  
正確なカウンター、集計、および累積を維持します。    
* **CRM/ファイルインポートされた属性**  
記録システム（例えばCRM）からインポートされた権威ある値を保持します。

### エンリッチメントを分析する

スティッチングマージルールが必要な属性を特定した後、次のステップはそのエンリッチメントのロジックに基づいて最適なものを選択することです。

適切なマージルールを選択するには、属性がそのエンリッチメントによってどのように構成されるかを理解する必要があります。ステッチされた結果がエンリッチメントの意図と一致するように、同じ意思決定ロジックを適用するマージルールを選択します。意図したエンリッチメントロジックと異なるルールを使用すると、データが一貫性を欠くことがあります。

特定のエンリッチメントに最適なスティッチングマージルールの例については、[定義](#definitions)を参照してください。

## 属性固有のマージ動作

### プリロードされた属性

プリロードされた属性は、AudienceStreamが有効なすべてのプロファイルに存在するシステム管理の属性です。スティッチングマージルールが有効になると、これらの属性は適切なリプレイ一貫性のあるマージルールを自動的に受け取り、選択肢は編集不可能です。これにより、組み込みのエンリッチメントとの一貫性が維持されます。

詳細については、[preloaded-attributes](https://docs.tealium.com/preloaded-attributes/)を参照してください。

### ファネル

ファネル属性タイプは、1つのスティッチングマージルールのみをサポートします：**ファネルのマージ**。

**ファネルのマージ**ルールは、各訪問のファネルステップを時系列順に組み合わせます。重複するステップが存在する場合、以前に発生したステップが保存され、古いものは削除されます。

### 集計お気に入り

集計お気に入りは、**再計算（強制）**ルールのみを使用できます。集計属性は、最も高い値を持つ集計キーを含むお気に入り属性を生成するため、常にマージされた訪問で再計算する必要があります。

集計属性とそれに関連するお気に入り属性は次の動作に従います：

* 集計にマージルールがある場合、お気に入り属性は自動的に**再計算（強制）**ルールを使用するため、他のマージルールが実行された後にその値が再計算されます。
* 集計にマージルールがない場合、お気に入り文字列は自動的にマージルールがありません。
* 集計からマージルールが削除されると、お気に入り属性のマージルールも自動的に削除されます。

### タイムライン

タイムライン属性タイプは、1つのスティッチングマージルールのみをサポートします：**タイムラインのマージ**。

**タイムラインのマージ**ルールは、各訪問のエントリを時系列順に組み合わせ、制限を超える場合は結果を最新の100エントリにトリミングします。

タイムライン属性に`X`日より古いエントリを期限切れにするエンリッチメントがある場合、マージルールはマージの時点から`X`日より古いエントリを期限切れにします。複数のエンリッチメントがエントリを期限切れにする場合、マージルールは`X`の最低値を使用します。

### 訪問ID

スティッチングマージルールが有効になると、各訪問ID属性に自動的に**古い**ルールが適用されます。訪問ID属性の**古い**ルールは変更できません。

## スティッチングマージルールの使用

スティッチングマージルールを使用する前に、機能を有効にする必要があります。

プロファイルでスティッチングマージルールを有効にするには：

1. **管理 > サーバーサイド構成**に移動します。
1. **スティッチングマージルール**トグルをオンの位置にクリックします。
1. **保存**をクリックします。
1. プロファイルを公開します。

スティッチングマージルールが有効になると、属性編集ビューに新しい構成が利用可能になります。属性にマージルールを適用するために構成を有効にし、リストからマージルールを選択します。

![](https://docs.tealium.com/images/server-side/merge-rules/attribute-stitching-merge-rule-checkbox-select.png)


## 属性による利用可能なルール

| ルール                | バッジ | ブール値  | 日付 | 数値 | 文字列のセット | 文字列 | 集計 | 配列 |  ファネル | タイムライン | 訪問ID |
|---------------------|:-----:|:--------:|:----:|:------:|:--------------:|:------:|:-----:|:------:| :------:|:--------:|:----------:|
| **And**                 |   ✔   |    ✔     |  –   |   –    |       –        |   –    |   –   |      – |   –    |    –     |     –      |
| **Or**                  |   ✔   |    ✔     |  –   |   –    |       –        |   –    |   –   |      – |   –    |    –     |     –      |
| **Max**                 |   –   |    –     |  ✔   |   ✔    |       –        |   –    |   –   |      – |   –    |    –     |     –      |
| **Min**                 |   –   |    –     |  ✔   |   ✔    |       –        |   –    |   –   |      – |   –    |    –     |     –      |
| **Newer**               |   ✔   |    ✔     |  ✔   |   ✔    |       ✔        |   ✔    |   ✔   |      ✔ |   –    |    –     |     -      |
| **Older**               |   ✔   |    ✔     |  ✔   |   ✔    |       ✔        |   ✔    |   ✔   |      ✔ |   –    |    –     |     ✔      |
| **Recalculate**         |   ✔   |    ✔     |  ✔   |   ✔    |       ✔        |   ✔    |   ✔   |      ✔ |   –    |    –     |     –      |
| **Recalculate (Force)** |   ✔   |    ✔     |  ✔   |   ✔    |       ✔        |   ✔    |   ✔   |      ✔ |   –    |    –     |     –      |
| **Sum**                 |   –   |    –     |  –   |   ✔    |       –        |   –    |   –   |      – |   –    |    –     |     –      |
| **Union**               |   –   |    –     |  –   |   –    |       ✔        |   –    |   ✔   |      ✔ |   –    |    –     |     –      |
| **Union Sum**           |   –   |    –     |  –   |   –    |       –        |   –    |   ✔   |      – |   –    |    –     |     –      |
| **Union Max**           |   –   |    –     |  –   |   –    |       –        |   –    |   ✔   |      – |   –    |    –     |     –      |
| **Union Min**           |   –   |    –     |  –   |   –    |       –        |   –    |   ✔   |      – |   –    |    –     |     –      |
| **Merge Funnel**        |   –   |    –     |  –   |   –    |       –        |   –    |   –   |      – |   ✔    |    –     |     –      |
| **Merge Timeline**      |   –   |    –     |  –   |   –    |       –        |   –    |   –   |      – |   –    |    ✔     |     –      |

## 定義

### And

| 対応データタイプ | ルールの振る舞い |
|----------------------|---------------|
|  バッジ | 両方が `Assigned` の場合のみ `Assigned` に構成されます。 |
|  ブール値 | 両方が `true` の場合のみ `true` に構成されます。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-and-example.png)

この例では、訪問のオンライン訪問がすべてPPCから来た場合にのみ、属性が `true` になります。これらのエンリッチメントに基づいて、両方の訪問が属性を `true` に構成している場合のみ、マージされた属性は `true` になります。どちらかの訪問が属性を `false` に構成している場合、訪問のオンライン訪問がすべてPPCからではないため、マージされた属性値は `false` になります。正しいマージ値を得るために **And** ルールを使用します。

**バッジ**:
| 訪問A | 訪問B | **And** ルールでマージされた訪問 |
| ----- | -----  | ----- |
| `Assigned` | `Assigned`  | `Assigned` |
| `Assigned` | `Not Assigned`  | `Not Assigned` |
| `Not Assigned` | `Assigned`  | `Not Assigned` |
| `Not Assigned` | `Not Assigned`  | `Not Assigned` |

**ブール値**: 
| 訪問A | 訪問B  | **And** ルールでマージされた訪問 |
| ----- | -----  | ----- |
| `True` | `True`  | `True` |
| `True` | `False`  | `False` |
| `True` | (unset)  | `False` |
| `False` | `True`  | `False` |
| `False` | `False`  | `False` |
| (unset) | `True`  | `False` |
| (unset) | (unset)  | (unset) |

### Or

| 対応データタイプ | ルールの振る舞い |
|----------------------|---------------|
|  バッジ | どちらかが `Assigned` の場合に `Assigned` に構成されます。 |
|  ブール値 | どちらかが `true` の場合に `true` に構成されます。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-or-example.png)

この例では、訪問が一度きりのイベントを見た場合にバッジが割り当てられ、バッジは決して割り当て解除されません。

これらのエンリッチメントに基づいて、いずれかの訪問が登録している場合、マージされたバッジは割り当てられるため、正しい結果を決定するために **Or** ルールが適切な選択です。

**バッジ**:
| 訪問A | 訪問B | **Or** ルールでマージされた訪問 |
| ----- | -----  | ----- |
| `Assigned` | `Assigned`  | `Assigned` |
| `Assigned` | `Not Assigned`  | `Assigned` |
| `Not Assigned` | `Assigned`  | `Assigned` |
| `Not Assigned` | `Not Assigned`  | `Not Assigned` | 

**ブール値**:
| 訪問A | 訪問B | **Or** ルールでマージされた訪問 |
| ----- | ----- | -----  |
| `True` | `True` | `True`  |
| `True` | `False` | `True`  |
| `True` | (unset) | `True`  |
| `False` | `True` | `True`  |
| `False` | `False` | `False`  |
| (unset) | `True` | `True`  |
| (unset) | (unset) | (unset)  |

### Max

| 対応データタイプ | ルールの振る舞い |
|----------------------|---------------|
|  数値 | より高い値を保持します。 |
|  日付 | より遅い日付を保持します。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-max-example.png)

この例では、マージされた訪問プロファイルからより新しい日付を選択するために **Max** マージルールを使用します。

このエンリッチメントは現在のタイムスタンプを使用しているため、**Newer** ルールは同じ結果を生み出します。新しいタイムスタンプは常に古いタイムスタンプよりも大きな値です。

### Min

| 対応データタイプ | ルールの振る舞い |
|----------------------|---------------|
|  数値 | より低い値を保持します。 |
|  日付 | より早い日付を保持します。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-min-example.png)

この例では、マージされた訪問プロファイルからより早い日付を選択するために **Min** マージルールを使用します。

このエンリッチメントは現在のタイムスタンプを使用しているため、**Older** ルールは同じ結果を生み出します。古いタイムスタンプは常に新しいタイムスタンプよりも低い値です。
### 新しいルール

**新しいルール**は、削除された値を含む、最も最近に更新された属性値を選択します。このルールは、他の訪問属性ではなく、受信イベント属性に基づいて属性が豊かにされる属性に最適です。

**新しいルール**は、属性の値を更新するエンリッチメントが行われたときに構成される内部タイムスタンプに基づいています。両方の属性に内部タイムスタンプが構成されていない場合は、各訪問の最後の訪問のタイムスタンプを使用して、どちらが先に構成されたかを判断します。

| 対応データタイプ | ルールの動作 |
|-------------|--------------------|
|  バッジ | 最も最近に更新された状態を保持（未割り当てを含む）。 |
|  ブール値<br>  数値 |  最も最近に更新された値を保持。 |
|  日付 |  最も最近に更新された値を保持（削除された値を含む）。これは、この日付属性が最後に豊かにされたときに基づいています。 |
|  文字列のセット |  最も最近に更新された（削除を含む）文字列のセットを保持。 |
|  文字列 |  最も最近に更新された値を保持（削除された値を含む）。 |
|  集計 |  最も最近に更新された（削除を含む）集計を保持。 |
|  ブール値の配列<br>  数値の配列<br>  文字列の配列 |  最も最近に更新された（削除を含む）配列を保持。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-newer-example.png)

### 古いルール

**古いルール**は、削除された値を含む、以前に更新された属性値を選択します。**古いルール**は、値がすでに構成されている場合にのみ値を構成するエンリッチメントを持つ属性に最適です。これにより、訪問の最初の値のみが保存されます。

**古いルール**は、属性の値を更新するエンリッチメントが行われたときに構成される内部タイムスタンプに基づいています。両方の属性に内部タイムスタンプが構成されていない場合は、各訪問の最後の訪問のタイムスタンプを使用して、どちらが先に構成されたかを判断します。


<blockquote>
属性エンリッチメントが自己参照ルールを使用して一度だけ構成されることを保証しない場合、**古いルール**を使用しても必ずしも最初に構成された値が得られるわけではありません。
</blockquote>


| 対応データタイプ | ルールの動作 |
|----------------------|---------------|
|  バッジ | 以前に更新された状態を保持（未割り当てを含む）。 |
|  ブール値<br> 数値 | 以前に更新された値を保持。 |
|  日付 | 以前に更新された値を保持（削除された値を含む）。これは、この日付属性が最後に豊かにされたときに基づいています。 |
|  文字列のセット | 以前に更新された（削除を含む）文字列のセットを保持。 |
|  文字列 | 以前に更新された値を保持（削除された値を含む）。 |
|  集計 | 以前に更新された（削除を含む）集計を保持。 |
|  ブール値の配列<br> 数値の配列<br> 文字列の配列 | 以前に更新された（削除を含む）配列を保持。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-older-example.png)

### 再計算

| 対応データタイプ | ルールの動作 |
|----------------------|---------------|
|  バッジ | 以前の状態を破棄し、最終的なマージされたプロファイルでエンリッチメントを実行。 |
|  ブール値<br> 日付<br> 数値 | 以前の値を破棄し、最終的なマージされたプロファイルでエンリッチメントを実行。 |
|  文字列のセット<br> 文字列<br> 集計<br> ブール値の配列<br> 数値の配列<br> 文字列の配列 | 未割り当てから開始し、最終的なマージされたプロファイルでエンリッチメントを実行。 |
{class="dt--fixed"}

**再計算**ルールは、属性の初期マージ値を破棄し、属性のエンリッチメントを再実行します。初期マージ値を破棄することで、再計算は未構成の値から始まり、値はエンリッチメントに基づいてのみ構成されます。

**再計算**ルールは、他の訪問または訪問属性から派生した属性に最適です。たとえば、文字列のセット内のアイテムを数える数値属性などです。これらのケースでは、ソース属性が最初に解決され、構成された他のマージルールを使用し、その後**再計算**ルールが派生値を再計算します。

**ルールの動作**：

* エンリッチメントが**新規訪問**、**新規訪問**、または**訪問終了**で実行されるように構成されている場合、マージにつながるイベントが**新規訪問**、**新規訪問**、または**訪問終了**を引き起こした場合にのみ、マージルールで実行されます。
* イベント属性を使用するエンリッチメントルール条件は、マージを引き起こしたイベントに基づいて評価されます。
* **変更があった**演算子を使用するエンリッチメントルール条件は、チェックされる属性値がいずれかのプロファイルと異なる場合に`true`と評価されます。

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-recalculate-example.png)

この例では、属性値は別の訪問属性である`Orders Timeline`から派生しています。`Orders Timeline`属性に独自のマージルール（**タイムラインのマージ**）がある場合、そのルールはこの数値属性が**再計算**ルールによって評価される前に実行されます。
### 再計算（強制）

**再計算（強制）**ルールは、**再計算**ルールと同じですが、いくつかのエンリッチメント条件を`true`に強制します。**再計算（強制）**ルールは、**新規訪問**、**新規訪問**、または**訪問終了**の条件を使用する他の訪問または訪問属性から派生した属性に最適です。

訪問のスティッチングは、**新規訪問**、**新規訪問**、または**訪問終了**の条件と一致しない時に発生することがあるため、このルールはそれらのエンリッチメントが実行されることを保証するために強制します。

**ルールの振る舞い**：

* エンリッチメントが**新規訪問**、**新規訪問**、または**訪問終了**で実行されるように構成されている場合、マージルールでイベントが**新規訪問**、**新規訪問**、または**訪問終了**を引き起こさなかったとしても強制的に実行されます。
* イベント属性を使用するエンリッチメントルール条件は`true`と評価されるように強制されます。
* **変更があった**演算子を持つエンリッチメントルール条件は`true`と評価されるように強制されます。

| 対応データタイプ | ルールの振る舞い |
|----------------------|---------------|
|  バッジ | 以前の状態を破棄し、最終的なマージされたプロファイルでエンリッチメントを実行し、いくつかの条件を`true`に強制します。 |
|  ブール値<br> 日付<br> 数値 | 以前の値を破棄し、最終的なマージされたプロファイルでエンリッチメントを実行し、いくつかの条件を`true`に強制します。 |
|  文字列のセット<br> 文字列<br> 集計<br> ブール値の配列<br> 数値の配列<br> 文字列の配列 | 未割り当てから開始し、最終的なマージされたプロファイルでエンリッチメントを実行し、いくつかの条件を`true`に強制します。 |
{class="dt--fixed"}

**例**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-recalculate-force-end-visit.png)

この例では、属性は別の訪問属性`Lifetime visit count`から派生しており、訪問が10回以上訪問した場合にバッジを割り当てます。しかし、エンリッチメントは`Visit Ended`で実行されるように構成されていますが、訪問のスティッチングが発生したときにこれが真であるとは限りません。そのため、**再計算（強制）**ルールを使用すると、エンリッチメントがとにかく実行されるように強制されます。

`Visit Ended`が`true`と評価されるように強制されない場合、バッジは訪問の終了まで割り当てられず、訪問はこのバッジに基づいてオーディエンスを離れたり再参加したりするかもしれません。これは、離脱または参加がコネクタアクションの発火を引き起こす場合、望ましくない振る舞いかもしれません。
### ユニオン最大/最小/合計

**ユニオン最大/最小/合計**ルールは、共通のキーの値を特定のルール（**最大**、**最小**、または**合計**）に基づいて結合する集計属性をマージします。マージされた集計は、元の属性のいずれかに存在するすべてのキーを保持します。

| ルール | サポートされるデータタイプ |  説明 |
|------|-------------| -------------------- |
| **ユニオン最大** |   集計 | キーをマージし、一致するキーの値をより高い値に保持します。 | 
| **ユニオン最小** |   集計 | キーをマージし、一致するキーの値をより低い値に保持します。 |
| **ユニオン合計** |    集計 | キーをマージし、一致するキーの値を加算します。 |

**例: ユニオン合計**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-union-sum-example.png)

この例では、集計は訪問が商品詳細ページで見た異なる商品カテゴリーの数を数えます。**ユニオン合計**ルールを使用して、キーをマージし、一致するキーの値を加算します。

```json
Visitor-A: {
  "Lifetime count of product categories": {
      "Accessories": 1,
      "Apparel": 2,
      "Books": 1
  }
}
Visitor-B: {
  "Lifetime count of product categories": {
      "Apparel": 4,
      "Books": 3,
      "Electronics": 5    
  }
}
Merged: {
  "Lifetime count of product categories": {
      "Accessories": 1,
      "Apparel": 6,
      "Books": 4,
      "Electronics": 5    
  }
}
```

**例: ユニオン最大**

![](https://docs.tealium.com/images/server-side/merge-rules/rule-union-max-example.png)

この例では、集計は商品カテゴリーが最後に見られた日付（エポックからのミリ秒単位）を保存します。**ユニオン最大**ルールを使用して、キーをマージし、一致するキーの最新の値を保持します。

```json
Visitor-A: {
  "Dates of last seen product categories": {
    "Accessories": 1702454863722,
    "Apparel": 1733414869787,
    "Books": 1731414884828
  }
}
Visitor-B: {
  "Dates of last seen product categories": {
    "Apparel": 1732424969356,
    "Books": 1733414883367,
    "Electronics": 1721357252812
  }
}
Merged: {
  "Dates of last seen product categories": {
    "Accessories": 1702454863722,
    "Apparel": 1733414869787,
    "Books": 1733414883367,
    "Electronics": 1721357252812
  }
}
```