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

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

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

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

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

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

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

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

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

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

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

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

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

### エンリッチメントの分析

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

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

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

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

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

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

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

### ファネル

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

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

### 集計お気に入り

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

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

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

### タイムライン

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

**マージタイムライン**ルールは、各訪問のエントリを時系列順に組み合わせ、制限を超えた場合は結果を最新の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"}

**例**

### 古いルール

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

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


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


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

**例**

### 再計算

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

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

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

**ルールの動作**：

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

**例**

この例では、属性値は別の訪問属性である`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`と評価されるように強制されない場合、バッジは訪問の終了まで割り当てられず、訪問はこのバッジに基づいてオーディエンスを離れたり再参加したりする可能性があります。これは、離れたり参加したりすることがコネクタアクションを発火させる場合、望ましくない振る舞いかもしれません。

### 合計

**合計**ルールは、各数値属性の値の合計を保持します。一方の値が構成されていない場合、結果は構成されている他の値です。どちらの値も構成されていない場合、マージされた値も構成されません（`0`の値とは異なります）。

| 対応データタイプ | ルールの振る舞い |
|------------------|-----------------|
|  数値 | 両方の訪問からの値を加算します。 |
{class="dt--fixed"}

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

この例では、訪問Aが$30を使い、訪問Bが$60を使った場合、マージされた訪問は$90を使っています。

### 結合

**結合**ルールは、両方の属性からの値を結合し、配列全体で一貫した順序を保持します。文字列のセットの値は重複を排除します。

| 対応データタイプ | ルールの振る舞い |
|------------------|-----------------|
|  文字列のセット | 両方からの値を結合します。 |
|  ブール値の配列<br> 数値の配列<br> 文字列の配列 | 両方からの値を結合し、配列全体で一貫した順序を保持します。 |
{class="dt--fixed"}

**例：文字列のセット**

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

この例では、**結合**ルールはエントリを結合し、文字列のセットではエントリが一意でなければならないため、水曜日の重複エントリを削除します。

文字列のセット属性の**結合**ルールの例：

```json
Visitor-A: {
  "Days of week viewed confirmation": ["Monday", "Wednesday"]
}
Visitor-B: {
  "Days of week viewed confirmation": ["Wednesday", "Friday"]
}
Merged: {
  "Days of week viewed confirmation": ["Monday", "Wednesday", "Friday"]
}
```

**例：配列**

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

この例では、文字列の配列属性は訪問が注文確認ページを見た曜日を追跡します。文字列のセット属性とは異なり、2つの配列のマージされた値には重複した値が含まれることがあります。

文字列の配列属性の**結合**ルールの例：

```json
Visitor-Older: {
  "Days of week viewed confirmation": ["Monday", "Wednesday", "Monday"]
}
Visitor-Active: {
  "Days of week viewed confirmation": ["Wednesday", "Friday"]
}
Merged: {
  "Days of week viewed confirmation": ["Monday", "Wednesday", "Monday", "Wednesday", "Friday"]
}
```

マージされた属性は、元の訪問プロファイルの配列の順序を保持し、古い訪問のエントリが最初で、アクティブな訪問のエントリが次になります。
### ユニオン最大/最小/合計

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

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

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

![](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
  }
}
```