Google Ads Customer Match connectorで利用する顧客リストをecforceのデータから作成する
概要
ecforce biの機能を使用するため、ecforce biのご契約が必要です。
Google Ads Customer Match connectorで送信する顧客リストをecforceのデータから作成する手順をご紹介します。
手順
Google Ads Customer Match connectorの顧客リスト用のセグメントを作成する
ecforce bi管理画面の【ダッシュボード】画面にて、Google Ads Customer Match connectorの顧客リスト用のセグメントを作成します。
- ecforce bi管理画面の【ダッシュボード】画面を開く
- Google Ads Customer Match connectorの顧客リスト用のセグメントを作成する
※詳細は、グラフのセグメントに一致する顧客データを他サービスに連携するをご参照ください
「ecforce」のインポートジョブを実行する
ecforce AIdp管理画面の【コネクション】画面にて、「ecforce」のコネクションを作成し、インポートジョブを実行します。
- 「コネクションを作成 > インポート用コネクションを作成」をクリックする
- 「ecforce」を選択して「決定」をクリックし、コネクションを作成する
※詳細は、[インポートコネクション]ecforceをご参照ください - 作成したコネクションの「メニュー > インポートジョブを作成」をクリックする
- 以下の内容のジョブを作成し、「保存して実行」をクリックする
※詳細は、ジョブ > 4.ジョブを作成する > インポートジョブを作成するをご参照ください
------------------------------------------------------------
・実行スケジュール:一度のみ実行 ※後で変更する
・データセット選択:「ec_force_customers」「ec_force_addresses」
------------------------------------------------------------
「ecforce bi セグメント」のインポートジョブを実行する
ecforce AIdp管理画面の【コネクション】画面にて、「ecforce bi セグメント」のコネクションを作成し、インポートジョブを実行します。
- 「コネクションを作成 > インポート用コネクションを作成」をクリックする
- 「cforce bi セグメント」を選択して「決定」をクリックし、コネクションを作成する
※詳細は、[インポートコネクション]ecforceをご参照ください - 作成したコネクションの「メニュー > インポートジョブを作成」をクリックする
- 以下の内容のジョブを作成し、「保存して実行」をクリックする
※詳細は、ジョブ > 4.ジョブを作成する > インポートジョブを作成するをご参照ください
------------------------------------------------------------
・実行スケジュール:一度のみ実行 ※後で変更する
------------------------------------------------------------
データ加工ジョブを作成する
ecforce AIdp管理画面の【ジョブ】画面にて、データ加工ジョブを作成・実行します。
- 「ジョブを作成 > データ加工ジョブを作成」をクリックする
- データセットを選択する
-
以下の内容のジョブを作成し、「保存して実行」をクリックする
※詳細は、ジョブ > 4.ジョブを作成する > データ加工ジョブを作成するをご参照ください
------------------------------------------------------------
・実行スケジュール:一度のみ実行 ※後で変更する
・SQLエディタ:「▼SQL文」に記載されている内容を入力する
------------------------------------------------------------▼SQL文
・「{ショップAのprefix}」の箇所は、32桁のID + ecforceコネクタで設定した「Table Name Prefix」に置き換えてください。
・「{AIdpセグメントのデータセットのテーブル名}」の箇所は、「ecforce bi セグメント」のインポートジョブを実行するの手順4で取り込んだデータセットのテーブル名に置き換えてください。
・Google Ads上の顧客リストをショップ別で作りたい場合は、UNIONをせずにショップごとにデータ加工ジョブを作成してくださいWITH target_customers as ( select distinct project_id || '-' || customer_id as user_id from `{AIdpセグメントのデータセットのテーブル名}` ), customers_over_projects AS ( SELECT * FROM `{ショップAのprefix}ec_force_customers` -- プロジェクト統合している場合は、以下のように、プロジェクト統合しているショップ分UNION ALLを追加してください -- UNION ALL -- SELECT * FROM `{ショップBのprefix}ec_force_customers` ), addresses_over_projects AS ( SELECT * FROM `{ショップAのprefix}test_ec_force_addresses` -- プロジェクト統合している場合は、以下のように、プロジェクト統合しているショップ分UNION ALLを追加してください -- UNION ALL -- SELECT * FROM `{ショップBのprefix}ec_force_addresses` ), ----------------------- -- 退会顧客・削除情報の除外 ----------------------- active_customers AS ( SELECT c.* FROM customers_over_projects c inner join target_customers t on c.id = t.customer_id and c.project_id = t.project_id WHERE status ), active_customer_addresses AS ( SELECT a.* FROM addresses_over_projects a INNER JOIN active_customers c ON a.addressable_id = c.id WHERE a.addressable_type = 'EcForce::Customer' AND a.deleted_at IS NULL ), ------------------------------ -- 電話番号・メールアドレスの正規化 ------------------------------ cleansed_emails AS ( SELECT project_id, id AS customer_id, project_id || '-' || id AS user_id, LOWER(TRIM(REGEXP_REPLACE(email, '\\s+', ''))) AS email -- 空白文字を除去し、全て小文字にする FROM active_customers ), normalized_emails AS ( SELECT project_id, customer_id, user_id, CASE WHEN email LIKE '%@gmail.com' OR email LIKE '%@googlemail.com' THEN CONCAT( REGEXP_REPLACE( SPLIT(SPLIT(email, '@')[0], '\\+')[0], -- +以降削除したローカルパート '\\.', '' -- ドットを削除 ), '@', SPLIT(email, '@')[1] ) ELSE email END AS normalized_user_identifier FROM cleansed_emails ), cleansed_phone_numbers AS ( SELECT project_id, addressable_id AS customer_id, project_id || '-' || addressable_id AS user_id, -- 空白の他、ハイフンに類似する全ての文字列を除外 TRIM(REGEXP_REPLACE(tel01, '\\s+|ー|‐|‑|‒|–|—|―|-', '')) as tel01, TRIM(REGEXP_REPLACE(tel02, '\\s+|ー|‐|‑|‒|–|—|―|-', '')) as tel02, TRIM(REGEXP_REPLACE(tel03, '\\s+|ー|‐|‑|‒|–|—|―|-', '')) as tel03 FROM active_customer_addresses WHERE ( -- マスク化されている電話番号は除去 tel01 NOT LIKE '%*%' AND tel02 NOT LIKE '%*%' AND tel03 NOT LIKE '%*%' ) AND NOT ( -- わかりやすい無効な電話番号を除去 LENGTH(TRIM(tel01)) <= 3="3" and="AND" normalized_phone_numbers="normalized_phone_numbers" as="AS" select="SELECT" distinct="DISTINCT" case="CASE" when="WHEN" tel01="tel01" like="like" then="THEN" --="--" else="ELSE" tel03="tel03" normalized_user_identifier="normalized_user_identifier" from="FROM" cleansed_phone_numbers="cleansed_phone_numbers" normalized_identifiers="normalized_identifiers" mail_address="mail_address" user_identifier_type="user_identifier_type" normalized_emails="normalized_emails" union="UNION" all="ALL" phone_number="phone_number" where="WHERE"><= 0="0" 1="1" 16="16" --="--" ----------------="----------------" representatives="representatives" as="AS" select="SELECT" -="-" user_id="user_id" from="FROM" normalized_identifiers="normalized_identifiers" group="GROUP" by="BY" normalized_user_identifier="normalized_user_identifier" normalized_identifiers_with_representative="normalized_identifiers_with_representative" over="OVER" is="is" not="not" null="null" is_target="is_target" i="i" inner="INNER" join="JOIN" r="r" on="ON" left="LEFT" target_customers="target_customers" c="c" --------------------------------="--------------------------------" normalized_identifiers_with_group_count="normalized_identifiers_with_group_count" when="WHEN" then="THEN" else="ELSE" partition="PARTITION"> 0 AS is_target, -- デバッグ用のカラム COLLECT_SET(NAMED_STRUCT( 'project_id', project_id, 'customer_id', customer_id )) OVER ( PARTITION BY user_id ) AS customers FROM normalized_identifiers_with_representative ), normalized_identifiers_with_row_number_group_count AS ( SELECT normalized_user_identifier, user_identifier_type, user_id, customers, ROW_NUMBER() OVER ( PARTITION BY normalized_user_identifier ORDER BY group_count DESC, user_id ) AS row_number_group_count FROM normalized_identifiers_with_group_count WHERE is_target -- 対象セグメントに含まれている顧客のみを対象とする ), normalized_identifiers_with_row_number_user_identifier AS ( SELECT normalized_user_identifier, user_identifier_type, user_id, customers, ROW_NUMBER() OVER ( PARTITION BY user_id ORDER BY CASE WHEN user_identifier_type = 'mail_address' THEN 0 ELSE 1 END -- email優先 ) AS row_number_user_identifier FROM normalized_identifiers_with_row_number_group_count WHERE row_number_group_count = 1 -- normalized_user_identifierの重複をなくすために、1番グループ規模が大きいuser_idを採用 ) SELECT -- Google Ads Customer Matchに必要なカラム user_id, normalized_user_identifier, user_identifier_type, -- デバッグ用のカラム customers FROM normalized_identifiers_with_row_number_user_identifier WHERE row_number_user_identifier <= 10="10" --="--" and="and" user_identifier_type="mail_address">
「Google Ads Customer Match connector」のエクスポートジョブを実行する
ecforce AIdp管理画面の【コネクション】画面にて、「Google Ads Customer Match connector」のコネクションを作成し、インポートジョブを実行します。
- 「コネクションを作成 > エクスポート用コネクションを作成」をクリックする
- 「Google Ads Customer Match connector」を選択して「決定」をクリックし、コネクションを作成する
※詳細は、[インポートコネクション]Google Ads Customer Match connectorをご参照ください - 作成したコネクションの「メニュー > エクスポートジョブを作成」をクリックする
- 以下の内容のジョブを作成し、「保存して実行」をクリックする
------------------------------------------------------------
エクスポートするデータセット:データ加工ジョブを作成するの手順3で作成したデータセット
------------------------------------------------------------
ジョブのスケジュールを変更する
ecforce AIdp管理画面の【ジョブ】画面にて、これまでに作成したジョブの実行スケジュールを「定期実行」に変更し、任意の頻度を指定してください。
▼各ジョブの実行開始時間の目安
| ジョブ | 実行開始時間 |
|---|---|
| ecforceコネクタ | 3:00 |
| ecforce bi セグメントコネクタ | 9:00 |
| データ変換ジョブ | 9:30 |
| Google Ads Customer Match connector | 10:00~ |
・3日に1回の頻度で実行することを推奨します
・顧客数によってはデータ加工ジョブが30分以内で終わらない可能性があるため、適宜時間を調整してください
・「Google Ads Customer Match connector」について、Google Ads側の処理が1日以上かかる場合があり、リアルタイムでの反映ができないため実行の頻度は低く設定してください
作成した顧客リストを確認する
データ加工ジョブを作成するで作成したデータセット(顧客リスト)の内容を確認します。
- ecforce AIdp管理画面の【データセット】画面を開く
- データ加工ジョブを作成するの手順3で作成したデータセットの詳細画面を開く
-
「外部連携」タブにて、ecforce biへのデータセット連携を有効化する
※詳細は、データセットをecforce biに連携するをご参照ください - ecforce bi管理画面の【グラフ】画面を開く
-
「新規作成 > テーブル」をクリックする
※手順3で連携したデータセットを選択する -
以下を設定し、ユーザーごとの識別子の個数を確認する
------------------------------------------------------------
・グループ : user_id ※「normalized_user_identifier」を追加することで、各ユーザーに紐づいている識別子を確認できます
・値 : COUNT(*)
------------------------------------------------------------
この記事の目次
このセクションの記事