Abgeleitete Attribute erleichtern komplexe Anwendungsfälle für die Analyse von Daten aus dem Data Lake, die mit anderen nachgelagerten Platform-Diensten verwendet oder in Ihren Echtzeit-Kundenprofildaten veröffentlicht werden können.
In diesem Anwendungsbeispiel wird gezeigt, wie Sie dezimalbasierte abgeleitete Attribute für die Verwendung mit Ihren Echtzeit-Kundenprofildaten erstellen. Anhand eines Beispielszenarios zur Treue von Fluggesellschaften erfahren Sie in diesem Handbuch, wie Sie einen Datensatz erstellen, der kategorische Dezile verwendet, um Zielgruppen basierend auf Rangattributen zu segmentieren und zu erstellen.
Die folgenden Schlüsselkonzepte werden veranschaulicht:
Dieses Handbuch setzt ein Verständnis der Abfrageausführung in Query Service und die folgenden Komponenten von Adobe Experience Platform:
Das in diesem Dokument angegebene Beispiel verwendet Dezimalstellen, um abgeleitete Attribute für die Rangdaten aus einem Treueschema einer Fluglinie zu erstellen. Abgeleitete Attribute ermöglichen es Ihnen, den Nutzwert Ihrer Daten zu maximieren, indem Sie eine Zielgruppe anhand der höchsten 'n' % für eine bestimmte Kategorie identifizieren.
Um die Rangfolge von Dezimalstellen basierend auf einer bestimmten Dimension und einer entsprechenden Metrik zu definieren, muss ein Schema so konzipiert sein, dass eine Dezimalzusammenfassung möglich ist.
In diesem Handbuch wird mithilfe eines Datensatzes zur Treueprogramm von Fluggesellschaften gezeigt, wie mithilfe von Query Service anhand der über verschiedene Lookback-Zeiträume hinweg zurückgelegten Meilen Dezile erstellt werden können.
Mithilfe von Query Service können Sie einen Datensatz erstellen, der kategorische Dezimalzahlen enthält, die dann segmentiert werden können, um Zielgruppen basierend auf der Attributranking zu erstellen. Die in den folgenden Beispielen angezeigten Konzepte können angewendet werden, um andere Dezimalgruppen-Datensätze zu erstellen, sofern eine Kategorie definiert und eine Metrik verfügbar ist.
Die Beispieldaten zur Treue von Fluglinien verwenden eine XDM ExperienceEvents-Klasse. Jedes Ereignis ist ein Datensatz über eine geschäftliche Transaktion für Meilen, entweder gutgeschrieben oder belastet, und der Status der Mitgliedschaftsloyalität von "Flyer", "Frequent", "Silver"oder "Gold". Das primäre Identitätsfeld lautet membershipNumber
.
Der ursprüngliche Datensatz zur Treueprogramm von Fluggesellschaften für dieses Beispiel ist "Daten zum Treueprogramm für Fluglinien"und weist das folgende Schema auf. Beachten Sie, dass die primäre Identität für das Schema lautet _profilefoundationreportingstg.membershipNumber
.
Beispieldaten
Die folgende Tabelle zeigt die Beispieldaten im _profilefoundationreportingstg
-Objekt, das für dieses Beispiel verwendet wird. Es bietet Kontext für die Verwendung von Dezimalbuckets zum Erstellen komplexer abgeleiteter Attribute.
Für Kürze wird die Mandanten-ID _profilefoundationreportingstg
wurde am Anfang des Namespace in den Spaltentiteln und nachfolgenden Erwähnungen im gesamten Dokument weggelassen.
.membershipNumber |
.emailAddress.address |
.transactionDate |
.transactionType |
.transactionDetails |
.mileage |
.loyaltyStatus |
---|---|---|---|---|---|---|
C435678623 | sfeldmark1vr@studiopress.com | 2022-01-01 | STATUS_MILES | Neues Mitglied | 5.000 | FLYER |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | AWARD_MILES | JFK-FRA | 7500 | SILBER |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-01 | STATUS_MILES | JFK-FRA | 7500 | SILBER |
B789279247 | pgalton32n@barnesandnoble.com | 2022-02-10 | AWARD_MILES | FRA-JFK | 5.000 | SILBER |
A123487284 | rritson1zn@sciencedaily.com | 2022-01-07 | STATUS_MILES | Neue Kreditkarte | 10000 | FLYER |
In den oben aufgeführten Daten zur Treueprogramm der Fluggesellschaft wird die Variable .mileage
Der Wert enthält die Anzahl der Meilen, die ein Mitglied für jeden einzelnen Flug zurücklegt. Diese Daten werden verwendet, um Dezimalstellen für die Anzahl der Meilen zu erstellen, die über Lebenszeit-Lookbacks und verschiedene Lookback-Zeiträume geflogen sind. Zu diesem Zweck wird ein Datensatz erstellt, der Dezimalstellen in einem Zuordnungs-Datentyp für jeden Lookback-Zeitraum und eine entsprechende Dezimalzahl für jeden Lookback-Zeitraum enthält, der unter membershipNumber
.
Erstellen Sie ein "Airline Loyalty Decile Schema", um mithilfe von Query Service einen Dezimaldatensatz zu erstellen.
Daten, die zur Verwendung durch das Echtzeit-Kundenprofil in Experience Platform aufgenommen werden, müssen ein Experience-Datenmodell (XDM)-Schema, das für Profil aktiviert ist. Damit ein Schema für Profile aktiviert werden kann, muss es entweder die XDM Individual Profile- oder die XDM ExperienceEvent-Klasse implementieren.
Aktivieren Sie Ihr Schema zur Verwendung im Echtzeit-Kundenprofil mithilfe der Schema Registry-API. oder Benutzeroberfläche des Schema-Editors. Detaillierte Anweisungen zum Aktivieren eines Schemas für Profile finden Sie in der entsprechenden Dokumentation.
Erstellen Sie anschließend einen Datentyp, der für alle dezimalbezogenen Feldergruppen wiederverwendet werden soll. Die Erstellung der Dezimalfeldgruppe ist ein einmaliger Schritt pro Sandbox. Sie kann auch für alle dezimalbezogenen Schemas wiederverwendet werden.
Jedes Schema, das für die Verwendung mit Dezimalstellen erstellt wurde, muss eine primäre Identität aufweisen. Sie können Identitätsfeld in der Benutzeroberfläche von Adobe Experience Platform-Schemas definierenoder durch Schema Registry-API.
Mit Query Service können Sie auch direkt über SQL eine Identität oder eine primäre Identität für Ad-hoc-Schema-Datensatzfelder festlegen. Weitere Informationen finden Sie in der Dokumentation unter Festlegen einer sekundären Identität und primären Identität in Ad-hoc-Schemaidentitäten für weitere Informationen.
Das folgende Beispiel zeigt die SQL-Abfrage zur Berechnung einer Dezimalzahl über einen Lookback-Zeitraum.
Eine Vorlage kann entweder mit dem Abfrage-Editor in der Benutzeroberfläche oder über die Query Service-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)
}
Die Abschnitte der Beispielabfrage werden im Folgenden detaillierter behandelt.
Der Dezimaldatentyp enthält einen Behälter für 1, 3, 6, 9, 12 und Lebenszeit-Lookbacks. Die Abfrage nutzt die Lookback-Zeiträume von 1, 3 und 6 Monaten, sodass jeder Abschnitt einige "wiederholte"Abfragen enthält, um temporäre Tabellen für jeden Lookback-Zeitraum zu erstellen.
Wenn die Quelldaten nicht über eine Spalte verfügen, die zur Bestimmung eines Lookback-Zeitraums verwendet werden kann, werden alle Rangfolgen der Dezimalklasse unter decileMonthAll
.
Verwenden Sie gemeinsame Tabellenausdrücke (CTE), um die Meilensteine vor der Erstellung von Dezimalbuckets zu aggregieren. Dadurch werden die Gesamtmeilen für einen bestimmten Lookback-Zeitraum bereitgestellt. CTEs existieren temporär und können nur im Rahmen der größeren Abfrage verwendet werden.
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
)
Der Block wird in der Vorlage zweimal wiederholt (summed_miles_3
und summed_miles_6
), um die Daten für die anderen Lookback-Zeiträume zu generieren.
Es ist wichtig, die Identitäts-, Dimensions- und Metrikspalten für die Abfrage (membershipNumber
, loyaltyStatus
und totalMiles
).
Dekore ermöglichen kategorische Bucketings. Um die Rangnummer zu erstellen, muss die NTILE
-Funktion mit einem Parameter von 10
innerhalb eines FENSTERS, gruppiert nach loyaltyStatus
-Feld. Dies führt zu einer Rangfolge von 1 bis 10. Legen Sie die ORDER BY
-Klausel WINDOW
nach DESC
, um sicherzustellen, dass der Rangwert von 1
wird dem größte Metrik innerhalb der Dimension.
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
)
Bei mehreren Lookback-Zeiträumen müssen Sie die dezimalen Behälterzuordnungen im Voraus mithilfe des MAP_FROM_ARRAYS
und COLLECT_LIST
Funktionen. Im Beispielausschnitt MAP_FROM_ARRAYS
erstellt eine Zuordnung mit einem Schlüsselpaar (loyaltyStatus
) und -Werten (decileBucket
) Arrays. COLLECT_LIST
gibt ein Array mit allen Werten in der angegebenen Spalte zurück.
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
)
Die Zuordnungsaggregation ist nicht erforderlich, wenn die Dezimaltrennung nur für einen Lebenszeitzeitraum erforderlich ist.
Die Liste der eindeutigen Identitäten (membershipNumber
) ist erforderlich, um eine eindeutige Liste aller Mitgliedschaften zu erstellen.
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
Wenn die Dezimaltrennung nur für einen Lebenszeitzeitraum erforderlich ist, kann dieser Schritt weggelassen und die Aggregation nach membershipNumber
kann im letzten Schritt durchgeführt werden.
Der letzte Schritt besteht darin, alle temporären Daten in einem Formular zusammenzufügen, das mit der Struktur der Dezimalstellen in der Feldergruppe identisch ist.
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)
Wenn nur Lebenszeitdaten verfügbar sind, würde Ihre Abfrage wie folgt aussehen:
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
Eine Korrelation zwischen der Rangnummer und dem Perzentil ist in den Abfrageergebnissen aufgrund der Verwendung von Dezimalstellen garantiert. Jeder Rang entspricht 10 %, sodass die Ermittlung einer Zielgruppe, die auf den oberen 30 % basiert, nur die Ränge 1, 2 und 3 erreichen muss.
Führen Sie die Abfrage aus, um den Dezimaldatensatz zu füllen. Sie können die Abfrage auch als Vorlage speichern und planen, dass sie in einem Cadence ausgeführt wird. Wenn die Abfrage als Vorlage gespeichert wird, kann sie auch aktualisiert werden, um das Muster zum Erstellen und Einfügen zu verwenden, das auf die table_exists
Befehl. Weitere Informationen zur Verwendung der table_exists
-Befehl finden Sie im SQL-Syntaxhandbuch.
Im oben genannten Anwendungsbeispiel werden die Schritte erläutert, um Dezimalattribute im Echtzeit-Kundenprofil verfügbar zu machen. Dadurch kann Segmentation Service über eine Benutzeroberfläche oder eine RESTful-API Zielgruppen basierend auf diesen Dezimalgruppen generieren. Siehe Übersicht über den Segmentierungsdienst für Informationen zum Erstellen, Auswerten und Zugreifen auf Segmente.