はじめに
データローダでデータを取得しようとするとき、例えば取引先責任者で「ID、姓、名、取引先名、作成者、最終更新者」のデータを取得しようとすると、以下SOQLと結果になります。
- SOQL
Select Id, AccountId, LastName, FirstName, CreatedById, LastModifiedById FROM Contact
- 結果(CSV)
ID | ACCOUNTID | LASTNAME | FIRSTNAME | CREATEDBYID | LASTMODIFIEDBYID |
---|---|---|---|---|---|
0032v00002m22azAAA | 0012v00002MaYXxAAN | Gonzalez | Rose | 0052v00000YW5o3AAD | 0052v00000YW5o3AAD |
0032v00002m22b0AAA | 0012v00002MaYXxAAN | Forbes | Sean | 0052v00000YW5o3AAD | 0052v00000YW5o3AAD |
0032v00002m22b1AAA | 0012v00002MaYXyAAN | Rogers | Jack | 0052v00000YW5o3AAD | 0052v00000YW5o3AAD |
ここで、取引先名、作成者、最終更新者はIDではなくて実際の名前を取りたいと思いました。
レポートであれば実際の名前を取得できるのですが、ここではデータローダで取得してみましょう。
データローダでリレーションクエリを使う
リレーションクエリとは、参照関係や主従関係がある場合に対象のオブジェクトと関連するオブジェクトのデータを取得するクエリです。
詳細は以下を参照してください。
developer.salesforce.com
リレーションクエリでは、 <呼び出し元の項目名>.<呼び出し先のAPI参照名>
という形で項目を指定します。
「項目名」はAPI参照名ではなく、項目設定画面で確認できます。
例えば取引先責任者オブジェクトの「取引先名」項目は、API参照名は AccountId
ですが、項目名は Account
になります。
「はじめに」に書いた要件を満たすようリレーションクエリを用いたSOQLが以下になります。
Select Id, Account.Name, LastName, FirstName, CreatedBy.Name, LastModifiedBy.Name FROM Contact
結果(CSV)はこうなります。
ID | ACCOUNT.NAME | LASTNAME | FIRSTNAME | CREATEDBY.NAME | LASTMODIFIEDBY.NAME |
---|---|---|---|---|---|
0032v00002m22azAAA | Edge Communications | Gonzalez | Rose | 管理 一郎 | 管理 一郎 |
0032v00002m22b0AAA | Edge Communications | Forbes | Sean | 管理 一郎 | 管理 一郎 |
0032v00002m22b1AAA | GenePoint | Rogers | Jack | 管理 一郎 | 管理 一郎 |
おわりに
標準オブジェクトやカスタムオブジェクトの場合、レポートでも同様の出力は得られますが、「サイト」や「権限セット」など、設定側のオブジェクトデータをエクスポートする際には役立つかと思います。
リレーションクエリはApex等開発でしか使わないものかと思っていましたが、データローダのエクスポートクエリはSOQLなので、リレーションクエリも使えるのだと勉強になりました。