Resolution Type
Also known as: Resolution Code, Ticket Resolution, Case Resolution, Disposition Code, Closure Code
Case-closure code the agent records when a support ticket is solved: refund, replacement, exchange, store credit, information provided or no action. One value per ticket.
Business Use Case
1️⃣ Support lead: if refund share of solved tickets rises week on week, audit agent refund decisions against policy. 2️⃣ Finance: each month, reconcile refund and store_credit tickets against refunds issued to catch unlogged concessions. 3️⃣ Support ops: when information_provided dominates a contact reason, publish a help article to deflect it. 4️⃣ Merchandising: review replacement tickets by SKU monthly and raise defect-prone products with the supplier.
Business Criticality
High
Journey / Navigation Area
Generic
Owning Function
Customer Service
Scope
Event
Calculation Notes
1️⃣ Values: refund, replacement, exchange, store_credit, information_provided, no_action, other; a solved ticket with no code reports as unknown. 2️⃣ Set only once ticket status reaches solved or closed; tickets never solved or closed carry null, never unknown. 3️⃣ Last value wins: a reopened ticket keeps its prior code until re-solved, then reports the code at the latest solve timestamp. 4️⃣ Merged, spam and duplicate tickets are excluded; the surviving ticket of a merge carries the resolution. 5️⃣ Multiple remedies on one ticket take the first in precedence: refund, replacement, exchange, store_credit, information_provided, no_action. 6️⃣ Distinct from Refund Type (how money goes back) and Return Reason (why the item came back): this is the remedy that closed the case. 7️⃣ Helpdesk codes (Zendesk, Salesforce Service Cloud, Gorgias) map to this list via one governed lookup; free-text notes are never parsed.
Technical Details
Events
SQL Queries
Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
DECLARE start_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);
DECLARE end_date DATE DEFAULT CURRENT_DATE();
-- Tickets opened in the window, excluding merged-away, spam and duplicate tickets
WITH tickets AS (
SELECT ticket_id, source_system
FROM `your-project.crm.support_tickets`
WHERE DATE(created_at) BETWEEN start_date AND end_date
AND merged_into_ticket_id IS NULL
AND NOT is_spam
AND NOT is_duplicate
),
-- One code per ticket: latest solve/close wins, then remedy precedence, mapped via the governed lookup
resolved AS (
SELECT
s.ticket_id,
COALESCE(l.resolution_type, 'unknown') AS resolution_type
FROM `your-project.crm.ticket_solve_events` AS s
JOIN tickets AS t USING (ticket_id)
LEFT JOIN `your-project.crm.resolution_code_lookup` AS l
ON l.source_system = t.source_system AND l.source_code = s.resolution_code
WHERE s.status IN ('solved', 'closed')
QUALIFY ROW_NUMBER() OVER (
PARTITION BY s.ticket_id
ORDER BY s.solved_at DESC,
CASE l.resolution_type
WHEN 'refund' THEN 1 WHEN 'replacement' THEN 2 WHEN 'exchange' THEN 3
WHEN 'store_credit' THEN 4 WHEN 'information_provided' THEN 5 WHEN 'no_action' THEN 6
WHEN 'other' THEN 7 ELSE 8 END
) = 1
)
-- Resolution type per ticket; tickets never solved or closed carry null
SELECT t.ticket_id, r.resolution_type
FROM tickets AS t
LEFT JOIN resolved AS r USING (ticket_id);Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Relative reporting window: last 90 days
WITH params AS (
SELECT DATE_SUB(CURRENT_DATE(), 90) AS start_date, CURRENT_DATE() AS end_date
),
-- Tickets opened in the window, excluding merged-away, spam and duplicate tickets
tickets AS (
SELECT st.ticket_id, st.source_system
FROM crm_support_tickets AS st
CROSS JOIN params AS p
WHERE TO_DATE(st.created_at) BETWEEN p.start_date AND p.end_date
AND st.merged_into_ticket_id IS NULL
AND NOT st.is_spam
AND NOT st.is_duplicate
),
-- One code per ticket: latest solve/close wins, then remedy precedence, mapped via the governed lookup
resolved AS (
SELECT ticket_id, resolution_type
FROM (
SELECT
s.ticket_id,
COALESCE(l.resolution_type, 'unknown') AS resolution_type,
ROW_NUMBER() OVER (
PARTITION BY s.ticket_id
ORDER BY s.solved_at DESC,
CASE l.resolution_type
WHEN 'refund' THEN 1 WHEN 'replacement' THEN 2 WHEN 'exchange' THEN 3
WHEN 'store_credit' THEN 4 WHEN 'information_provided' THEN 5 WHEN 'no_action' THEN 6
WHEN 'other' THEN 7 ELSE 8 END
) AS rn
FROM crm_ticket_solve_events AS s
JOIN tickets AS t ON t.ticket_id = s.ticket_id
LEFT JOIN crm_resolution_code_lookup AS l
ON l.source_system = t.source_system AND l.source_code = s.resolution_code
WHERE s.status IN ('solved', 'closed')
) AS ranked
WHERE rn = 1
)
-- Resolution type per ticket; tickets never solved or closed carry null
SELECT t.ticket_id, r.resolution_type
FROM tickets AS t
LEFT JOIN resolved AS r ON r.ticket_id = t.ticket_id;Source Data
CRM
Dependencies
Prerequisite: List the dependencies required for this Dimension
Dimensions:
Report Attributes
Support Channel Return Reason Agent / Team Ticket Priority Item Category
Segment Eligibility
true
Governance
Governance
GitHub
catalog/dimensions/resolution-type.yml