Adobe Customer Journey Analytics: My Top 10 Wishes and Highlights

A look at substitutes for Data Warehouse, Data Feeds, Alerts, User Stitching, Analytics 4 Target, and more

Lukas Oldenburg
The Bounce

--

Have you delved into Customer Journey Analytics (CJA) yet? I finally did this year. And I discovered plenty to admire — but also some obstacles that Adobe should tackle before I’d migrate clients from Adobe Analytics (AA) to CJA. Curious about the highlights and challenges? Here’s my personal rundown.

I will start with my top 10 list of what I consider to be the most important AA features not (fully) supported (yet) by CJA, according to my clients’ needs. The lists are in no particular order.

**Note:** I’m still far from an expert in CJA, and this is a learning experience for me. If you spot any mistakes, please let me know in the comments. Thanks!

So this is Adobe Customer Journey Analytics? Let’s take a look inside. (OpenAI DALLE: “An engineer with glasses taking a deep look inside a colorful machine”)

My Top 10 CJA Wishlist

1. A potent “Data Warehouse” substitute

The most important field where CJA needs to improve is bulk exporting. A great step forward here is the recently introduced CJA “Full Table Export”. It is fast, rather user-friendly (apart from the connected “AEP Landing Zone”), and it exports to common cloud destinations like Google Cloud Storage. Yet, it supports merely 5 Dimensions and Metrics per export. Thus, it still falls short of the most important capabilities of Adobe Analytics “Data Warehouse” (DWH).

DWH is the best option in AA to get multi-dimensional data into an easily digestible CSV format. It works for as many rows as you like, and it applies all the AA processing logic. In other words, you get numbers just like in the AA interface, but machine-digestible and with as many dimensions and metrics as you like. While Calculated Metrics are not supported (which is a pro of CJA’s Full Table Export), you can apply segments or segment breakdowns. DWH, just as its name suggests, is thus ideal for feeding data into a “Data Warehouse”, but also common as a data source for recommendation systems, ETL processes and more.

AA data in BigQuery? No problem with DWH!

There is of course the CJA Reporting API. But like the AA Reporting API, it is built for reports like the Workspace interface, not for bulk exports or anything with more than 2 dimensions or 100’000s of rows.

Last but not least, the max export size of the Full Table Exports is also limited to “3 million, 30 million, 150 million, or 300 million rows, depending on license type”.

So if CJA’s Full Table Export remains in its current state, I won’t be able to re-create some important AA use cases. A workaround for some might be to concatenate many dimensions into a few, so you don’t get over the limit of 5. You then need to split them out into multiple columns again in the receiving system. Hopefully though, Adobe enhances the capabilities of Full Table Exports even more.

2. A potent substitute of the Data Feed

Another common AA bulk export method is the Data Feed, which offers Hit-level data, both in the raw and processed version. While it is a lot harder to make sense of that feed, it is very popular in advanced setups where Data Scientists roam. There is nothing like it for CJA yet. In other words: You cannot get raw nor processed data out of CJA in bulk!

Some may say: “Use AEP Query Service, which allows you to query the raw data from the AEP Data Lake and dump it into a CSV every day.” But there are several issues with that approach: You get just the raw, unprocessed data, e.g. no Derived Fields, no persistence logic, no stitching, nothing of what you configure in CJA’s Data View, so you have to merge datasets on your own, etc…

Moreover, while you can re-engineer some of the CJA logic with SQL in Query Service, that has its tight limits: From what I understand from the official documentation, Query Service is not included in the Basic CJA SKU. Plus, even when you buy the “Select” SKU, a 50k-row and 10-minute-execution-time limit applies. You also cannot schedule queries, only Ad-hoc queries are allowed. So if you at least want something that is close to the raw, unprocessed data regularly, you need to purchase the “Data Distiller” SKU. I think Adobe makes it unnecessarily hard and expensive to get data out of CJA and AEP in bulk. This is important as I want to stay as platform-independent as possible, and there will always be plenty of use cases where data needs to be put to use outside of CJA. As a general rule of data architectures, data should be easily extractable from any system you work with.

3. Alerts

Good AA data quality is hard to achieve without a proper Alert setup. One thing I do nearly every day is browsing through my AA Alerts in Slack (I have no hobbies, yes). I can’t count how often Alerts have saved me from missing important data breakages or how often I have spotted interesting trends thanks to them. Example from today: We discovered that an AB test led to a malfunction in category suggestions in our Site Search, because a lot less category suggestions were getting clicked, therefore a lot more keyword suggestions. Or remember my post on measuring Adobe Target performance? I don’t know if I had noticed the performance decline without Alerts.

CJA has no Alerts as of now. Adobe promises to add them soon. Please Adobe, when you do that, please, please, please also give Alerts a utility lift by making trigger types combinable: I have long wished for the function to “trigger an Alert only if there is an anomaly AND the value is higher than x”. That would save us from all those useless hourly Alerts at night time when traffic is low and thus relatively more volatile, so it more easily produces anomalies.

Adobe Analytics Alerts, together with segment-based Calculated Metrics, greatly help staying abreast of trends and data issues. They will soon be a part of CJA as well, according to Adobe.

4. Derived Fields have to be part of the basic SKU

Derived Fields are great and powerful. You can cover a lot of use cases with them, from Marketing Channels (Dr. Frederik Werner 1 and 2) to Classification-Rule-Builder-like stuff. However, they are not included in the basic CJA SKU (“Foundation”)[correction: The “Marketing Channel” template is included, but it supports only a few of the Derived Fields functions”, so I doubt that the limited basic feature set would suffice to rebuild common Marketing Channel logics from AA. I think this feature is key to leverage CJA, so Adobe should not lock it behind a more expensive SKU.

5. Analytics 4 Target

Let me just throw a random recent screenshot from a client in here which embodies the power of Adobe Analytics for me: It shows 2 variants of an AB Test broken down by Device Type, with the Average Order Value (AOV) split by Product Finding Method (yellow, e.g. recommendations). The AOV is only based on the product revenue of the products found through that particular method, so there are no distortive cross-selling effects. This granularity makes it very actionable (it is about testing a new Product Detail Page). We knew exactly where to dig deeper, e.g., we found out this way that the recommendation algorithms on variant B had certain bugs and showed a different selection of products which led to a much poorer AOV.

Analyzing AB Tests together with the rest of your Web Analytics data is nowhere richer than in Adobe Analytics when coupled with Target (“A4T”).

Anyway, Analytics 4 Target is not really in CJA — yet: “Partial support is provided through fields in the Analytics source connector [which you should not use if you are serious about upping the Analytics ante with CJA]. Support for A4T-friendly names on Target Activities and Experiences is planned.” There is the “Experimentation Panel”, but here you need to feed the AB Testing info manually to CJA, so you sort of have to build your own A4T...

6. Summary Data Sources (Ad Cost etc.)

CJA is marketed as a tool that is able to work with “any data available to you”. So what if you want to import your Ad Cost by date and Tracking Code? Correlate your revenue with your daily average stock level by category or merchant? At the moment, you can’t, because these “Summary Data Sources”, as AA calls them, are not supported by CJA. CJA can only handle data with at least a User ID and a timestamp (and User Profile data). This is a gaping must-have hole, and according to Adobe, it shall soon be filled. 😇

7. Transaction ID Data Sources

Not only for E-Commerce, the underrated Transaction ID Data Sources are game changers because they make your AA data so much more valuable. You can’t underestimate the impact of making Refunds, Margins, or the Bottom-Line Revenue available in Analytics (and no, this is not about turning Web Analytics into an accounting system!). E-Commerce clients love it when they can see the money that really matters (because it can be wildly different from the “tracked revenue”) for combinations of on- and offsite campaigns, recommendation algorithms, site search terms and features, product finding methods, AB Tests and so forth. Especially when you can counter that with Marketing Costs (see Summary Data Sources).

There is no sensible way to get anything like Transaction ID Data Sources in CJA yet, because again, this is all data without a User ID and a timestamp. Luckily, it is also on CJA’s roadmap, so let’s look forward to that. 🤓

8. User-friendly and more capable stitching

CJA is advertised as a solution to analyze the full customer journey:

“In a few simple clicks, Adobe Customer Journey Analytics helps you stitch together customer activities across online and offline channels.”

I would say this is slight overselling, but that’s normal for a marketing page. There are multiple things to disentangle here. First, what is stitching? In short, stitching means merging multiple user profiles as soon as they exhibit at least one shared User ID. Check out this post about how stitching works and why it is as a core component of CDPs if you like.

My first cross-channel journey visualization (Web to E-Mail) in CJA. The e-mail data needed to also have the user’s ECID to make this work. That works with Adobe Journey Optimizer, but can be complex with another e-mail marketing tool.
  1. First of all, the only thing that CJA does out of the box (not to diminish that, it is a powerful feature and something that is super-complicated in AA to accomplish) is to join various datasets on one identical ID value. For example, if you have 2 datasets which both have fields that contain an Account ID, and there is a user with ID 123 in both, you can join the datasets on those fields and thus get a “more complete view of the customer journey”. But: You need to provide the same ID type across datasets, so if you have data where people use different identifiers or where the Account ID is not present in all rows, it gets complicated. As an example, think about typical Web Analytics use cases where most of the Events are usually anonymous and have merely a Cookie ID, but some Events have logged-in data. That Cookie ID is unlikely to be part of your CRM or customer support data, so when joining on the Account ID, most of the Web Analytics data would go arye. Luckily there are some ways to counter that, just keep reading… 😅
  2. In a recent project, the biggest surprise regarding CJA came when the client realized that all the User Stitching available in the Adobe Experience Platform (AEP) — the “Identity Graph” — cannot be leveraged in CJA. AEP and CJA users don’t live on different islands, but in different valleys, sort of. Adobe however seems to be close to building a tunnel to connect them. It likely means paying for another SKU however.
  3. CJA does offer some stitching, which you can activate via a request to Adobe Support. This stitching works for max 2 IDs and helps solving the Cookie ID and Account ID puzzle from above. “Only” 2 IDs I have to say, as that was the second surprise for said client, because they could cover only part of their actual customer journey with CJA which consists of data with CRM IDs, ECIDs, Email Hashes, and more User Identifiers. The stitching has a lookback of 1 or 7 days, which might be a bit short. Also, the User IDs cannot be in an “Identity Map” field (which is not the same as “Identity Graph”!). That was the third surprise because they loved the concept of the “weak-typed” Identity Map and used it for all their implementations. Instead, you need to have a dedicated schema field for it. But even when you have that, you need to maintain two schemas whose only difference lies in the User ID field…

Jake Winter masterfully summarized all these stitching challenges recently. He came to the conclusion that stitching best be done outside of CJA... So when ingesting data to CJA, you need to make sure it already has a shared identifier. Easier said than done, because this requires quite some data engineering power to accomplish. Most of all, this is not why I buy AEP/CJA, whose USP supposedly is to offer an interface that gives me more freedom from tedious IT or data engineering dependencies. As mentioned, Identity-Graph-based Stitching is supposed to come soon, Identity-Map-based stitching was also promised to be looked at, so let’s keep our fingers crossed. 🧐

9. Derived Field Instances

While you can produce most of the AA Marketing Channels logic (and quite some more) with the awesome “Derived Fields”, I would love to be able to replicate the important “Marketing Channel Instances” metric. It is the best approximation to “clickthroughs” from newsletters or ad campaigns and thus heavily used at all my clients. Unlike eVar Instances, it does not count “Repeat Instances” (so if the previous Hit had the same Channel value, it is not an Instance, i.e., somebody who reloads the landing page or clicks twice on an ad is not counted again). That makes it more useful than e.g. Tracking Code Instances.

Marketing Channel Instances are the best way to answer the question “how many clicks did my ad/newsletter get” (instead of how many Visits the ad/newsletter was persisted for).

10. Hit Depth, Visit Number and other beauty from the Visitor Profile

Adobe Analytics has something ancient and powerful that CJA does not have: The visitor profile (see Frederik Werner’s great post on it). Unlike CJA, Adobe Analytics knows, while processing Hits, what the user whose Hit it is processing has done before. So it knows whether it was the 10th Visit or the first, whether it was the 4th Hit in that Visit or the second, what the First Marketing Channel of that User was, if it was her first purchase or a later one. This stuff is useful in AA for all kinds of purposes; I e.g. use the Visit Number and Hit Depth extensively for debugging when I need to know what happened in which order (Flows are of limited use for this).

Note that some of that functionality can be achieved in CJA via Data View Configurations (e.g. Entry Dimensions via “First in Session”). Let’s hope there will be more of that soon.

My “Best-Of-CJA List”

That was quite a list. To close this out on a positive note, let me stress that despite these challenges, I am quite excited about CJA! Many of the issues mentioned are planned to be solved soon, and there is a lot of great stuff there already. Let me thus finish with a list of some of the goodies we get with CJA:

  1. Changes to variable settings have immediate impact, and retroactively! That’s huge if I e.g. think of the many cases that Marketing Channel settings were changed and the awful “x is valid only since y” type of confusion around it.
  2. A modern data model: I don’t like the hype about the supposedly superior GA4 data model (with signs of “superiority” like non-unique event timestamps, duplicate session IDs, etc.), so I am reluctant to praise a tool just for its data model. Still, I will use the data model as a clear highlight of CJA! Just look at how old-school and cryptic the AA model looks with its “eVars”, “props” and “Success Events” and its eye-sore syntax (s.products anyone?😆). Then compare that to the human-readable, logically structured and super-flexible way in which CJA handles data (see e.g. Werner’s form tracking example). Physically and mentally liberating…
  3. Unlimited dimensions, metrics, unique values etc.: “Low Traffic” goodbye — in practically all cases, that is… But, as Brian Watson from Adobe pointed out, “from a super-technical perspective, there are still actually limits in number of unique values in CJA. In CJA the limit on unique values isn’t actually a specific quantity but is a variable number of values based on bandwidth limits in the data center and the way the CJA Reporting Engine handles string values. A single data query can’t consume more than 2gb per second of data from the string subsystem to the compute nodes of the reporting engine so the actual number of uniques allowed is a function of the size of individual string values. If you have small strings you can have “practically unlimited” numbers of uniques but if you have lots of big fat string values then you will eventually hit the data transfer bandwidth limit of 2gb/second and the system will cap off the stream of individual values and bucket them in a similar Low Traffic type of bucket.” For more details, check out the thread in Measure Slack. Thank you, Brian!
  4. Built for use cases beyond web/app analytics: Anything that has a User ID and a Timestamp (or is an AEP Profile Attribute) can be leveraged in CJA. And did I mention that it is no problem to add historical data at any time?
  5. Derived Fields: Broken record alert, but that feature is really awesome.
  6. The wide range of variable settings in the Data Views: Want to use a Metric as a Dimension? Split a value with a delimiter into multiple rows? Extract only certain values and ignore the rest? Want to rename “Unspecified” or other values for a particular dimension? Turn parts of a URL into their own dimension (e.g. path, hostname etc.)? This and loads of other goodness is just a couple clicks away — really! That saves a lot of the typical AA workarounds.
  7. Full Table Export to Cloud Destinations: While Full Table Export needs to get more powerful (see above), getting CSV bulk exports to your favorite cloud destination warrants a shoutout as well. The interface is great (unlike the 2002-like DWH interface). It also makes me totally NOT miss the SFTP support of DWH! And did I mention it also supports Calculated Metrics?
  8. Being able to keep the Analysis Workspace interface: This is huge when it comes to onboarding your users. They don’t feel like having to learn a completely new tool, and Workspace was and still is the best Ad-hoc Analysis interface out there.
  9. Publishing audiences from CJA to the AEP Customer Profile: If you e.g. use AEP Real-Time CDPs, you can leverage audiences identified via CJA there (like the old Publishing of Segments to the Experience Cloud, but on steroids).
  10. The CJA Product Team: The Google Analytics 4 Product Team was visibly disconnected from their target audience, and I am not sure whether they will ever connect. That cannot be said about Adobe’s Analytics/CJA team. They are there to help and listen in the #adobe-cja channel on Measure Slack. Join us there to learn and improve the product together!

What stands out to you in CJA? What do you see differently? Share your thoughts in the comments!

Want to read my content right in your mailbox, without the Medium reading restrictions for non-paying users, immediately after I publish it? Subscribe! I will not use your contact for anything but this purpose.

--

--

Digital Analytics Expert. Owner of dim28.ch. Creator of the Adobe Analytics Component Manager for Google Sheets: https://bit.ly/component-manager