fct_order_attribution_signals is the customer-facing row-level table for custom attribution modeling, order-level traceability, and debugging. It keeps the winning traffic source and the supporting signal rows side by side so you can rebuild SourceMedium’s rules, inspect explicit overrides, and trace source hierarchy without dropping into raw staging models.
Use this table when you need to answer “why did this order end up attributed this way?” rather than “how much revenue did a channel get?” For aggregated attribution reporting, stay in the report and MTA tables.
What this table is for
- Trace every evidence row that SourceMedium considered for a single order.
- See the difference between raw captured values and canonicalized
sm_utm_*values. - Identify which traffic source won the primary ranking for each order.
- Inspect zero-party and discount-code context without leaving the order-grain workflow.
Current evidence model
evidence_type tells you what class of evidence you are looking at:
mta_first_touch and mta_last_touch use evidence_type = traffic_source_candidate, but they are supporting-context rows. They always have sm_utm_final_source_priority = NULL, and an order can have at most one row of each type when that order appears in MTA journey data.How primary traffic ranking works
SourceMedium keeps multiple traffic candidates on the order, then assigns a per-order rank insm_utm_final_source_priority.
1means “this was the winning primary traffic source for the order.”- Higher numbers are lower-ranked fallbacks kept for debugging.
NULLmeans the row is contextual rather than part of the primary traffic ranking.
shopify_custom_attribute_overrideshopify_landing_siteshopify_notewebsite_event_tracking_purchasegoogle_analytics_transactionshopify_order_referring_site_utms
The numeric priority values in the table are ordering signals, not a reusable source code system. Some numbers are skipped, so you might see values such as 1, 3, 4, 5, 7, and 8 instead of a compact 1..6 sequence. The relative ordering matters, not the specific numeric values.
Column guide
Identifiers
sm_order_attribution_signal_key: Stable key for the evidence row.sm_store_id: Customer-facing store identifier for tenant scoping.source_system: Commerce platform that produced the order record.sm_order_key: Stable SourceMedium order key for joins back to order-grain tables.order_id: Platform-native order id for stakeholder-friendly lookups.
Timestamps
order_processed_at: UTC order processed timestamp.order_processed_at_local_datetime: Reporting-timezone datetime for customer-facing analysis and date filters.
Evidence classification
evidence_type: Broad class of evidence, such astraffic_source_candidate,zero_party_candidate, ororder_discount_code.evidence_source: The specific capture mechanism or upstream source.evidence_row_id: Source-specific identifier that distinguishes one evidence record from another on the same order. Examples includeshopify_landing_site:1,ga4:2,segment_website_event_tracking:evt_123, an MTA touch id, or a normalized discount code such aswelcome10.
Canonicalized attribution fields
sm_utm_source,sm_utm_medium,sm_utm_campaign,sm_utm_content,sm_utm_term,sm_utm_id: Final normalized traffic fields for the row.sm_utm_source_medium: Canonical source / medium pair that usually makes debugging faster.sm_marketing_channel: Final channel grouping for traffic rows after normalization. See Channel Mapping if the final grouped value is what you need to debug.
Raw captured fields
raw_utm_source,raw_utm_medium,raw_utm_campaign,raw_utm_content,raw_utm_term,raw_utm_id: Values captured before inference or cleaning.raw_referrer,raw_landing_page_url,raw_referring_site: Supporting raw URL context that often explains(none)and(other)outcomes.
Inference metadata
sm_attribution_inference_method: Explains how SourceMedium derived the canonicalized values.sm_utm_final_source_priority: Per-order ordering among traffic candidates.1is the winner for that order.
Zero-party and discount signals
attribution_signal_raw: Raw non-traffic signal captured on the row.attribution_signal_parsed: Parsed or normalized version of that non-traffic signal.attribution_signal_type: Non-traffic signal category, currentlyzero_partyordiscount_code.
Inference methods you will see
sm_attribution_inference_method explains how SourceMedium produced the canonicalized fields on the row.
Common debugging workflows
Trace a single order
Use this when a stakeholder asks “show me everything SourceMedium knew about this order.”Why did this order become (none) or (other)?
Start with the priority-1 traffic row, then compare the raw captured fields against the canonicalized fields and the final channel mapping.
Which evidence source usually wins?
This is the fastest way to understand which capture mechanism is actually driving the primary traffic winner for a store.What non-traffic signals exist for this order?
Use this to separate survey, tag, and discount-code context from the primary traffic ranking.Related workflows
Attribution Source Hierarchy
Learn how SourceMedium orders the traffic candidates that feed this signals table.
MTA Models Reference
See how row-level order auditing complements purchase-journey and MTA reporting.
Attribution Health
Move from a store-level attribution-health alert into order-level debugging.
dim_orders
Join back to order-level attributes once you identify the evidence row you care about.

