派生属性は、他のダウンストリーム Platform サービスと共に使用したり、リアルタイム顧客プロファイルデータに公開したりできるデータレイクのデータを分析する複雑な使用例を容易にします。
この使用例では、リアルタイム顧客プロファイルデータで使用する、デシルベースの派生属性を作成する方法を示します。 航空会社のロイヤリティシナリオの例を使用して、このガイドでは、分類デシルを使用してセグメント化し、ランク付け属性に基づいてオーディエンスを作成するデータセットの作成方法について説明します。
次の主要概念を示します。
このガイドでは、 クエリサービスでのクエリの実行 Adobe Experience Platformの以下の構成要素
このドキュメントで示す例では、デシルを使用して、航空会社のロイヤリティスキーマからランキングデータの派生属性を作成します。 派生属性を使用すると、選択したカテゴリの上位「n」%に基づいてオーディエンスを識別することで、データのユーティリティを最大化できます。
特定のディメンションと対応する指標に基づいてデシルのランクを定義するには、デシルのグループ化を可能にするようにスキーマを設計する必要があります。
このガイドでは、航空会社のロイヤリティデータセットを使用し、様々なルックバック期間に流れるマイル数に基づいて、クエリサービスを使用してデシルを構築する方法を示します。
クエリサービスを使用すると、分類されたデシルを含むデータセットを作成し、それをセグメント化して、属性のランクに基づいてオーディエンスを作成できます。 次の例に示す概念は、カテゴリが定義され、指標が使用可能である限り、他のデシルバケットデータセットを作成するために適用できます。
この例の航空会社のロイヤリティデータでは、 XDM ExperienceEvents クラス. 各イベントは、マイルに関するビジネス取引の記録で、クレジットまたは引き落としが行われ、「チラシ」、「頻繁」、「シルバー」、「ゴールド」のメンバーシップロイヤルティステータスが記録されます。 プライマリ ID フィールドは、 membershipNumber
.
この例の最初の航空会社のロイヤリティーデータセットは「航空会社のロイヤリティーデータ」で、次のスキーマを持ちます。 スキーマのプライマリ ID は、 _profilefoundationreportingstg.membershipNumber
.
サンプルデータ
次の表に、 _profilefoundationreportingstg
オブジェクトは、この例で使用されます。 デシルグループを使用して複雑な派生属性を作成するためのコンテキストを提供します。
簡潔にするには、テナント ID _profilefoundationreportingstg
は、列タイトルの名前空間の開始と、ドキュメント全体での後続のメンションから除外されています。
.membershipNumber |
.emailAddress.address |
.transactionDate |
.transactionType |
.transactionDetails |
.mileage |
.loyaltyStatus |
---|---|---|---|---|---|---|
C435678623 | sfeldmark1vr@studiopress.com | 2022-01-01 | STATUS_MILES | 新しいメンバー | 5,000 | チラシ |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | AWARD_MILES | JFK-FRA | 7500 | 銀 |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | STATUS_MILES | JFK-FRA | 7500 | 銀 |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-10 | AWARD_MILES | FRA-JFK | 5,000 | 銀 |
A123487284 | rritson1zn@sciencedaily.com | 2022-01-07 | STATUS_MILES | 新しいクレジットカード | 10000 | チラシ |
上記の航空会社のロイヤリティデータでは、 .mileage
値には、1 回のフライトでのメンバーのフローマイル数が含まれます。 このデータは、全期間ルックバックおよび様々なルックバック期間を通過したマイル数のデシルを作成するために使用されます。 この目的で、各ルックバック期間のマップデータ型のデシルと、以下に割り当てられた各ルックバック期間の適切なデシルを含むデータセットを作成します。 membershipNumber
.
クエリサービスを使用して、「Airline Loyalty Decile スキーマ」を作成し、Decile データセットを作成します。
リアルタイム顧客プロファイルでExperience Platformに取り込まれるデータは、次に準拠している必要があります。 プロファイルに対して有効なエクスペリエンスデータモデル (XDM) スキーマ. プロファイルでスキーマを有効にするには、XDM の個別プロファイルまたは XDM ExperienceEvent クラスのいずれかを実装する必要があります。
スキーマレジストリ API を使用して、リアルタイム顧客プロファイルでスキーマの使用を有効にする または スキーマエディターのユーザーインターフェイス. プロファイルのスキーマを有効にする方法に関する詳細な手順は、それぞれのドキュメントで参照できます。
次に、デシール関連のすべてのフィールドグループで再利用するデータ型を作成します。 十分位数フィールドグループの作成は、サンドボックスごとに 1 回限りの手順です。 また、デシル関連のすべてのスキーマでも再利用できます。
デシルで使用するために作成されたスキーマには、プライマリ ID が割り当てられている必要があります。 以下が可能です。 Adobe Experience Platform Schemas UI で id フィールドを定義するまたは スキーマレジストリ API.
また、クエリサービスを使用すると、アドホックスキーマデータセットフィールドの ID またはプライマリ ID を SQL を介して直接設定できます。 詳しくは、 アドホックスキーマ id でのセカンダリ id とプライマリ id の設定 を参照してください。
次の例は、ルックバック期間中にデシールを計算する SQL クエリを示しています。
テンプレートは、UI のクエリエディターを使用して作成するか、 クエリサービス API.
CREATE TABLE AS airline_loyality_decile
{ WITH summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
),
summed_miles_3 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 1))
GROUP BY 1,2
),
summed_miles_6 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 4))
GROUP BY 1,2
),
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
),
rankings_3 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_3
),
rankings_6 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_6
),
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
),
map_3 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth3
FROM rankings_3
GROUP BY membershipNumber
),
map_6 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth6
FROM rankings_6
GROUP BY membershipNumber
),
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
}
クエリ例の各セクションの詳細を以下に示します。
デシールのデータ型には、1、3、6、9、12 およびライフタイムのルックバックのバケットが含まれます。 クエリでは 1、3、6 ヶ月のルックバック期間を使用するので、各セクションには、各ルックバック期間の一時テーブルを作成するために、「繰り返し」クエリがいくつか含まれます。
ソースデータに、ルックバック期間の判断に使用できる列がない場合、すべての decile クラスのランク付けは、 decileMonthAll
.
共通のテーブル式 (CTE) を使用して、デシルバケットを作成する前にマイルをまとめて集計します。 これにより、特定のルックバック期間の合計マイル数が示されます。 CTE は一時的に存在し、より大きなクエリの範囲内でのみ使用できます。
summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
)
このブロックは、テンプレート (summed_miles_3
および summed_miles_6
) の日付の計算を変更して、他のルックバック期間のデータを生成する必要があります。
クエリの ID、ディメンション、指標の列 (membershipNumber
, loyaltyStatus
および totalMiles
それぞれ )。
デシルを使用すると、分類グループ化を実行できます。 ランキング番号を作成するには、 NTILE
関数は 10
を loyaltyStatus
フィールドに入力します。 これにより、1 から 10 のランキングが得られます。 を ORDER BY
節 WINDOW
から DESC
ランキング値を 1
が greatest 指標を含める必要があります。
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
)
複数のルックバック期間がある場合は、事前に MAP_FROM_ARRAYS
および COLLECT_LIST
関数 サンプルスニペットで、 MAP_FROM_ARRAYS
キーのペア (loyaltyStatus
) と値 (decileBucket
) 配列を使用します。 COLLECT_LIST
指定された列のすべての値を持つ配列を返します。
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
)
十分位数のランク付けが全期間に対してのみ必要な場合は、マップの集計は必要ありません。
一意の ID のリスト (membershipNumber
) は、すべてのメンバーシップの一意のリストを作成するために必要です。
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
十分位数のランク付けが全期間に対してのみ必要な場合、この手順を省略し、 membershipNumber
は、最後の手順で実行できます。
最後の手順は、すべての一時データを結合し、フィールドグループ内のデシルの構造と同じフォームにすることです。
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
ライフタイムデータのみを使用できる場合、クエリは次のように表示されます。
SELECT STRUCT(
rankings.membershipNumber AS membershipNumber,
STRUCT(
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonthAll
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM rankings
GROUP BY rankings.membershipNumber
デシルが使用されるので、クエリの結果では、ランキング番号とパーセンタイルの相関関係が保証されます。 各ランクは 10%と等しいので、上位 30%に基づいてオーディエンスを識別する場合は、1、2、3 のランクをターゲットにするだけで済みます。
クエリを実行して、デシルのデータセットを設定します。 また、クエリをテンプレートとして保存し、スケジュールを設定して、クエリをケイデンスで実行することもできます。 テンプレートとして保存した場合、クエリを更新して、 table_exists
コマンドを使用します。 の使用方法の詳細 table_exists
コマンドは、 SQL 構文ガイド.
上記の使用例では、デシル属性をリアルタイム顧客プロファイルで使用できるようにする手順を重点的に説明しています。 これにより、ユーザーインターフェイスまたは RESTful API を介してセグメント化サービスを使用して、これらのデシルバケットに基づいてオーディエンスを生成できます。 詳しくは、 セグメント化サービスの概要 を参照してください。