CJA vs Adobe Analytics for implementers

last verified · against Adobe CJA / Adobe Analytics comparison docs as of 2026-07

CJA vs Adobe Analytics for implementers: report-time processing on AEP datasets, XDM instead of eVars and props, connections, data views, and identity stitching.

What this is

Customer Journey Analytics (CJA) processes data at report time from Adobe Experience Platform (AEP) datasets, where classic Adobe Analytics processes data at collect time into report suites. This reference maps the concepts, limits, and identity mechanics an implementer must translate: eVars/props/events to XDM schema fields, report suites to connections and data views, and visitor identity to Person ID and stitching.

Model and processing

Aspect Adobe Analytics (classic) Customer Journey Analytics
Processing time Collect-time (most processing runs immediately after collection) Report-time on already-stored data
Data store Report suites; collected in-solution via AppMeasurement / tags AEP datasets
Unit of analysis Visitors / Visits / Hits Persons / Sessions / Events (renamable)
Custom variables eVars, props, events Do not exist; XDM schema fields define dimensions and metrics
Variable limits 250 eVars, 75 props, 1,000 events per report suite Unlimited dimensions and metrics; no cardinality caps
Value length eVar 255 bytes, prop 100 bytes No equivalent byte cap stated
High cardinality Low-Traffic bucketing at 2,000,000 (low) / 2,100,000 (high) uniques per suite per calendar month, monthly reset All unique values retained at full granularity; no Low-Traffic
Persistence eVar persists (default last allocation, visit-level expiry); props do not persist Data view persistence settings, 90-day max
Reporting container Report suites / virtual report suites Data views (up to 5,000 metrics + 5,000 dimensions each)
Ingest / report logic Processing rules + VISTA Data Prep (ingest-time) + Derived Fields (report-time, retroactive)
Classifications Classifications + Classification Rule Builder Lookup Datasets (Analytics Classifications Connector) + report-time substrings
Bulk export Data Warehouse; Data Feeds Full Table Export; Data Access API / Destinations (no post-process columns)
Identity Adobe Analytics ID (AAID), via the Analytics source connector Schema-defined Person ID / ECID
SQL access None Data Distiller (SQL)
Data scope Web / mobile; single or merged report suites All XDM data types; merges multiple report suites and datasets

Reporting-surface renames

The terms an implementer meets first when rebuilding reports.

Adobe Analytics Customer Journey Analytics
Visitors People
Visits Sessions
Hits Events
Virtual report suites Data views
Segments Segments (called “Filters” in earlier CJA)
Calendar Events Annotations
Entries / Exits Session Starts / Ends (calculated differently)
eVars / props / events XDM fields projected into data-view components

Classic Adobe Analytics limits (for reference)

Item Value
eVars per report suite 250 (eVar1..eVar250, query-string v1..v250)
props per report suite 75
Success / custom events per report suite 1,000
eVar value length 255 bytes
prop value length 100 bytes
eVar reporting column Persistent post_evar
eVar default behavior Persistence beyond the hit, last allocation, visit-level expiry
prop default behavior No persistence
Low-Traffic thresholds 2,000,000 low / 2,100,000 high uniques per suite per month; global reset each calendar month

The comparison page restates the 75 props / 250 eVars figures but not the 1,000-event limit; the 1,000-event figure comes from Adobe’s product description. Confirm contract-specific limits before quoting. Low-Traffic thresholds are adjustable and were historically 500,000 — treat the numbers as account- and dimension-specific.

Connection and datasets

A CJA connection defines which AEP datasets are ingested.

Item Value
Datasets per connection Up to 100
Foundation package 1 event dataset + up to 99 profile / lookup / summary datasets
Event dataset Time-series (e.g. web visits, transactions)
Profile dataset CRM data about persons
Lookup dataset Reference / enrichment
Summary dataset Aggregated
Sandbox Must select the AEP sandbox that contains the datasets
Person ID Chosen from the identities defined in each dataset’s XDM schema
Person ID case Case sensitive (abc123 and ABC123 are different values)
Row with no Person ID The event record is skipped entirely
Merge behavior Each dataset’s Person ID column merges into a single Person ID column, regardless of name
Same person Matching Person ID across datasets
Same session Matching Person ID with timestamps within 30 minutes
Event resolution By timestamp to millisecond precision

Data views

Data views are the CJA equivalent of virtual report suites and become the report-time governance surface.

Capability Detail
Capacity Up to 5,000 metrics and 5,000 dimensions per data view
One XDM field to many components Create both a metric and a dimension from a single field
Multiple metrics from one field Different attribution models or lookback windows
Configuration Custom component IDs, metric formatting / currency, session length, persistence, attribution defaults, included / excluded values
Nature Report-time and non-destructive
Persistence Data-view setting, 90-day max
Attribution default Same Touch for dimensions (Adobe Analytics commonly used Last Touch)

Migration mapping (feature to implementation)

Adobe Analytics feature CJA implementation
Processing rules / VISTA Data Prep (ingest-time) + Derived Fields (report-time, applied retroactively)
Classifications Lookup Datasets (importable via the Analytics Classifications Connector)
Classification Rule Builder Report-time string manipulation (substrings)
Data Warehouse Full Table Export
Data Feeds Experience Platform Data Access API and Destinations (no post-process columns)
Marketing Channels (Web SDK data) Derived Fields
Marketing Channels (source-connector data) Flows from Analytics

None of these carry over automatically; each is manual migration work.

Identity and stitching

Item Value
ECID Generated by the Edge Network; identifies a device, not a person
ECID cookie First-party kndctr_ cookie (set whether first-party or third-party collection is used)
identityMap Carries additional identifiers (CRM IDs, hashed emails) alongside the ECID
Primary identity Designate a person-level namespace as primary when available
Client retrieval getIdentity command returns the ECID; ECID can also be mapped to custom XDM fields via Data Prep
Stitching Graph-based (GBS) Field-based (FBS)
When Identity Service / identity graph is available Standalone CJA, no Identity Service access
Persistent ID Device / cookie ID (e.g. ECID), present on every row Present on every row
Person ID Stable ID from a chosen namespace, present on some rows On some rows; single namespace only
Resolution Queries the AEP Identity Service identity graph Field rekey, no graph
Passes Live (each event as collected) + Replay (lookback: daily 24-hour, weekly, biweekly, or monthly) Single-step rekeying only (no multi-hop)
Tie-break Lexicographically first ID / namespace when multiple primary identities exist Case-sensitive matching; cannot combine / concatenate fields
Fallback Persistent ID used when the person-ID lookup fails
Hard limit Max 50,000 user transitions per device before stitching halts

Web SDK and datastream

Item Value
Payload: XDM object Conforms to an XDM schema (optionally the Adobe Analytics ExperienceEvent field group); the Edge Network translates it into an Adobe Analytics format
Payload: data object Geared to existing AppMeasurement implementations for easier migration
Payload: context data Unmapped fields, then mapped to Analytics variables via Processing rules
Datastream Server-side SDK config referenced by datastreamId; fans out to AEP, Adobe Analytics, Target, Audience Manager, event forwarding, edge destinations; changeable without touching site code
Default edgeDomain edge.adobedc.net
First-party edgeDomain A subdomain of data.adobedc.net via CNAME (e.g. example.data.adobedc.net using the IMS / Tenant value), or a customer-owned domain under the Adobe-managed certificate program

Schema design (durable fields, not slots)

Do Avoid
Model stable, self-describing fields (search.term, content.category, user.membershipTier) Recreating eVar1..eVar250 / prop1..prop75 numbered slots
Store each value once Locking a CJA-bound schema into the Adobe Analytics ExperienceEvent field group
Create many components (dimensions / metrics) from one XDM field in data views Baking attribution / persistence into the schema
Apply attribution, lookback, and persistence at the data-view level
Use standardized field groups where they fit; extend with custom fields

Adobe advises against numbered slots but publishes no single prescriptive eVarX to XDM field-path mapping; any concrete mapping is an implementer choice, not an Adobe-specified rule.

Feature support notes

Area Status in CJA
Custom session length Set in Data View Session Settings
New vs Repeat Sessions 13-month lookback
Metric deduplication Person or session level; dedup IDs are not applied automatically and must be configured explicitly for conversion events
Alerts Daily / weekly / monthly only (no hourly)
Not supported Activity Map, Contribution Analysis, Triggers, People metric via Cross-Device Coop, Segment Comparison, A4T panels

Support status is a moving target; re-check the live comparison page at build time.

Gotchas

  1. Person counts drop and events silently vanish — cause: the Person ID must come from a schema identity, and any event row with no value for it is skipped; casing splits one person into many (abc123 != ABC123) — fix: carry a value on every row (use ECID as the always-present primary identity), normalize casing before ingestion, and stitch to backfill person IDs rather than dropping anonymous rows.
  2. Conversion events double-count — cause: CJA deduplicates at the person or session level, and dedup IDs are not applied automatically — fix: configure deduplication IDs for conversion metrics in the data view and validate at the intended level before trusting the numbers.
  3. Attribution differs from the old reports — cause: CJA defaults dimensions to Same Touch, whereas Adobe Analytics commonly relied on Last Touch (eVar last-allocation), and attribution now lives in the data view — fix: set attribution model, lookback, and persistence per component in the data view (persistence 90-day max) to match intended behavior.
  4. A field was ingested with the wrong data type — cause: XDM schema is mandatory before ingestion, and once a dataset is populated with a wrong field type it must be deleted and recreated — fix: design and validate schema field types up front; use Data Prep to cast / validate on ingestion and treat type choices as hard to reverse.
  5. Processing rules, VISTA, bot rules, and classifications did not carry over — cause: none are replicated automatically — fix: rebuild ingest logic in Data Prep, report-time logic in Derived Fields, classifications as Lookup Datasets, and Marketing Channels via Derived Fields for Web SDK data.
  6. Calculated metrics and segments are missing — cause: calculated metrics are not auto-ported and segments (earlier called “Filters”) must be rebuilt against XDM fields, not eVars / props / events — fix: recreate them against data-view components; expect manual work, not a lift-and-shift.
  7. High-cardinality dimensions explode — cause: Adobe Analytics buckets values over roughly 2,000,000 uniques per month as Low-Traffic; CJA applies no bucketing and keeps every unique value — fix: use Derived Fields to normalize / trim values (e.g. strip query strings) and design data views and filters for full cardinality.
  8. Stitching links to the wrong person — cause: graph-based matching is timestamp-agnostic and picks the lexicographically first namespace on multi-identity or shared-device rows; field-based supports only single-step rekeying and halts after 50,000 transitions per device — fix: validate with the CJA stitching tooling, keep the person ID to a single namespace, set namespace priorities where supported, and account for the per-device transition cap.
  9. A fresh Web SDK schema on the Analytics field group makes later CJA migration painful — cause: the Adobe Analytics ExperienceEvent field group recreates numbered eVar / prop slots inside XDM — fix: for CJA-bound builds, model durable fields (search.term, content.category) and populate any Analytics variables you still need via datastream mapping or Derived Fields.

Quick recipes

Configure the datastream with a first-party edge domain:

configure-first-party.js
alloy("configure", {
datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
// default is edge.adobedc.net; a first-party CNAME reduces ad-blocker
// interference and keeps the kndctr_ ECID cookie first-party
edgeDomain: "example.data.adobedc.net"
});

Send durable, self-describing XDM fields instead of numbered slots:

send-durable-xdm.js
// Model each value once; data views project it into many components.
// Custom fields live under your tenant namespace in the schema.
alloy("sendEvent", {
xdm: {
search: { term: "running shoes" },
content: { category: "footwear" },
user: { membershipTier: "gold" }
}
});

Carry a persistent ID on every row plus a person ID on some rows (for stitching):

stitching-identity.js
// ECID (persistent, device-level) is added automatically on every row.
// Add a single-namespace person ID on authenticated rows as the primary
// identity so anonymous-then-authenticated journeys resolve to one person.
alloy("sendEvent", {
xdm: {
identityMap: {
CRMID: [{ id: "crm-000123", authenticatedState: "authenticated", primary: true }]
},
web: { webPageDetails: { name: "account:home" } }
}
});

Retrieve the ECID client-side:

get-ecid.js
alloy("getIdentity").then(function (result) {
// ECID identifies a device, stored in the first-party kndctr_ cookie
console.log(result.identity.ECID);
});

Normalize casing before a value becomes a Person ID:

normalize-person-id.js
// Person ID matching is case sensitive: abc123 and ABC123 do not merge.
// Apply one consistent rule before the value enters CJA.
var email = rawEmail.trim().toLowerCase(); // e.g. before hashing
var crmId = rawCrmId.trim(); // keep casing rule stable
// then set the value on identityMap for the chosen namespace

Sources

Adobe Experience League pages these values were read from:

Flagged rather than guessed: the 1,000-event limit is from Adobe’s product description, not the comparison page; the Low-Traffic thresholds are adjustable (historically 500,000); the 90-day data-view persistence maximum and the AEP Identity Service guardrails were not each re-verified on a dedicated reference page; and there is no official one-to-one eVarX to XDM field-path mapping.

Changelog

  • — Initial version, verified against official documentation.

dataLayer

0 events · 0 sent

    • home /
      writing /writing
      guides /guides
      work /#work
      about /about
      colophon /colophon
      toggle analyst mode ctrl+.
      print session receipt /#receipt