From 5280fb4310ff89c4955a7b9e46283cfe022d16b1 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Tue, 15 Apr 2025 15:58:49 -0700 Subject: [PATCH] optimize attribution report --- .../(main)/reports/create/ReportTemplates.tsx | 15 +++++---- src/queries/sql/reports/getAttribution.ts | 33 +++++++++++-------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/app/(main)/reports/create/ReportTemplates.tsx b/src/app/(main)/reports/create/ReportTemplates.tsx index 9b4e2117..292b7322 100644 --- a/src/app/(main)/reports/create/ReportTemplates.tsx +++ b/src/app/(main)/reports/create/ReportTemplates.tsx @@ -1,10 +1,11 @@ import Funnel from '@/assets/funnel.svg'; +import Money from '@/assets/money.svg'; import Lightbulb from '@/assets/lightbulb.svg'; import Magnet from '@/assets/magnet.svg'; -import Money from '@/assets/money.svg'; import Path from '@/assets/path.svg'; import Tag from '@/assets/tag.svg'; import Target from '@/assets/target.svg'; +import Network from '@/assets/network.svg'; import { useMessages, useTeamUrl } from '@/components/hooks'; import PageHeader from '@/components/layout/PageHeader'; import Link from 'next/link'; @@ -58,12 +59,12 @@ export function ReportTemplates({ showHeader = true }: { showHeader?: boolean }) url: renderTeamUrl('/reports/revenue'), icon: , }, - // { - // title: formatMessage(labels.attribution), - // description: formatMessage(labels.attributionDescription), - // url: renderTeamUrl('/reports/attribution'), - // icon: , - // }, + { + title: formatMessage(labels.attribution), + description: formatMessage(labels.attributionDescription), + url: renderTeamUrl('/reports/attribution'), + icon: , + }, ]; return ( diff --git a/src/queries/sql/reports/getAttribution.ts b/src/queries/sql/reports/getAttribution.ts index 62ad068a..b35d5090 100644 --- a/src/queries/sql/reports/getAttribution.ts +++ b/src/queries/sql/reports/getAttribution.ts @@ -261,13 +261,14 @@ async function clickhouseQuery( select we.${utmColumn} name, ${currency ? 'sum(e.value)' : 'uniqExact(we.session_id)'} value - from events e - join model m - on m.session_id = e.session_id + from model m join website_event we on we.created_at = m.created_at and we.session_id = m.session_id - ${currency ? '' : `where we.${utmColumn} != ''`} + ${currency ? 'join events e on e.session_id = m.session_id' : ''} + where we.website_id = {websiteId:UUID} + and we.created_at between {startDate:DateTime64} and {endDate:DateTime64} + ${currency ? '' : `and we.${utmColumn} != ''`} group by 1 order by 2 desc limit 20`; @@ -311,6 +312,8 @@ async function clickhouseQuery( from events e join website_event we on we.session_id = e.session_id + where we.website_id = {websiteId:UUID} + and we.created_at between {startDate:DateTime64} and {endDate:DateTime64} group by e.session_id)` : `\n model AS (select e.session_id, @@ -318,7 +321,9 @@ async function clickhouseQuery( from events e join website_event we on we.session_id = e.session_id - where we.created_at < e.max_dt + where we.website_id = {websiteId:UUID} + and we.created_at between {startDate:DateTime64} and {endDate:DateTime64} + and we.created_at < e.max_dt group by e.session_id)`; } @@ -333,16 +338,17 @@ async function clickhouseQuery( ${getModelQuery(model)} select we.referrer_domain name, ${currency ? 'sum(e.value)' : 'uniqExact(we.session_id)'} value - from events e - join model m - on m.session_id = e.session_id + from model m join website_event we on we.created_at = m.created_at and we.session_id = m.session_id + ${currency ? 'join events e on e.session_id = m.session_id' : ''} + where we.website_id = {websiteId:UUID} + and we.created_at between {startDate:DateTime64} and {endDate:DateTime64} ${ currency ? '' - : `where referrer_domain != hostname + : `and we.referrer_domain != hostname and we.referrer_domain != ''` } group by 1 @@ -368,13 +374,14 @@ async function clickhouseQuery( li_fat_id != '', ' LinkedIn Ads', twclid != '', 'Twitter Ads (X)','') name, ${currency ? 'sum(e.value)' : 'uniqExact(we.session_id)'} value - from events e - join model m - on m.session_id = e.session_id + from model m join website_event we on we.created_at = m.created_at and we.session_id = m.session_id - ${currency ? '' : `WHERE name != ''`} + ${currency ? 'join events e on e.session_id = m.session_id' : ''} + where we.website_id = {websiteId:UUID} + and we.created_at between {startDate:DateTime64} and {endDate:DateTime64} + ${currency ? '' : `and name != ''`} group by 1 order by 2 desc limit 20