Salesforceでデータの重複を防ぐためには重複ルールと一致ルールが有効な手立てです。この記事では、これらの機能の基本や設定方法から、重複データのマージ方法について紹介します。
重複ルール・一致ルールとは
Salesforce活用において、データの重複を防止することは重要なテーマです。
例えば取引先責任者が重複していたら、商談や活動の紐づけなどあらゆる場面で互い違いの取引先責任者に情報が紐づけられ、情報が集約できません。
重複ルールと一致ルールは、このような状態を未然に防いだり、解消していくための機能です。例えば、下図ではレコード作成時に重複の警告をしています。

もう一例挙げますと、下図では重複レコードのマージをおこなっています。これも重複ルールの機能です。

重複ルールと一致ルールは単体で機能することはなく、2つを組み合わせて使用します。一般的には重複ルールと一致ルールをひっくるめて単に「重複ルール」と呼ぶ場合が多いですが、設定をおこなう際にはそれぞれの違いを理解しておく必要があります。
一致ルール
一致ルールは、重複レコードを検出するためのルールを定義します。つまり「どうなっていたら重複と判定するのか?」のルール決めをする機能となります。一致ルールは、重複ルールと組み合わせて使用します。
重複ルール
重複ルールは、一致ルールによって重複と判定されたレコードに対してどのようなアクションを取るかを定義します。
ユーザーが重複レコードを作成または更新しようとした際に警告を表示しつつも保存は許可したり、重複の作成を完全にブロックしたりすることができます。
一致ルールの設定方法
設定画面に入り、サイドメニューの検索窓に「重複」と打ち込みます。
「一致ルール」を選択すると下図の画面になりますので、「新規ルール」をクリックします。

一致ルールを作成する対象のオブジェクトを選択します。ここで選択したオブジェクトのレコード同士が重複しているかを判定することになります。

次にルールの詳細を決めていきます。「ルール名」と「一意の名前」は表示ラベルとAPI参照名の関係性と同じです。
「一致条件」には下図の通り、まずは特定の項目を選択し、それが一致するレコードがあるかどうか?という条件を決めていきます。

一致ルールが適用されるシーンとしては、レコードを作成したり更新保存するタイミングになります。そのタイミングで、現在編集中のレコードと一致するレコードがSalesforce内にあるかをチェックする、という考え方です。
上図では、取引先名が完全一致、かつ都道府県名が完全一致という条件を指定しています。
「一致メソッド」で完全一致かあいまい一致を選択できますが、日本語の場合は完全一致にしておいた方が無難です。SalesforceのHelpからも読み取れますが、英語に最適化されたあいまい一致のようです。
「空白項目をマッチング」は、指定した項目がブランク同士の場合に重複とみなすかどうか、です。通常はそのような場合は重複とはみなさないかと思います。
また、上記のルールは「1 OR 2」など、検索条件ロジックを設定することも可能です。
保存し、最後に有効化ボタンを押せば一致ルールの設定は完了です。

重複ルールの設定方法
設定画面に入り、サイドメニューの検索窓に「重複」と打ち込み、重複ルールを選択、新規ルールを押します。
設定したいオブジェクトを選択します。先ほど取引先の一致ルールを作ったので、取引先を選択します。

いくつか設定箇所がありますので、上から確認していきます。

ルール名を入力し、「レコードレベルセキュリティ」を選択します。つまりは共有ルールで、ユーザーの権限の範囲で参照可能なレコードの中だけで重複ルールを適用するのか、Salesforce全体に対して適用するのかを選択します。

「アクション」セクションでは、一致ルールにマッチした場合のアクションを決めます。作成時・編集時で挙動を分けることが出来ます。
下図で「アラート」は、作成や更新時に「アラートテキスト」に表示されているテキストを表示します。
下図の「レポート」は、重複が検出されたレコードをレポートにまとめることが出来ます。重複レコードのレポートの作成方法については、こちらに詳しく記載されています。

先ほど作成した一致ルールを選択します。

必要に応じて、重複ルール側で追加の判定条件を設定することも出来ます。一致条件側を定義しているので、ここはあまり使うことがないかもしれませんが、一つの一致ルールを複数の重複ルールに紐づけて効率的に使うケースなどが考えられます。また、一致ルールとの違いとして、ここでは「現在のユーザー」の項目も選択することが出来ます。

これで重複ルールの設定も完了です。最後に有効化を押します。

重複時の挙動
まずはレコードが重複した時の挙動を確認していきます。
先ほどサンプルで一致ルールを作成しましたが、保存ボタンを押す前に、項目に値を入力した段階で下図のアラートが出てきました。

アラート上の「重複を表示」を押すと、以下の画面が開きます。本当に重複なのか、確認したうえでそのまま保存する動きが出来ます。

もし重複ルールで、重複を許さずブロックしたとすると、以下の表示になります。

重複レコードをマージする
重複を許容して保存すると、下図のようにレコードを開いた際、「この取引先には重複が存在」というテキストが表示されるようになります。ユーザー側はこれをみて「重複を解消しないと…」という気になる感じですね。
さらに、下図右下の赤枠「この取引先の潜在的な重複が…」のコンポーネントを見ると、重複レコード数を確認することが出来ます。

もし「この取引先の潜在的な重複が…」のコンポーネントが出ていない場合はLightningアプリケーションビルダーの「潜在的な重複」を使用します。有効な重複ルールが無いと、このコンポーネント自体表示されません。

「潜在的な重複」コンポーネントの「重複を表示」を押すと、レコードのマージ画面に行くことが出来ます。マージしたいレコードにチェックを入れ、「次へ」を押します。

以下の画面が表示され、マージの設定をおこないます。ここではベースの、を意味する「プリンシパル」レコードの選択と、どのレコードの項目を残すのかを選択することが出来ます。

詳しい挙動を解説します。
Salesforceではプリンシパルとして選択したレコードをベースとしてマージされます。つまりSalesforceIDはプリンシパルのレコードがそのまま残るということです。マージされた側のレコードは無くなります。
さらに注意したいのは、片方が空欄だったら値がある方の値で自動的に上書きはしないということです。飽くまでもラジオボタンで明示的に選択した側の項目がマージ後のレコードに残る、という仕様です。
ですので、上図の例ですと、右側のレコードの方が項目が埋まっているのですが、左側のラジオボタンが選択されているので、マージ後のレコードは空欄ばかりのレコードになります。
以上のように、例えば営業担当全員がしっかりとこの仕様を理解してマージをおこなうというのは、おかしなデータが残る、という重複とはまた別のリスクがあるといえます。
とはいえこの画面に表示されるのは、重複レコードの項目の中で入力されている値に差分がある部分だけ、であったり「すべて選択」というラジオボタンを一括選択するボタンがあるので、Salesforce側としては最大限マージしやすくしてくれているとは思います。
まとめ
本記事では重複ルールと一致ルールの基本から、設定方法、挙動確認、マージの仕様に至るまでを解説してきました。
個人的にはユーザー全員に重複マージをさせるのは結構リスキーかなと思っています。必要なデータが失われる可能性があるからです。重複が発生する前に未然に防ぎ、もし発生してしまったらレポートで検知してシステム管理者が潰していく運用が無難そうです。
発生してしまった重複をつぶしこむためのレポートの作成方法についてはSalesforceの重複チェックレポートでマージや削除を効率化!で詳しく解説しています。