Skip to main content

Output tables

The module produces two intermediate touchpoint tables, two core tables (journeys and models), and six reports. Journeys, models and reports materialize in your outputs dataset (superform_outputs_*); the intermediate touchpoint tables materialize in the transformations dataset (superform_transformations_*).

Intermediate touchpoints

You normally consume the journeys table and the reports, not these. Only one is built, depending on touchpoint.mode.

TableGranularityPurpose
int_ga4_attribution_touchpoints_sessionOne row per traffic touch (one per ga4_sessions row) plus one row per matched conversion eventThe flat touchpoint stream in session mode.
int_ga4_attribution_touchpoints_source_changeOne row per intra-session source run plus one row per matched conversion eventThe flat touchpoint stream in source_change mode.

ga4_attribution_journeys

Granularity: one row per user journey (journey_id), from first touch to its closing conversion or boundary. Traffic and conversion touches are stored as nested arrays.

ColumnDescription
journey_idUnique ID - `FARM_FINGERPRINT(user_identifier
user_identifierIdentity key value (user_pseudo_id by default, else journey.user_identifier coalesced to user_pseudo_id).
user_identifier_typeName of the identity-key column (e.g. user_pseudo_id).
journey_number0-based sequence of this journey in the user's history.
journey_start_dateDate of the first touch (partition column).
journey_start_timestamp_utcUTC timestamp of the first touch.
journey_end_dateDate of the last touch.
journey_length_daysElapsed days, first to last touch.
days_to_conversionDays from first touch to the closing conversion; NULL for ongoing/lapsed journeys.
user_pseudo_idsDistinct user_pseudo_id values in the journey.
device_categoriesDistinct device categories across traffic touches.
default_channel_groupsDistinct default channel groups across traffic touches.
ends_in_saleTRUE if the journey has a closing conversion.
journey_length_stepsNumber of traffic (non-conversion) touches.
revenueRevenue across ALL conversion touches (closing + micro). Does not reconcile to models.attributed_revenue (closing only) - use closing_revenue for that.
closing_conversion_countClosing conversion touches (0 or 1 by construction).
micro_conversion_countNon-closing (micro) conversion touches.
closing_revenueRevenue from closing conversions only (0 when none).
micro_revenueRevenue from non-closing (micro) conversions (0 when none).
closing_conversion_dateClosing conversion date; NULL for ongoing/lapsed. Reports use this as conversion_date.
closing_conversion_nameClosing conversion name; NULL for ongoing/lapsed.
touchesArray of traffic touches, chronological (empty for a zero-touch conversion). Per-touch fields: touch_start_time, touch_id, session_id, user_pseudo_id, device_category, source, medium, campaign, default_channel_group.
conversionsArray of conversion touches (closing + non-closing), chronological. Per-conversion fields: touch_start_time, event_id, session_id, user_pseudo_id, conversion_name, revenue, is_closing.
is_ongoingTRUE if no boundary closed the journey (still accumulating).
is_finalData-freshness flag - TRUE once all touches are past the 72h late-data window.

ga4_attribution_models

Granularity: one row per credited traffic touch × model × closing conversion, aggregated to touch_date × conversion_date × closing_conversion_name × model_name × channel dimensions. Additive - see Attribution models.

ColumnDescription
touch_dateDate of the credited traffic touch (partition column).
conversion_dateDate of the closing conversion the credit is for.
closing_conversion_nameClosing conversion name - segment by conversion type ('(no touchpoint)' on the synthetic zero-touch row).
model_nameAttribution model. participation overcounts - compare fractional models only.
source / medium / campaign / default_channel_group / device_categoryChannel dimensions of the touch ('(no touchpoint)' for a zero-touch journey).
attributed_revenueClosing revenue apportioned to this touch (additive). SUM reconciles to closing revenue per fractional model; participation overcounts.
attributed_conversionsShare of the closing conversion on this touch (fractional for standard models, 1.0 each for participation; additive).
credited_touchesCredited touch-rows at this grain (pre-aggregation, not distinct touch_ids). position_based with 2 touches (no middle) renormalizes to 50/50.

Reports

All six reports are additive and partitioned on journey_start_date. They derive from the journeys table; store counts and SUM numerators, and compute rates/averages in BI (see Additivity).

ga4_attribution_channel_chain_report

Granularity: one row per journey_start_date × conversion_date × channel_chain × closing_conversion_name. The full ordered channel path and its outcomes.

ColumnDescription
channel_chainThe path - ordered >-delimited channels; part of the grain.
path_lengthChannels in the path (constant per channel_chain).
path_length_bucketpath_length bucketed: 1, 2, 3, 4-5, 6+.
first_channel / last_channelFirst / last channel in the path.
num_distinct_channelsDistinct channels in the path (path_length counts repeats; this does not).
journeysJourneys on this path (additive).
closed_journeys / ongoing_journeys / lapsed_journeysJourneys that closed / still open / closed without a sale.
no_touch_journeysJourneys with zero traffic touches (chain = '(no touchpoint)').
sum_traffic_touchesSUM of traffic touches (additive).
total_conversion_countSUM of all conversion touches, closing + micro (additive).
closing_conversion_count / micro_conversion_countSUM of closing / non-closing conversions.
total_revenue / micro_revenueSUM of closing-conversion / micro-conversion revenue.
sum_journey_length_daysSUM of journey length in days.
sum_days_to_conversionSUM of first-touch-to-conversion days, closed journeys.

ga4_attribution_journey_summary_report

Granularity: one row per journey_start_date × conversion_date × path_length × closing_conversion_name. Journey metrics by path length.

ColumnDescription
path_lengthChannels in the path (the grain; raw integer - bucket in BI).
path_length_bucketConvenience bucket over path_length (1, 2, 3, 4-5, 6+); descriptor, not grain.
journeysJourneys at this path length (additive).
closed_journeys / ongoing_journeys / lapsed_journeysconversion_rate = closed_journeys / journeys.
no_touch_journeysZero-traffic-touch journeys (fall in path_length 1).
total_conversion_count / closing_conversion_count / micro_conversion_countAdditive conversion counts.
total_revenue / micro_revenueSUM of closing / micro revenue.
sum_journey_length_days / sum_days_to_conversionAdditive day sums for derived averages.

ga4_attribution_channel_assist_report

Granularity: one row per journey_start_date × conversion_date × channel × closing_conversion_name. Per-channel participation and assist - an influence view (values double-count across the channels of a journey; for credit use the models table).

ColumnDescription
channelThe participating channel (a value of the configured journey.channel_grouping).
journeys_participatedJourneys whose path includes this channel (any position; once per journey, overlaps across channels).
journeys_as_first / journeys_as_lastJourneys where this channel is first / last (the closing channel).
journeys_assistedJourneys where this channel participated but was not the closing channel.
closed_journeys_participated / _as_first / _as_last / _assistedThe same four counts restricted to closing journeys.
participated_revenueClosing revenue of journeys this channel participated in (influence, not credit).
assisted_revenueClosing revenue of journeys this channel assisted (not the closing channel).
micro_conversion_count / micro_revenue / closing_conversion_countConversions/revenue in journeys this channel participated in (influence; double-counts).

ga4_attribution_channel_transition_report

Granularity: one row per journey_start_date × conversion_date × from_channel × to_channel. Sankey/flow edges between consecutive channels.

ColumnDescription
from_channelSource node - a channel, or '(start)'.
to_channelDestination node - a channel, or a terminal node: '(conversion: <name>)' if closed, else '(no conversion)'.
transitionsTimes this consecutive pair occurs (edge weight; repeats within a journey counted).
closed_transitionsTransitions within journeys that ended in a closing conversion.
journeys_with_transitionDistinct journeys containing this edge (vs transitions, which counts repeats).
closed_journeys_with_transitionDistinct closing journeys containing this edge.

ga4_attribution_conversion_lag_report

Granularity: one row per journey_start_date × conversion_date × closing_conversion_name × lag_bucket (closed journeys only). Time-to-conversion distribution.

ColumnDescription
lag_bucketdays_to_conversion bucketed: 0 (same day), 1 day, 2-7 days, 8-30 days, 31+ days (the grain).
lag_bucket_orderInteger sort key (1-5) for chronological chart ordering.
closed_journeysClosing journeys in this bucket.
closing_conversion_countSUM of closing conversions in this bucket (= closed_journeys when one closing per journey).
revenueSUM of closing-conversion revenue in this bucket.
sum_days_to_conversionSUM of first-touch-to-closing days (additive).

ga4_attribution_micro_conversion_report

Granularity: one row per journey_start_date × conversion_name, where conversion_name is a micro-conversion (a conversions[] entry not in journey.closing_conversions). Micro-conversion volume and its lift on final outcomes.

ColumnDescription
conversion_nameThe micro-conversion (the grain).
event_countOccurrences of this micro-conversion (additive).
event_revenueRevenue on this micro-conversion's own touches (additive).
journeys_withJourneys containing this micro-conversion. conv_rate_with = closed_journeys_with / journeys_with.
closed_journeys_withJourneys with this micro-conversion that reached a closing conversion - compare conv_rate_with to the overall rate for lift.
closing_conversion_count_withClosing conversions in journeys containing this micro-conversion (additive).
closing_revenue_withClosing revenue of journeys containing this micro-conversion (final outcome, not the micro's own revenue). Summing across conversion_name double-counts a journey.