【第257回】 Marketing Cloud Next : エンゲージメントデータの確認方法
Marketing Cloud Next(Marketing Cloud Growth & Advanced Edition)において、Marketing Cloud Engagement の「データビュー」(送信・開封・クリック・バウンス・購読解除などの履歴レコードを蓄積する仕組み)に相当するものが存在するのかを調査しました。
メールのエンゲージメントデータは、以下のデータストリームおよび同名のデータレイクオブジェクトに格納されます。
MessagingEventsEmail-EmailEngagement(Summer '25 以前)
MessagingEventsEmailV2-EmailEngagement(Summer '25 以後)
さらに、これらは以下のデータモデルオブジェクトに保存されます。
Email Engagement
これらのオブジェクトを解析することで、Marketing Cloud Engagement のデータビューと同様の検索や分析が可能になります。
MessagingEventsEmail-EmailEngagement DLO について
このデータレイクオブジェクトには、以下のイベント種別に該当するデータが、イベントが発生する度に記録されます。
Sent(送信)
Open(開封)
Click(クリック)
Bounce(バウンス)
Unsubscribe(購読取り消し)
Complaint(苦情)

特徴
統合個人 ID とは無関係で、個人 ID に紐づくデータです。
イベント発生から約 2~3 分後に記録されます。
複数回の開封は、すべて履歴として残ります。
Apple の MPP や Gmail アプリによる自動開封も「開封」としてカウントされます。
送信されなかった場合の情報(Not Sent)も記録されます。
プレビュー送信やテスト送信の履歴も記録されます。
統合個人のレコードに同じメールアドレスの個人レコードが複数紐づいている場合、Email Engagement に使用される Individual Id の値は、紐づいている複数の個人レコード内、いずれかの Individual Id が使用されますが「どの個人レコードの値が使用されるのか、決まったロジックはありません」と、Salesforce の開発担当の方に調査頂いて回答頂きました。私の所感では、ID 解決の調整ルールによって変わるという認識です。
プレビューとテストの送信については、以下の記事を参照してください。
データエクスプローラーの活用
データを効率よく検索するために、以下の項目を並び替えると便利です。データエクスプローラーは最大 10 項目のみ検索可能です。
おすすめの設定
MessagingEventsEmailV2-EmailEngagement 用
- IndividualId ・・・ Salesforce ID(18 桁)
- ContactPointEmailAddress ・・・ メールアドレス
- EventDateTime ・・・ イベント日時
- EventType ・・・ エンゲージメント種別
- SendStatus ・・・ 送信ステータス
- NotSentReason ・・・ 未送信理由
- BounceType ・・・ バウンスの種類
- BounceReason ・・・ バウンスした理由
- SendName ・・・ メール要素名
- ResolvedUrl ・・・ クリック URL

データエクスプローラーで上記の項目順で表示した後、生成された SOQL クエリをコピーすることで以下のようなクエリテキストを取得できます。

SELECT
IndividualId__c,
ContactPointEmailAddress__c,
EventDateTime__c,
EventType__c,
SendStatus__c,
NotSentReason__c,
BounceType__c,
BounceReason__c,
SendName__c,
ResolvedUrl__c
FROM
MessagingEventsEmailV2_EmailEng_6C0EBACA__dll
ORDER BY
EventDateTime__c DESC
LIMIT 10Query Editor の活用
Query Editor に上記のクエリテキストを貼り付けることで、さらに詳細な検索が可能になります。もちろん、一から Query Editor でこのクエリを書くこともできますが、データエクスプローラーで生成されたクエリテキストを利用することで、構文ミスを防ぎ効率的に作業を進められます。
おすすめの設定
表示件数をデータエクスプローラーのデフォルトの 100 件から 10 件程度に絞ると横スクロールバーが近くに表示されるため、見やすくなります。
SELECT 句でアスタリスク(*)を使用することで、このデータレイクオブジェクトにおけるすべての項目を取得できます。
SELECT *
FROM
MessagingEventsEmailV2_EmailEng_6C0EBACA__dll
ORDER BY
EventDateTime__c DESC
LIMIT
10加えて、WHERE 句でお好みの条件設定をして、確認したい内容でデータを取得してみてください。先ほど、例に挙げた「プレビューとテスト」におけるテスト送信の送信情報を取得したい場合は、以下のような形になります。
SELECT
IndividualId__c,
ContactPointEmailAddress__c,
EventDateTime__c,
EventType__c,
SendStatus__c,
NotSentReason__c,
BounceType__c,
BounceReason__c,
ContentName__c,
ResolvedUrl__c
FROM
MessagingEventsEmailV2_EmailEng_6C0EBACA__dll
WHERE
IndividualId__c = 'test-send-individual-id'
ORDER BY
EventDateTime__c DESC
LIMIT
10注意点:Query Editor の EventDateTime__c は UTC で表示されるため、日本の場合は 9 時間前で表示されます。
Email Engagement DMO について
「Email Engagement」データモデルオブジェクトを使っても、上と同じような内容が取得できますが、通常、「メール要素名」や「メール件名」などのコンテンツ情報が取得できません。なぜなら、コンテンツに関する項目が、「Email Engagement」にマッピングされていないからです。

そこでいくつかのデータモデルオブジェクトを連結して表示する必要があります。参考までに、Query Editor では、以下のクエリをお試しください。
SELECT
a.ssot__IndividualId__c AS Id,
a.ssot__SendtimeEmailAddress__c AS Email,
i.ssot__FirstName__c AS FirstName,
i.ssot__LastName__c AS LastName,
a.ssot__EngagementDateTm__c + interval '9 hour' AS EngagementDateTime,
a.ssot__EngagementChannelActionId__c AS ActionName,
a.ssot__EmailRecipientSendStatus__c AS SendStatus,
c.ssot__Name__c AS EmailElementAPIName,
e.ssot__Name__c AS FlowName,
d.ssot__VersionNumber__c AS VersionNumber,
h.ssot__Name__c AS SegmentName,
a.ssot__EngagementActionReasonText__c AS ActionReason,
a.ssot__EmailBounceType__c AS BounceType,
a.ssot__BounceReasonText__c AS BounceReason,
a.ssot__UnsubscribeSourceText__c AS UnsubscribeSource,
a.ssot__ResolvedURL__c AS LinkURL,
g.ssot__Subject__c AS EmailSubject,
g.ssot__FromAddress__c AS FromAddress,
g.ssot__MessagePurpose__c AS MessagePurpose
FROM ssot__EmailEngagement__dlm a
JOIN ssot__FlowElementRun__dlm b ON a.ssot__FlowElementRunId__c = b.ssot__Id__c
JOIN ssot__FlowElement__dlm c ON b.ssot__FlowElementId__c = c.ssot__Id__c
JOIN ssot__FlowVersion__dlm d ON c.ssot__FlowVersionId__c = d.ssot__Id__c
JOIN ssot__Flow__dlm e ON d.ssot__FlowId__c = e.ssot__Id__c
JOIN ssot__BulkEmailMessage__dlm g ON a.ssot__BulkEmailMessageId__c = g.ssot__Id__c
LEFT OUTER JOIN ssot__MarketSegment__dlm h ON g.ssot__MarketSegmentId__c = h.ssot__Id__c
LEFT OUTER JOIN ssot__Individual__dlm i ON a.ssot__IndividualId__c = i.ssot__Id__c
-- WHERE a.ssot__EngagementChannelActionId__c != 'OPEN' /*Action Name Filter*/
-- WHERE a.ssot__IndividualId__c = '***' /*Individual Id Filter*/
-- WHERE a.ssot__SendtimeEmailAddress__c = '***' /*Email Filter*/
-- WHERE i.ssot__FirstName__c = '***' AND i.ssot__LastName__c = '***' /*Name Filter*/
-- WHERE e.ssot__Name__c = '***' /*Flow Name Filter*/
-- WHERE h.ssot__Name__c = '***' /*Segment Name Filter*/
-- WHERE c.ssot__Name__c = '***' /*Email Element API Name Filter*/
ORDER BY a.ssot__EngagementDateTm__c DESC
LIMIT 10Email Engagement の項目
- ssot__IndividualId__c:個人 ID
- ssot__SendtimeEmailAddress__c:メールアドレス
- ssot__EngagementDateTm__c:エンゲージメント日時(UTC 表記)
※ 日本時間に合わせるため、9 時間プラスしています。
- ssot__EngagementChannelActionId__c:エンゲージメント種別
- ssot__EmailRecipientSendStatus__c:送信ステータス
- ssot__EngagementActionReasonText__c: 未送信理由
- ssot__EmailBounceType__c:バウンスの種類
- ssot__BounceReasonText__c:バウンスした理由
- ssot__UnsubscribeSourceText__c:購読取り消しのソース
- ssot__ResolvedURL__c:クリックしたリンク URL
Flow Element Run の項目
- なし:連結用
Flow Element の項目
- ssot__Name__c:メール要素の API 名
Flow Version の項目
- ssot__FlowId__c:フローの ID
- ssot__VersionNumber__c:フローバージョン番号
Flow の項目
- ssot__Flow__dlm:フローの名前
Bulk Email Message の項目
- ssot__Subject__c:メールの件名
- ssot__FromAddress__c:送信元メールアドレス
- ssot__MessagePurpose__c:商用 or トランザクション分類
Market Segment の項目
- ssot__Name__c:使用されたセグメント名
Individual の項目
- ssot__FirstName__c:名前
- ssot__LastName__c:苗字
Email Engagement DMO に関連する参考ヘルプドキュメント
いかがでしたでしょうか。
今回、紹介したデータエクスプローラーや Query Editor のようなレコードを可視化する Data Cloud の標準機能については、以下の記事でまとめていますので確認してください。
次の記事では、ここで確認した Email Engagement データモデルオブジェクトのデータの活用方法について解説したいと思います。
今回は以上です。
