メインコンテンツへスキップ
見出し画像
Photo byzep4

【第257回】 Marketing Cloud Next : エンゲージメントデータの確認方法

    Nobuyuki Watanabe

    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 10

    Query 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 10

    Email 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 データモデルオブジェクトのデータの活用方法について解説したいと思います。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

    私の note のトップページはこちら

     
     
     
    Salesforce Marketing Cloud、Agentforce、Data Cloud、Salesforce 認定資格に関する実践的な情報を発信しています。これらの記事が、皆さまの学習や日々の業務に少しでもお役に立てば幸いです。