【Pardot】Alteryxのおかげでデータクレンジングが捗った話

2022.02.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Hola〜皆さんこんにちは!Salesforceシステム管理者の清水です。

今日はPardotにて直近でデータクレンジングを行う必要があり、Salesforceとの違いで苦労した点や、そこでAlteryxがまた大活躍したお話を紹介したいと思います。これを見れば、そこのあなたもAlteryxを使ってみたくなるはずです!ではどうぞ。

Pardotのデータを精査したい

Alteryxのアイキャッチを前面に出し、Alteryxのお話を最初にしておいてなのですが、みなさんPardotはご存知でしょうか?

セールスフォース・ドットコム社が提供する、Salesforceと一体型のマーケティングオートメーションツールです。

https://www.salesforce.com/jp/products/pardot/overview/

弊社ではSalesforceとデータを連携し、最初に接点があったお客様に対して、マーケティング活動を行うためのツールとして利用しています。今回こちらに保存されているデータに対して、クレンジング作業を行う必要が出たため、どうやったのか記載します。

課題

データローダーが使えない

まずSalesforceの管理者であれば、みなさんご存知のデータローダーが、Pardotのレコードに対しては使えません。

データローダーとは?

以下のようにSalesforce側に同期された「リード」もしくは「取引先責任者」であれば、それらを削除すると裏側でPardotの同期処理も走るため、紐づいているPardot情報も削除は可能です。

しかし、Salesforceと同期されていないレコードは、Salesforce側からは削除ができないため、Pardot側から削除をする必要があります。以下のようにレコードの詳細を開くと、「リードID」や「取引先責任者ID」が空欄のもの(=Salesforceに同期していない)が対象です。

もちろんPardotのレコードにも、Salesforce同様にユニークなIDが振られているため、IDさえ特定できれば一括削除が可能かと思ったのですが、そういったツールの用意はないようでした。

そのため以下のようにレコードを開いて、1件ずつ削除していく、

もしくは削除したい複数のレコードに対して、リストやタグなど一意になる情報を追加し、その一覧画面から一括削除する方法が一般的だと思います。

データクレンジングしたいプロスペクトの特定が困難

データローダーが利用できないため、Pardotでは画面上からのみレコードの編集、削除が可能です。※例外としてPardot APIを利用する場合を除きます。

複数レコードを一括選択後、削除は可能なため、以下のように画面でポチポチ操作していけば、そこまで手間ではないのでは?ともしかしたら思う方もいるかもしれません。

では、削除対象になる「リスト」もしくは「タグ」が複数存在していて、それらに紐づいている大量のプロスペクトを精査したい場合はどうなるでしょうか?具体例を以下に紹介します。

プロスペクトについて

以下のような属性のプロスペクトが存在していた場合

リストAの一覧から見た時

・「田中さん」「鈴木さん」しか存在せず、「佐藤さん」はいません。

リストDの一覧から見た時

・「田中さん」「佐藤さん」しか存在せず、「鈴木さん」はいません。

先にリストA上で、「田中さん」「鈴木さん」を削除してしまった場合

・リストDの一覧には本来「田中さん」もいたはずなのに、「佐藤さん」しか存在しない状態で削除を行うことになります。

本来であれば、以下の図のようにレコード削除前にリストA or Dに紐づいている人3名を特定しておく必要があります。その作業を行わないまま、リストAに紐づいている方々を一括削除をしてしまうと、後々トータルの削除件数の特定が難しくなってしまいます。

それを防ぐには、対象のレコードに対して、新規にリストを追加することが必要になります。

プロスペクトIDに対して更新ができない

では、以下の3名を削除対象者リストに追加していきましょう。

この時に実は「田中さん」が重複しており、レコードが2つ存在しているケースが発覚しました。

同一人物のため、メールアドレスももちろん一緒です。この状態でプロスペクトの更新を行なったとするとどうなるでしょうか?ここで、プロスペクトのインポートの仕様について説明します。

インポートについて

大量のプロスペクトに対して、一括で「リスト」や「タグ」の追加を行うにはインポートから、作成済みのCSVをUPします。

インポートは、以下の二種類があります。

  1. 「Salesforce ID」と「メールアドレス」をキーにする方法
  2. 「メールアドレスのみ」をキーにする方法

今回はSalesforceのIDを持っていない(Salesforceと同期していない)レコードが多数あるため、「メールアドレスのみ」をキーにする方法で、プロスペクトの更新を行いました。

「メールアドレスのみ」をキーにする方法で、プロスペクトの更新を行なった結果

最近アクティビティがあったプロスペクトが更新されてしまうため、このようになりました。

本来は「プロスペクトID1」のレコードの田中さんを削除したかったのに、アクティビティが最新ではないためそちらにリストの追加ができません。

そのため元々予定していたプロスペクトに正しくリストが追加されている場合や、そうではない場合の両方のレコードの調査が必要になります。

「メールアドレスのみ」をキーにして、インポートする際に、画面上にもわざわざ注意書きを記載してくれていますね。

データ構造が親子関係のリレーションになっていない

【Salesforceの場合】

削除対象のリストしか情報がない場合でも、データの特定が難しくありません。

理由は、このように親子関係でリレーションがあるからです。

そのため、データを抽出するとこのような状態なので、データ加工をする必要はない場合が多かったです。

【Pardotの場合】

1名のプロスペクト情報の「リスト」項目の中に、複数のリストの名称が入っていたため

そのまま、削除対象のリストと単純にデータを結合させようとしても、以下のような状態になります。

ですのでエクスポートしたデータをそのまま使えず、データの加工を行わない限りは、削除者対象者の特定が難しいことがわかります。

解決手段を考える

前提条件

ではここからが本題です、実際に業務で扱ったデータは以下のような状況でした。

  • 調査対象のプロスペクトが約7万件
  • 1プロスペクトに紐づいている、リストの平均の数が10〜20
  • 削除対象のリストは、約400件
  • Pardotからエクスポートしたデータの「リスト」項目が、1プロスペクトに対して【,】区切りで複数入っている

この状態で先ほど説明したPardotの仕様を考慮し、どのように進めたのでしょうか?

Pardot APIは?

まず最初に考えたのが、Pardot APIを利用できないかという点です。 削除対象者のリストの一覧はある訳なので、そのリストと紐づくプロスペクトを、7万件のデータから抽出して、削除対象のプロスペクトIDを特定できないかという点でした。

Pardot API の使用事例

こちらの使用例を見てみても、データクリーンアップに利用する事例が書かれていたのでやってみました。

Pardot APIを利用する方法

しかし、実際にAPIを動かしてみて発覚したのですが、データが大量にあるはずなのに200件しかレスポンスが返ってきませんでした。Pardot APIの仕様で1回のクエリで200件までしかデータを返してくれないため、それ以上のデータを取得する場合、オフセットパラメーターに数値を指定し、処理を行う必要がありました。

またレスポンスもXML形式で返されたため、そのままユーザー側に渡しても読むことができません。プログラムを組む方法も考えたのですが、作業スピードの重視でデータクレンジングを行う必要があったため、別の方法を検討することにしてみました。

Alteryxの登場

悩んだところで、弊社にはデータ加工のスペシャリストがいるじゃないかと思い出しました。PardotやSaleforceのデータ処理を、別にSalesforce内で完結する必要はないです。データクレンジングというゴールさえ達成できればいいのです。

そこで以下の御二方に相談をすることにしてみました。

兼本侑始氏

じょんすみす氏

そうすると、Alteryxの「列分割ツール(Text To Columns)」を使ったら解決できるんじゃないかな?と言われました。

[Alteryx Designer:ツールのご紹介]列分割ツールについて

なんとボタン1つで、この状態のデータを

この状態に変換してくれる優れものなんです!!

同じことを例えばExcelでやろうとしたら、おそらくVBAを書かなくてはいけません。Alteryxを利用するよりは、費用対効果は高いですよね。ここでは詳細は割愛しますが、VBAで行を分割といったキーワードで検索をすると、VBAのサンプルコードが確認できるかと思います。

しかしサンプルコードを参考にして、そのまま動けばいいのですが、もしエラーが起きたり、カスタマイズしたいといった要件が上がってきたらどうなるでしょうか?追加でプログラムを書く必要が出てくるためエンジニアがいない場合扱いが難しくなってきます。

Alteryxでやったこと

「データ入力」時にフィールド長の変更

初めにPardotからエクスポートした全件データを「データ入力」機能を使って取り込みました。

この際に、デフォルトでは「フィールド長」が254に指定されているのですが、

この状態のまま「データ入力」すると、リスト項目に保存されているデータが全て取り込まれていませんでした。

  • 1プロスペクトに紐づいている、リストの平均の数が10〜20

が原因で、実際のデータを確認するとこのようになっていたため、「フィールド長」の長さをデフォルト値から変更しておきました。

「セレクト」機能でデータサイズを小さく

扱う元データが大きい場合は、Text To Columnsを行う前に、データの前処理を行なった方が良いです。

  • 調査対象のプロスペクトが約7万件
  • 1プロスペクトに紐づいている、リストの平均の数が10〜20

前処理を行わないと、プロスペクト:70000 x リスト:10 = 7000000といったようなデータが出来上がってしまうため、出来上がったデータをローカルPC上ではおそらく開けないでしょう。データが大きくなりすぎるため、できるだけその後のデータ結合に必要な情報のみに絞ることが必要です。

そのため前処理として「セレクト」機能を利用し、

Pardotの全件データから、フィールドを絞りました。

「データクレンジング」機能で余分な空白の削除

テキストエディタ上では、気が付かないような空欄や文字コードが入ってるケースもありました。

このような場合、その後の処理でデータ結合がうまくいかないため、データクレンジングも利用しました。

今回「,」区切りの間に、空欄が入ってるケースと入っていないケースがあったのですが、こちらもチェックを入れるだけで加工が可能です。

「列分割ツール(Text To Columns)」で行に分割

「列分割ツール(Text To Columns)」の優れている点は、加工したいデータと列分割で繋いであげるだけで、あっという間にデータの加工が可能です。

 

今回私の方で行った設定は、以下の通りです。

【,】区切り位置にてリストの名称を行分割したかったので、このように設定しました。プログラムを書く必要もなく、画面上から設定ができてしまいます!

元のデータサイズにはよりますが、分割の処理は体感として数十秒で終了しました。早い!

こうして以下のように、リストの行分割がうまくいきました!

「結合」機能で対象レコードの特定

行分割ができたため、全件データと削除対象のリストを結合させました。

ただ最初に説明したように、1名のプロスペクトが、複数のリストの属性を持っているケースがあるため、今の状態だと「田中さん」の名前を持つレコードが4件存在してしまっています。

「ユニーク」機能にて重複の排除

「ユニーク」機能を利用してあげると、

プロスペクトの一意のIDで重複を排除できるため、重複された3レコードが排除されます。

これでようやく削除対象の「プロスペクトのID」と「メールアドレス」などの情報を特定でき、「削除対象者用のリスト」へ追加するためのCSVファイルが完成しました。

終わりに

Pardotのデータクレンジングは、Salesforceとは異なる部分も多く仕様の把握に苦戦しました。

大量のプロスペクトのデータクレンジングを行うのは、ユーザー側では難しいため、今回Alteryxをうまく活用することによりシステム管理者の作業工数を減らすことができました。複雑な要件でAlteryxのワークフローを組む必要がなければ、コードを書かずに扱える機能も多く、非エンジニアの方にも扱いやすい製品だと感じます。

ウェビナーも定期的に開催しておりますので、よろしければぜひご参加ください。