0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Adobe Campaignクエリー道場(2)〜重複値を探す

Last updated at Posted at 2022-10-10

Adobe Campaignクエリー道場、前回の記事では、ユニークな値を持つ行を数えるクエリーを扱いました。今回は逆に、重複する値を取り出すことを考えてみましょう。
よくあるのは、ひとりが同じアドレスで何回も登録しちゃってる、みたいなケース。そんなダブってるアドレスを抽出したいというような場合です。
Campaignのクエリーではどうやるか。さっそく見てみましょう。

「受信者」スキーマで2回以上出現する「Eメール」を抽出し、その回数も得るクエリーを作ってみます。
「クエリ」アクティビティをダブルクリックし、ディメンジョンが「受信者」スキーマであることを確認、「フィルター条件」をダブルクリックしてください:
filtering-conditions.png
「フィルター」画面に遷移しました。フィルター条件は今回重要ではないので適宜設定していただければOKです。
ポイントはここから。「データグループ化句を追加」をチェックしてください:
add-group-by-clause.png
「グループ化の条件」で「式」の上をクリック、さらに「式を編集」をクリック1:
edit-expression.png
「選択するフィールド」で「詳細選択」をクリック:
shosai-sentaku.png
「数式のタイプ」で「集計関数のプロセス」をクリック。前回紹介した集計関数がまた出てきました。今回は重複を数えるので「ユニーク」をチェックしないように注意してください。「カウント」をクリックしたら「次へ」:
aggregation-count.png
メールアドレスの重複を数えるので「Eメール」をクリックして「完了」:
field-to-select.png
「フィルター」画面に戻ってきました。「式」が「count(eメール)」となっていることを確認してください。メールアドレスをカウントしてるんだな、ってことは見て取れますね。
じゃあ「重複」はどう考えるんでしょう。それにはまず「演算子」の上をクリックしてドロップダウンリストから「より大きい」を選択:
greater-than.png
そして「値」の上をクリックして数字の1を入力します。「重複」とは同じメールアドレスが1個だけじゃないということなので、1より大きい、という条件を設定したのです。
「count(eメール)」「より大きい」「1」となりましたね。「完了」をクリックして「クエリ」画面に戻りましょう:
having-done.png
まだまだ大事なところが残っています。ついてきてください!
戻ってきた「クエリ」画面で「データを追加...」をクリックします:
add-complementary-data.png
フィルタリングディメンジョンを選択してください:
select-data-type-to-add.png
select-field-to-add.png
「追加するデータ」の「使用可能フィールド」で「Eメール」をダブルクリックし「出力列」に追加:
2022-10-07_8-34-41.png
ここが今回最大のポイント。いま追加した「Eメール」の「グループ」列をチェックして「はい」にしてください:
check-on-grouping.png
もう一度「使用可能フィールド」で「Eメール」をダブルクリックし「出力列」に追加:
add-email.png
追加した行の「式」の上をクリックし、こんどは直接「count(@email)」と入力しましょう2。「ラベル」と「式」の値が「count(eメール)」と変化することを確認してください:
count-second-row.png
「完了」して「クエリ」に戻り、「追加データを編集...」をクリック:
edit-additional-data.png
「追加列」で「詳細設定パラメーター...」をクリック:
advanced_parameters.png
前回と同様、今回も「ターゲティングディメンジョンのプライマリキーの自動追加を無効にする」をチェックして「OK」:
disable-adding-primary-keys.png
あとは「OK」を続けてダイアログを閉じていきワークフローキャンバスに戻れば完成です。結果を見るためにワークフローのプロパティで「2つの実行間の中間母集団の結果を保持」をチェックしてください3:
keep-interim-results.png
ワークフローを保存して実行してみましょう。「クエリ」からの遷移矢印を右クリック→「ターゲットを表示...」で結果を見ると:
results.png
重複しているメールアドレスとその数が得られました。「count(eメール)」の見出しをクリックすると並べ替えができます。画面は▼で降順にしたところ。画面例では同アドレスを3回も登録している方もいることがわかりますね。

このとき発行されているSQLを見てみましょう:

SELECT   R0.sEmail, count(R0.sEmail) FROM NmsRecipient R0 WHERE ((R0.iRecipientId > 0 OR R0.iRecipientId < 0)) GROUP BY R0.sEmail HAVING (count(R0.sEmail) > 1)

「GROUP BY R0.sEmail」が、上記手順中の追加データで「グループ」にしたところ。出力行をメールアドレスごとにまとめています。
続く「HAVING (count(R0.sEmail) > 1)」が、上記手順中「データグループ化句を追加」による部分。同じメールアドレス数(count(R0.sEmail))が1個より多い(>1)という条件を与えることで「重複」を選び出しています。
SQLでは、group by 〜 havingは頻出の基本テクニック。「SQLの本質を理解するための重要な鍵」と言う識者もいるほどです。ぜひ上記操作手順と対照させながら、その意味と動きをつかんでみてください。

いかがでしょうか。重複を探したい、と思うことはなにげにけっこう多いのではないかと思います。とはいえなかなかクセが強いCampaignのインターフェイス。SQLならすらすら書ける、という方でも戸惑うことがあるかもしれません。でもこのシリーズではまだまだ、そんな迷える子羊たちを導く実践テクを紹介していくつもりです。フォローして使いこなしを身につけ、誇り高きCampaignクエラーになってください!

本稿の内容は筆者のオンプレミス型デモ環境(Adobe Campaign Classic 9342@6583a8a・PostgreSQL 11.14)上で実施した検証に基づきます。別環境における同様の動作を保証するものではありません。またデータは架空のものであり、既存の配信や実在の組織とはいっさい関係がありません。

  1. ここで直接「count(@email)」と入力してしまってもOKです。

  2. 注1で言及した直接入力です。

  3. 本番環境ではこの設定は決して行わないでください。本稿では学習目的のため一時的に設定しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?