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クエリー道場(7)〜CASE式で集計

Last updated at Posted at 2023-12-01

前回までAdobe CampaignクエリーにおけるCASE式をとりあげました。カラムを別なかたちに変換できる優れものでしたね。
今回はそのCASE式で集計を行うことを考えましょう。
前々回では、受信者を誕生日の元号でラベリングしました。ではその元号別に人数を集計するにはどうしたらいいでしょうか。今回は、CASE式を使ってその要件を解決してみます。

誕生日が1926年12月26日以降の受信者で「昭和生まれ」「平成生まれ」「令和生まれ」それぞれの人数を数えたい。

例によって「クエリ」アクティビティを作成。「受信者」をディメンジョンとし、フィルター条件を「誕生日」が1926年12月26日「以降」とします:
2023-11-30_11-48-26.png
「クエリ」画面で「データを追加...」。「追加するデータ」画面まで前々回と同手順で進みます。そして「出力列」で「追加」ボタンをクリック:
2023-11-30_11-50-53.png
「式」に以下をコピペしてください:

Sum(Case(When(@birthDate<'1989/01/08', 1), Else(0)))

そして「ラベル」に「昭和」と入力1:
2023-11-30_12-10-25.png
ふたたび「追加」をクリック、あらたな行に以下をコピペ:

Sum(Case(When(@birthDate<'2019/05/01' and @birthDate>='1989/01/08', 1), Else(0)))

「ラベル」に「平成」と入力:
2023-11-30_12-18-46.png
もういちど「追加」をクリック、あらたな行に以下をコピペ:

Sum(Case(When(@birthDate>='2019/05/01', 1), Else(0)))

「ラベル」に「令和」と入力:
2023-11-30_12-25-25.png
いったん「完了」で「クエリ」画面に戻り、「追加データを編集...」をクリック:
2023-11-30_12-29-23.png
「詳細設定パラメーター」画面で「重複行を削除」をアンチェック、「ターゲティングディメンジョンのプライマリキーの自動追加を無効にする」をチェック2:
2023-11-30_12-33-22.png
「OK」3回クリックでワークフローキャンバスに戻って「保存」、完成です。実行し「クエリ」アクティビティからの遷移矢印を右クリックして「ターゲットを表示...」:
2023-11-30_12-51-01.png
元号別の人数が得られました!


式の意味を振り返ってみましょう。

Sum(Case(When(@birthDate<'1989/01/08', 1), Else(0)))

「Case()」「When()」「Else()」は前回前々回から紹介しているCampaignの関数ですね。今回は何をしているかというと:

When(@birthDate<'1989/01/08', 1)

このWhen()関数ではまず、誕生日が1989年1月8日より前という条件を指定しています。そしてレコード行が同条件に合致したならば「1」を値として返します。これにより、誕生日が昭和の受信者に「1」という値が与えられるのです。続いて:

Else(0)

Else()関数は、先行するWhen()関数の条件以外であればカッコ内の値を返すもの。とするとこの場合、誕生日が昭和でないならば「0」ということですね。以上をCase()関数でまとめると:

Case(When(@birthDate<'1989/01/08', 1), Else(0))

誕生日が昭和なら「1」、そうでなければ「0」、という値が受信者に割り振られるわけです。そして最後に:

Sum(Case(When(@birthDate<'1989/01/08', 1), Else(0)))

Case()全体をSum()で囲いました。過去回で「集計関数」を紹介していますが、このSum()も集計関数のひとつ。カッコ内を合計した値を返すものです。
誕生日が昭和なら1、そうでないなら0を合計する──とすると、昭和生まれの人数が得られるというわけですね!
あとは同様に:

Sum(Case(When(@birthDate<'2019/05/01' and @birthDate>='1989/01/08', 1), Else(0)))

は誕生日が平成の人数の合計、

Sum(Case(When(@birthDate>='2019/05/01', 1), Else(0)))

は誕生日が令和の合計となります。


いかがでしたか。CASE式で母集団からの条件つき集計を取ることができました。SQLの世界ではおなじみのテクニックですが、Campaignでこれがさらっとできるようになると、打てる施策の幅が広がりますね。ぜひ身につけて、日々のキャンペーンに活かしてください!

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

  1. 「式」の画面表示は、Campaignが「Sum(...)」を認識し「...の合計」と自動的に変換します。

  2. 集計関数を使うために大事な設定です。過去回参照。

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?