Adobe Campaignクエリー道場(8)〜CASE式とグループ化

[前回](https://qiita.com/JJSlider/items/fa81e6276f4fca456c1f "Adobe Campaignクエリー道場(7)〜CASE式で集計")は、Adobe CampaignクエリーでCASE式[^1]による集計をやってみました。
実は、やり方はひとつじゃありません。今回はちょっと違った方法に取り組んでみましょう。

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

まず、クエリー道場[第５回](https://qiita.com/JJSlider/items/db2ce04818871cf435c5 "Adobe Campaignクエリー道場(5)〜CASE式はシティポップに乗せて")をそのまま使います:
![2023-11-01_16-46-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/9ac22019-9e25-066d-d8fb-3da8fc9c357d.png)
この結果を得たアクティビティにつなげて、新たな「クエリ」アクティビティを置きましょう:
![2023-12-06_12-44-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/b59ca0a0-a556-36f3-428b-1c34cc6d8990.png)
ダブルクリックし、「クエリを編集...」をクリック:
![2023-12-06_12-49-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/554ad2ee-bb3f-79a1-96bb-534ed8190c1f.png)
「ターゲティングとフィルタリングディメンジョン」画面で「一時スキーマ」をティックします。そしてその下の「スキーマ」でプルダウンから先行「クエリ」アクティビティを選択してください:
![2023-12-06_12-56-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/abd02fc6-fbf5-5e68-8942-7967fd3e6f54.png)
「制限フィルターのリスト」で「フィルター条件」をダブルクリック。「フィルター」画面では誕生日を1926年12月26日以降とします[^2]:
![2023-12-06_15-29-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/9a5ed911-1589-075e-389a-04041bb39a55.png)
「完了」で「クエリ」画面に戻り、「データを追加...」をクリック:
![2023-12-06_15-35-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/d776fdf0-ffe5-6000-426d-3009c5deeff5.png)
「フィルタリングディメンジョンにリンクされたデータ」>「フィルタリングディメンジョンのデータ」。この辺は過去回と同様です。
「追加するデータ」画面で「使用可能フィールド:」ペインの「元号」をダブルクリックします。すると「出力列:」に追加されるので、「グループ」のチェックボックスをチェックしてください:
![2023-12-06_15-48-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/2de5f12e-e3ee-d212-975d-11af4e6dbcda.png)
「追加」ボタンをクリック:
![2023-12-06_16-02-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/bb699dd8-d78f-ba94-a6e4-4b4dd5d8ce3d.png)
「式」に以下をコピペ。意味はまたのちほど:
```
Count(era)
```
「完了」で「クエリ」画面に戻り、「追加データを編集...」をクリック:
![2023-12-06_16-09-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/51dbb057-e9e6-416d-b21c-73aec6a26481.png)
「詳細設定パラメーター...」をクリック:
![2023-12-06_16-28-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/c9f4447d-5037-316a-4205-94d18f5d5adf.png)
「重複行を削除 (DISTINCT)」をアンチェック、「ターゲティングディメンジョンのプライマリキーの自動追加を無効にする」をチェック[^3]:
![2023-12-06_16-26-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/bbb0cd56-c476-9e89-09ae-72137de5f01e.png)
「OK」３回クリックでワークフローキャンバスに戻って「保存」、完成です。実行し「クエリ」アクティビティからの遷移矢印を右クリックして「ターゲットを表示...」:
![2023-12-06_16-43-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/0de4c121-103f-0522-004b-3f44821c18a0.png)
[前回](https://qiita.com/JJSlider/items/fa81e6276f4fca456c1f "Adobe Campaignクエリー道場(7)〜CASE式で集計")では集計結果を行で得る「横持ち」でしたが、今回は列に集計結果が並ぶ「縦持ち」になるのがおもしろいところです。配信など後続アクティビティの要件によって使い分けてください。
***
ポイントを振り返ってみます。
ここまでクエリー道場では１アクティビティ内で処理を完結させていましたが、今回はクエリーの２つ使いをやってみました。そのためターゲットディメンジョンを一時スキーマとして上流の結果を読み込んでいます:
![2023-12-06_12-56-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/abd02fc6-fbf5-5e68-8942-7967fd3e6f54.png)
これにより後の「詳細設定パラメーター」で「インバウンドイベントデータを使用」が自動的にチェックされていることに注意してください:
![2023-12-06_16-26-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/bbb0cd56-c476-9e89-09ae-72137de5f01e.png)
もうひとつポイントが「グループ」:
![2023-12-06_15-48-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516149/2de5f12e-e3ee-d212-975d-11af4e6dbcda.png)
クエリー道場[第３回](https://qiita.com/JJSlider/items/547d5348b647506ff846 "Adobe Campaignクエリー道場(3)〜最新日付でビバノンノン")で取り上げました。ご記憶でしょうか。
今回は元号ごとの数を集計するんでしたね。そのため「グループ」をチェックすることで元号ごとに束ねてやったというわけです。そして:
```
Count(era)
```
[第２回](https://qiita.com/JJSlider/items/da6b567d13adb5f5500a "https://qiita.com/JJSlider/items/da6b567d13adb5f5500a")で取り上げた[集計関数](https://experienceleague.adobe.com/docs/campaign-standard/using/managing-processes-and-data/filtering-data/list-of-functions.html?lang=ja#aggregates)Count()。また引数の「era」は[第５回](https://qiita.com/JJSlider/items/db2ce04818871cf435c5 "Adobe Campaignクエリー道場(5)〜CASE式はシティポップに乗せて")で元号に対して定義したエイリアスです。このエイリアス機能は見過ごされがちですがなにげに便利で、今回のようにアクティビティ間を渡ってデータを参照する場合にはとても役立ちます。
以上により、グループ化された元号カラム「era」をカウントできるので、要件の結果を得ることができました。
***
最後に今回作ったアクティビティのSQLを見ておきましょう:
```
SELECT   W0.sEra, Count(W0.sEra) FROM wkf23230_30_1 W0 WHERE (W0.tsBirth >= date '1926-12-26') GROUP BY W0.sEra
```
Count(W0.sEra)はコピペした式に対応するSQL。元号カラムをカウントします。その対象テーブルが「wkf23230_30_1 W0」。先行するアクティビティが出力した一時テーブルで、受信者を元号でラベリングした結果が入っています。そして「GROUP BY W0.sEra」は上述の「グループ」に対応するSQL。これで元号ごとにグループ化ができるというわけですね。
Campaignのインターフェイス上で用いた式や関数がSQLに展開されていることを確認してください。
***
いかがでしたか。[前回](https://qiita.com/JJSlider/items/fa81e6276f4fca456c1f "Adobe Campaignクエリー道場(7)〜CASE式で集計")の別解を紹介したわけですが、過去回の復習もすることができました。忘れていた方は併せて振り返ってみてください。
ひとつの要件に対してこうして何通りものやり方ができる。Campaignの柔軟さです。それに合わせて自分の発想も柔軟にすれば、より多くの要件に適切な対応をとれるようになりますね。本稿がその助けになればうれしいです！

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

[^1]: CampaignのCASE式については以下記事も併せてご覧ください:
　[Adobe Campaignクエリー道場(5)〜CASE式はシティポップに乗せて](https://qiita.com/JJSlider/items/db2ce04818871cf435c5 "Adobe Campaignクエリー道場(5)〜CASE式はシティポップに乗せて")
　[Adobe Campaignクエリー道場(6)〜CASE式で推し活?!](https://qiita.com/JJSlider/items/c85ed2abf4e836daaa7a "Adobe Campaignクエリー道場(6)〜CASE式で推し活?!")
　[Adobe Campaignクエリー道場(7)〜CASE式で集計](https://qiita.com/JJSlider/items/fa81e6276f4fca456c1f "Adobe Campaignクエリー道場(7)〜CASE式で集計")
[^2]: この条件はじつは不要ですが、何らかのフィルター条件がないとエラーになるためダミー的に指定しています。
[^3]: 「ターゲティングディメンジョンのプライマリキーの自動追加を無効にする」はグループ化と集計関数に欠かせません。各レコードにキーが付いていてはグループにならないからです。過去回も併せてご覧ください:
　[Adobe Campaignクエリー道場(1)〜ユニークな件数](https://qiita.com/JJSlider/items/dff8bb8a8c48ddad40bf "Adobe Campaignクエリー道場(1)〜ユニークな件数")
　[Adobe Campaignクエリー道場(2)〜重複値を探す](https://qiita.com/JJSlider/items/da6b567d13adb5f5500a "Adobe Campaignクエリー道場(2)〜重複値を探す")
　[Adobe Campaignクエリー道場(3)〜最新日付でビバノンノン](https://qiita.com/JJSlider/items/547d5348b647506ff846 "Adobe Campaignクエリー道場(3)〜最新日付でビバノンノン")
　[Adobe Campaignクエリー道場(4)〜HAVING句でブラボー！](https://qiita.com/JJSlider/items/8050d61caa68cf25f173 "Adobe Campaignクエリー道場(4)〜HAVING句でブラボー！")