Some platform schemas can have object arrays. Adobe Customer Journey Analytics supports ingestion and reporting of object arrays within event, lookup, and profile data. One of the most common examples would be a shopping cart, which contain multiple products. Each product has a name, SKU, category, price, quantity, and any other dimensions you want to track. All of these facets have separate requirements, but must all fit into the same hit.
In previous versions of Adobe Analytics, this feat was accomplished using the products
variable. It was a concatenated string separated by semicolons (;
) to separate facets of a product, while commas (,
) delineated products. It was the only variable with limited support of “object arrays”. Multi-value variables such as list vars could support the equivalent of arrays, but they could not support “object arrays”. Customer Journey Analytics expands on this concept by supporting arbitrarily deep hierarchies within a single row of data, a feature unavailable in any previous version of Adobe Analytics.
The following event is a JSON object that represents a purchase a customer made of a washing machine and dryer.
{
"ID": "1",
"product": [
{
"SKU": "1234",
"category": "Washing Machines",
"name": "LG Washing Machine 2000",
"orders": 1,
"revenue": 1600,
"units": 1,
"order_id":"abc123",
"warranty": [
{
"coverage": "full coverage",
"length": "2 year",
"name": "LG 2000 standard",
"orders": 1,
"revenue": 200
},
{
"coverage": "extended",
"length": "1 year",
"orders": 1,
"revenue": 50,
"type": "LG 2000 addon"
}
]
},
{
"SKU": "4567",
"category": "Dryers",
"name": "LG Dryer 2000",
"orders": 1,
"revenue": 500,
"units": 1
}
],
"timestamp": 1534219229
}
When creating a data view, the following dimensions and metric are available (based on schema):
Using just the above event, the following tables show Workspace reports with some dimension and metric combinations.
product : name |
product : orders |
product : revenue |
---|---|---|
LG Washing Machine 2000 |
1 |
1600 |
LG Dryer 2000 |
1 |
500 |
Total |
1 |
2100 |
Customer Journey Analytics selectively looks at the dimension and metrics of the object based on the table.
{
"ID": "1",
+ "product": [
+ {
"SKU": "1234",
"category": "Washing Machines",
+ "name": "LG Washing Machine 2000",
+ "orders": 1,
+ "revenue": 1600,
"units": 1,
"order_id":"abc123",
"warranty": [
{
"coverage": "full coverage",
"length": "2 year",
"name": "LG 2000 standard",
"orders": 1,
"revenue": 200
},
{
"coverage": "extended",
"length": "1 year",
"orders": 1,
"revenue": 50,
"type": "LG 2000 addon"
}
]
+ },
+ {
"SKU": "4567",
"category": "Dryers",
+ "name": "LG Dryer 2000",
+ "orders": 1,
+ "revenue": 500,
"units": 1
+ }
+ ],
+ "timestamp": 1534219229
+}
If you wanted to report on just warranty revenue, your project would look similar to the following:
product : warranty : coverage |
product : warranty : revenue |
---|---|
full coverage |
200 |
extended |
50 |
Total |
250 |
Customer Journey Analytics looks at these parts of the event to generate the report:
{
"ID": "1",
+ "product": [
+ {
"SKU": "1234",
"category": "Washing Machines",
"name": "LG Washing Machine 2000",
"orders": 1,
"revenue": 1600,
"units": 1,
"order_id":"abc123",
+ "warranty": [
+ {
+ "coverage": "full coverage",
"length": "2 year",
"name": "LG 2000 standard",
"orders": 1,
+ "revenue": 200
+ },
+ {
+ "coverage": "extended",
"length": "1 year",
"orders": 1,
+ "revenue": 50,
"type": "LG 2000 addon"
+ }
+ ]
+ },
{
"SKU": "4567",
"category": "Dryers",
"name": "LG Dryer 2000",
"orders": 1,
"revenue": 500,
"units": 1
}
+ ],
+ "timestamp": 1534219229
+}
Since the dryer did not include a warranty, it is not included in the table.
Since you can combine any dimension with any metric, the following table shows how data would with unspecified dimension items:
product : warranty : name |
product : orders |
product : warranty : orders |
---|---|---|
LG 2000 standard |
1 |
1 |
Unspecified |
2 |
1 |
Total |
2 |
2 |
A product order exists without a warranty name tied to it, so the dimension item attributes to ‘Unspecified’. The same situation also applies to the product warranty order:
{
"ID": "1",
+ "product": [
+ {
"SKU": "1234",
"category": "Washing Machines",
"name": "LG Washing Machine 2000",
+ "orders": 1,
"revenue": 1600,
"units": 1,
"order_id":"abc123",
+ "warranty": [
+ {
"coverage": "full coverage",
"length": "2 year",
+ "name": "LG 2000 standard",
+ "orders": 1,
"revenue": 200
+ },
+ {
"coverage": "extended",
"length": "1 year",
+ "orders": 1,
"revenue": 50,
"type": "LG 2000 addon"
+ }
+ ]
+ },
+ {
"SKU": "4567",
"category": "Dryers",
"name": "LG Dryer 2000",
+ "orders": 1,
"revenue": 500,
"units": 1
+ }
+ ],
+ "timestamp": 1534219229
+}
Note the orders that don’t have a name tied to them. These are the orders attributed to the ‘Unspecified’ dimension item.
Customer Journey Analytics does not natively combine similarly named metrics if they are on different object levels.
product : category |
product : revenue |
product : warranty : revenue |
---|---|---|
Washing Machines |
1600 |
250 |
Dryers |
500 |
0 |
Total |
2100 |
250 |
However, you can create a calculated metric that combines the desired metrics:
Calculated metric “Total revenue”: [product : revenue] + [product : warranty : revenue]
Applying this calculated metric displays the desired results:
product : warranty : name |
Total revenue (calculated metric) |
---|---|
Washing Machines |
1850 |
Dryers |
500 |
Total |
2350 |
Limitations do apply for arrays in data used by Customer Journey Analytics and modelled as part of a schema in Experience Platform. See Data model limits and Data size limits in the Default Guardrails for Real-Time Customer Profile data and segmentation.