別のシステムにある「顧客の購入情報データをエクスポートして、Salesforceの顧客情報と紐づけてインポートしたい」などのご相談を受けると、「外部ID」を使ったインポート方法をまずはご提案します。
インポートの頻度などによっては、システム連携やデータローダのバッチ作成をした方が良いと思いますが、知識が必要ですし、外部へ依頼すると費用もかかります。
今回は、よくあるご相談の「定期的に顧客の購入情報データをエクスポートして、Salesforceの顧客情報と紐づけてインポートしたい」を実現するための、CSVファイル(インポートファイル)の作成方法と、データローダのUpsert方法をご紹介いたします。
今回のサンプルデータ
別のシステムからエクスポートしたデータのサンプルとして、このようなデータを用意しました。
エクスポートした「購入履歴ID、購入日時、購入商品名、購入商品番号、購入金額、購入者氏名、顧客番号」の情報を、カスタムオブジェクトの「購入履歴」にインポートできるようにします。

外部IDの設定
外部IDは、Salesforce IDとは異なるユニークなキー項目で、カスタム項目で設定することができます。
会員限定記事「
データの一括更新 ⑩ 外部IDとは」でも詳しく紹介されています。
今回のサンプルデータでは「購入商品番号」と「顧客番号」を外部IDとして、Salesforceに項目を作成することで、Salesforce IDを使用しなくてもレコードを識別することができます。
「購入商品名」は商品オブジェクトの参照項目で、「購入者氏名」は取引先の参照項目です。

もし外部IDを設定していない場合は、Salesforce IDを含めた情報をレポートやデータローダなどでエクスポートし、このようにVLOOKUP関数などを使用して、Salesforce IDを追加する必要がありますが、外部IDを設定していれば、この加工作業が不要になります。

外部IDの設定方法はカスタム項目の一般的なオプションで「ユニーク」と「外部ID」にチェックを入れるだけです。
外部IDに設定できるデータ型は、テキスト、数値、メール、自動採番ですが、自動採番型はデータローダでは使用できないので、今回のサンプル事例のような場合は注意してください。
Salesforceヘルプ:
データローダで外部 ID として自動採番が利用できません
元々外部IDになりそうな項目が存在し、値も入力されていたが、項目設定の一般的なオプションで外部ID設定になってなかった場合は、設定変更するだけで大丈夫ですが、今回のようなインポートの運用が追加された場合で、外部ID項目を新たに作成した場合は、
項目作成後に外部ID項目に値を追加しておく必要があります。
CSVファイルの作成
データの加工インポートする項目のデータ型やフォーマットに合わせる必要があり、このサンプルデータで加工が必要なのは、「購入日時」です。
日付/時間型は、インポートできる形式に加工することと、タイムゾーン(日本時間)に合わせる必要があります。
こちらに関しては、過去の記事「
Dataloaderで日付型、日付/時間型項目を扱う時に知っておきたいこと」で検証結果などが投稿されていますので、詳しくはこちらでご確認ください。

データローダのタイムゾーンは、「GMT」派と「Asia/Tokyo」派がいると思いますが、私は「
GMT」派なので、サンプルではデータローダのタイムゾーンをGMTで設定している場合の変換方法を紹介いたします。
加工用の列を追加し、数式を入力します。
こちらは、元の日時から9時間マイナスして、データローダの日付/時間型のフォーマットにしています。
=TEXT(日時のセル-9/24,"yyyy-mm-dd hh:mm:ss") |


今回のサンプルデータの「購入金額」はカンマが入っておりませんが、誰かが加工したデータをインポートに使うような場合に、書式が通貨になっている場合があります。そのような場合は、カンマを外すようにしてください。
CSVファイルとして保存Excelで加工した場合は、[ファイル] → [名前をつけて保存]か、キーボードの[F12]をクリックします。
ダイアログボックスの[ファイルの種類]から「
CSV UTF-8(コンマ区切り)」か「
CSV(コンマ区切り)」を選択して保存します。
この「
CSV UTF-8(コンマ区切り)」か「
CSV(コンマ区切り)」かは、データローダの設定にも影響があるので、どちらかに統一しておくのをおすすめいたします。
ちなみに、私は
UTF-8派です。

CSVファイルが保存されたら、メモ帳などのテキストエディタで作成したデータを確認します。
金額が通貨のままで列がずれている、加工時に値のクリアだけで行の削除がされておらず残っているなど、Excelで表示しているときはおかしくなくても、テキストエディタで確認すると正しく作成できていないことが確認できます。
また、右下では文字コードが表示されているので、自分が作成していないCSVデータをインポートするときなども、こちらで文字コードが確認できます。

データローダのUpsert手順
今回のインポートは、外部ID項目の「購入商品番号」と「顧客番号」の値はすでに登録されていることが前提で、購入履歴オブジェクトへのインポート方法を説明いたします。
1.データローダを起動し、「Settings」を開きます。

2. 「Settings」の以下の項目の設定を確認し、作成したCSVファイルに合わせて設定し、[OK]ボタンをクリックします。
※データローダのバージョンによっては、設定項目の表示が画像と異なったり、[OK]ボタンが表示されていない場合があります。
[OK]ボタンが表示されていない場合は、キーボードのEnterキーを押してください。
①Read all CSVs with UTF-8 encoding データの読み込み時(Insert、Update、Upsert)の文字コードです。
私は
UTF-8派ですので、チェックを入れています。
②Write all CSVs with UTF-8 encoding データの書き出し時(Export)の文字コードです。
今回のUpsertの手順には影響はありませんが、①と合わせておくのがおすすめです。
③Time Zone 私は
GMT派ですので、”GMT”と入力しています。
作成したファイルに合わせて”GMT”または”Asia/Tokyo”と入力してください。

3.[Upsert]をクリックし、ログインします。
※Sandboxで検証してから、本番環境へインポートするようにしてください。

4.Upsertするオブジェクトを検索、選択します。

5.[Browse]をクリックして、作成したCSVファイルを選択します。

6.[Next >]をクリックします。

7.「Data Selection」で読み込んだデータの行数が表示されますので、作成したファイルと一致しているか確認し、[OK]ボタンをクリックします。
もし、ここで行数が違う場合は、正しくCSVファイルが作成されていないので修正してください。

8.「Select the field for matching on ○○○」でIdかNameを選択し、[Next >]をクリックします。
新規作成の場合はIdかNameのどちらでも良いですが、更新データが含まれる場合は、既存レコードと一致させる項目を選択します。

9.関連オブジェクトの項目を指定し、[Next >]をクリックします。
今回のサンプルでは、「購入商品名」は商品オブジェクトに作成した外部ID項目の「商品番号/
ProductNumber__c」を指定し、「購入者氏名」は取引先に作成した外部ID項目の「顧客番号/
Customer_num__c」を指定します。

10.[Create or Edit a Map]をクリックします。

11.項目のマッピングを行います。
[Auto-Match Fields to Columns]をクリックすると、項目名やラベルと一致すると自動でマッピングしてくれます。
ただし、今回は上記9.で指定した外部ID項目をマッピングさせたいので、手動で設定します。([Auto-Match Fields to Columns]後に修正でもOKです)
上に表示されている項目からマッピングさせたい項目を下に表示されているCSVファイルの項目の右側にドラッグ&ドロップさせます。
CSVファイルには「購入商品名」と「購入者氏名」の列がありますが、今回インポートに使用する列は外部IDとなっている「購入商品番号」と「顧客番号」ですので、マッピングはしません。
また、「購入日時」はフォーマット加工した「Purchase_datetime__c」とマッピングさせるので、こちらもマッピングはしません。
参考用の列などデータ作成時にインポートしない列が含まれる場合はマッピングしなければ問題ありません。

12.[Save Mapping]をクリックし、sdlファイル(マッピングファイル)を保存します。
1回切りのインポートであれば、[OK]ボタンで次へ進みますが、今回のサンプルのケースは「
定期的に顧客の購入情報データをエクスポートして、Salesforceの顧客情報と紐づけてインポートしたい」ですので、次回作業が楽になるよう、上記11.で行ったマッピングを保存しておきます。

sdlファイルを保存しておくと、
次回からは上記9.の関連オブジェクトの項目を指定せずに進んで、[Choose an Existing Map]をクリックし、保存したsdlファイルを選択するだけで、マッピング作業が終わります。

13. [Next >]をクリックし、[Browse]をクリックしてインポート結果のログファイルの保存先を指定します。

14.[Finish]をクリックし、メッセージの[はい(Y)]をクリックします。

15.Upsertの結果を確認し、[OK]ボタンをクリックします。

[View Successes]、[View Errors]をクリックすると、上記13.で指定したログファイルの内容が確認できます。

データローダの手順は以上となります。
最後にSalesforceの画面を確認します。
インポートしたい値がちゃんと反映されているか確認します。
特に今回のサンプルケースのような日時のインポートは、時間が正しく反映されているか目視の確認も必要です。

さいごに
Salesforceのシステム管理者なら経験するであろうデータのインポートについてご紹介しました。
今回紹介した方法は、私個人が経験し、先輩から教わってきた方法なので、ほかのやり方でされている方もいらっしゃると思いますが、参考になれば幸いです。
関連記事
・
Winter’23 データローダの新しいインストール場所を確認してみた・
インストール方法が変わったよ!Windows編・
データローダのインストール方法が変わったよ!Mac編・
【データローダ】Exportデータ(extract.csv)の保存場所の確認・
データローダ:「Too many SOQL queries」のエラーが出たら、バッチサイズを落とす・
データローダの定数の対応付けは時短で簡単・
Dataloaderを使用してカスタムオブジェクトのカスタム項目の項目レベルセキュリティ一覧の作成