今回は、お客様から実際にいただいたサポートケースを題材にします1。
そのお客様は、以下のような要件をお持ちでした2:
クエリー結果を「推し」の順に並べられるようにしたい
どういう意味かよくわかりませんね。例で考えてみます。
クエリー対象スキーマで、あるカラムが以下の値を持つとします:
お菊
お岩
貞子
伽椰子
同スキーマに対するクエリー結果を、「推し」の順にしたい、という要件です3。その順はたとえば:
貞子
お岩
伽椰子
お菊
なんでこの順かといっても、推しに理由はいらない。好きという気持ちが尊いのです。また推し変ということもあり得るので、この順は固定的にスキーマで持ったりせず、「クエリ」アクティビティごとに定義します。
さあこの要件、どう攻略しましょうか。
こういう、ある意味で理屈抜きな要件は、単純なようで意外に手を焼くもの。しかし、前回をお読みの方ならもうおわかりですよね。そう、CASE式が使えるのです。具体的に見てみましょう。
スキーマ名を「推し活」、カラムを「推しメン」(@push)とします。
「クエリ」アクティビティを作成し、ターゲティングディメンジョンに「推し活」を指定:
フィルター条件を適宜指定4。「クエリ」タブに戻って「データを追加...」をクリック:
「追加するデータのタイプを選択」で「フィルタリングディメンジョンにリンクされたデータ」を選択:
「追加するフィールドを選択」で「フィルタリングディメンジョンのデータ」を選択:
「追加するデータ」で「出力列」ペインの「追加」ボタンをクリック:
「式」に以下をコピペ:
Case(When(@push='貞子', 1), When(@push='お岩', 2), When(@push='伽椰子', 3), Else(4))
見やすいように、ラベルを適宜入力:
左ペインで「推しメン」をダブルクリックして出力列に追加:
これでできあがりです。
「OK」を2回クリックしワークフローキャンバスに戻って実行。「クエリ」アクティビティからの遷移矢印を右クリックして「ターゲットを表示...」すると:
推し順に番号が振られるのでソートができるというわけです。
あらためて入力したCASE式を振り返りましょう:
Case(When(@push='貞子', 1), When(@push='お岩', 2), When(@push='伽椰子', 3), Else(4))
前回はCASE式を使ってラベルを付けましたが、今回は、カラムの値に対して好き勝手に番号を振りました。貞子は1、お岩は2、という具合ですね5。
SQLでは、CASE式を使ってカラムを別のかたちに変換するというテクニックを多用します。Campaignでも「Case()」「When()」「Else()」各関数によってそれが実現できるのです。ここでは任意に定義した数値により、ソートのためだけのカラムを新たに作りました。
名前をつけかえたり番号を振ったりといろいろできるCASE式のテクニック、ぜひ身につけて、日々の実装に活かしていきましょう。
いかがでしたか。Campaignクエリーで推し活、とはちょっと意外な応用でしたね。そんな思わぬ要件にであったときは、本連載を読み返してみてください。そしてもし参考になったら、跡部官辺に「いいね」で推し活を!
本稿の内容は筆者のオンプレミス型デモ環境(Adobe Campaign Classic 9359@c636bf3 PostgreSQL 14.9)上で実施した検証に基づきます。別環境における同様の動作を保証するものではありません。またデータは架空のものであり、既存の配信や実在の組織とはいっさい関係がありません。