WITH
previous_events_cte AS (
SELECT
pot.customer_id AS customer_id,
argMax(pot.event_date, pot.event_date) AS previous_event_date,
arrayStringConcat(arrayDistinct(groupArray(pot.channel)), ', ') AS previous_channel
FROM
pixel_orders_table AS pot
WHERE
pot.model = 'Triple Attribution'
AND pot.attribution_window = '7_days'
AND pot.event_date < CURRENT_DATE() - 60
GROUP BY
pot.customer_id
),
orders AS (
SELECT
pot.order_id AS order_id,
pot.campaign_name AS campaign_name,
pot.event_date AS event_date,
COALESCE(pot.order_revenue, 0) AS order_revenue,
pot.is_new_customer AS is_new_customer,
pot.channel AS channel,
CASE
WHEN pot.is_new_customer = false AND pe.previous_event_date IS NOT NULL THEN dateDiff('day', pe.previous_event_date, pot.event_date)
ELSE NULL
END AS days_since_previous_event,
CASE
WHEN pot.is_new_customer = true THEN 'new'
WHEN pot.is_new_customer = false AND pe.previous_event_date IS NOT NULL AND dateDiff('day', pe.previous_event_date, pot.event_date) >= 365 THEN 'reactivated_365'
END AS revised_customer_type,
pot.customer_id AS customer_id,
pe.previous_event_date AS previous_event_date,
pe.previous_channel AS previous_channel
FROM
pixel_orders_table AS pot
LEFT JOIN previous_events_cte AS pe ON pot.customer_id = pe.customer_id
WHERE
pot.model = 'Triple Attribution'
AND pot.attribution_window = '7_days'
AND pot.channel = 'applovin'
AND pot.event_date BETWEEN CURRENT_DATE() - 60 AND CURRENT_DATE() - 1
),
spend AS (
SELECT
pjt.event_date AS date,
pjt.campaign_name AS campaign_name,
SUM(pjt.spend) AS spend
FROM
pixel_joined_tvf AS pjt
WHERE
pjt.model = 'Triple Attribution'
AND pjt.event_date BETWEEN CURRENT_DATE() - 60 AND CURRENT_DATE() - 1
AND pjt.attribution_window = '7_days'
AND pjt.channel IN ('applovin')
GROUP BY
pjt.event_date,
pjt.campaign_name
),
reactivated AS (
SELECT
event_date,
campaign_name,
s.spend AS spend,
COUNT(order_id) AS total_transaction,
SUM(CASE WHEN is_new_customer = true THEN 1 ELSE 0 END) AS new_transaction,
SUM(CASE WHEN is_new_customer = false THEN 1 ELSE 0 END) AS return_transaction,
SUM(CASE WHEN revised_customer_type = 'reactivated_365' THEN 1 ELSE 0 END) AS reactivated_365,
SUM(order_revenue) AS total_rev,
SUM(CASE WHEN is_new_customer = true THEN order_revenue ELSE 0 END) AS new_rev,
SUM(CASE WHEN revised_customer_type = 'reactivated_365' THEN order_revenue ELSE 0 END) AS reactivated_365_rev
FROM orders o
JOIN spend s ON s.date = o.event_date AND s.campaign_name = o.campaign_name
WHERE s.spend > 300
GROUP BY
event_date,
campaign_name,
s.spend
ORDER BY event_date DESC
)
SELECT
event_date,
campaign_name,
spend,
total_rev / spend AS "Reported ROAS",
new_rev / spend AS "Reported NC ROAS",
(new_rev + reactivated_365_rev) / spend AS "NC + 365D Reactived ROAS",
'' AS " ",
CONCAT(ROUND(new_transaction / total_transaction * 100, 1), '%') AS "1st time customer % of total",
CONCAT(ROUND(reactivated_365 / total_transaction * 100, 1), '%') AS "Reactivated (no purchase for 365D+)",
CONCAT(ROUND((new_transaction + reactivated_365) / total_transaction * 100, 1), '%') AS "1st time + Reactivated (365D+)"
FROM reactivated;