From 4b3b9f1ee1898a872b593fdf3cd1dba1dc55ef73 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 12 Feb 2025 09:51:45 -0800 Subject: [PATCH 1/4] change referrers table from views to visitors --- src/components/metrics/ReferrersTable.tsx | 2 +- src/queries/sql/pageviews/getPageviewMetrics.ts | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/metrics/ReferrersTable.tsx b/src/components/metrics/ReferrersTable.tsx index 142f361b..db40a617 100644 --- a/src/components/metrics/ReferrersTable.tsx +++ b/src/components/metrics/ReferrersTable.tsx @@ -87,7 +87,7 @@ export function ReferrersTable({ allowFilter, ...props }: ReferrersTableProps) { {...props} title={formatMessage(labels.referrers)} type="referrer" - metric={formatMessage(labels.views)} + metric={formatMessage(labels.visitors)} dataFilter={view === 'grouped' ? groupedFilter : undefined} renderLabel={renderLink} > diff --git a/src/queries/sql/pageviews/getPageviewMetrics.ts b/src/queries/sql/pageviews/getPageviewMetrics.ts index f7604298..344a5e94 100644 --- a/src/queries/sql/pageviews/getPageviewMetrics.ts +++ b/src/queries/sql/pageviews/getPageviewMetrics.ts @@ -62,7 +62,8 @@ async function relationalQuery( return rawQuery( ` - select ${column} x, count(*) y + select ${column} x, + ${column === 'referrer_domain' ? 'count(distinct session_id)' : 'count(*)'} as y from website_event ${joinSession} ${entryExitQuery} @@ -119,7 +120,8 @@ async function clickhouseQuery( } sql = ` - select ${column} x, count(*) y + select ${column} x, + ${column === 'referrer_domain' ? 'uniq(session_id)' : 'count(*)'} as y from website_event ${entryExitQuery} where website_id = {websiteId:UUID} @@ -133,13 +135,13 @@ async function clickhouseQuery( `; } else { let groupByQuery = ''; + let columnQuery = `arrayJoin(${column})`; if (column === 'referrer_domain') { excludeDomain = `and t != hostname and hostname != ''`; + columnQuery = `session_id s, arrayJoin(${column})`; } - let columnQuery = `arrayJoin(${column})`; - if (type === 'entry') { columnQuery = `visit_id x, argMinMerge(entry_url)`; } @@ -154,7 +156,7 @@ async function clickhouseQuery( sql = ` select g.t as x, - count(*) as y + ${column === 'referrer_domain' ? 'uniq(s)' : 'count(*)'} as y from ( select ${columnQuery} as t from website_event_stats_hourly website_event From d1b01370efec92d25fe16a445e160e583b051d3a Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 12 Feb 2025 10:25:38 -0800 Subject: [PATCH 2/4] fix getsessiondata props --- src/queries/sql/sessions/getSessionDataProperties.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/queries/sql/sessions/getSessionDataProperties.ts b/src/queries/sql/sessions/getSessionDataProperties.ts index bfa6a269..ed914518 100644 --- a/src/queries/sql/sessions/getSessionDataProperties.ts +++ b/src/queries/sql/sessions/getSessionDataProperties.ts @@ -25,13 +25,12 @@ async function relationalQuery( ` select data_key as "propertyName", - count(*) as "total" + count(distinct d.session_id) as "total" from website_event e - left join session_data d + join session_data d on d.session_id = e.session_id where e.website_id = {{websiteId:uuid}} and e.created_at between {{startDate}} and {{endDate}} - and d.data_key is not null ${filterQuery} group by 1 order by 2 desc @@ -54,9 +53,9 @@ async function clickhouseQuery( ` select data_key as propertyName, - count(*) as total + count(distinct d.session_id) as total from website_event e - left join session_data d + join session_data d final on d.session_id = e.session_id where e.website_id = {websiteId:UUID} and e.created_at between {startDate:DateTime64} and {endDate:DateTime64} From 1438231898b84f1edf7c922cbd7543581569ad84 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 12 Feb 2025 11:21:38 -0800 Subject: [PATCH 3/4] fix session values route --- .../[websiteId]/session-data/values/route.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/api/websites/[websiteId]/session-data/values/route.ts b/src/app/api/websites/[websiteId]/session-data/values/route.ts index 93e91775..d950da34 100644 --- a/src/app/api/websites/[websiteId]/session-data/values/route.ts +++ b/src/app/api/websites/[websiteId]/session-data/values/route.ts @@ -1,8 +1,8 @@ -import { z } from 'zod'; -import { parseRequest } from '@/lib/request'; -import { unauthorized, json } from '@/lib/response'; import { canViewWebsite } from '@/lib/auth'; -import { getEventDataEvents } from '@/queries/sql/events/getEventDataEvents'; +import { parseRequest } from '@/lib/request'; +import { json, unauthorized } from '@/lib/response'; +import { getSessionDataValues } from '@/queries'; +import { z } from 'zod'; export async function GET( request: Request, @@ -20,7 +20,7 @@ export async function GET( return error(); } - const { startAt, endAt, event } = query; + const { startAt, endAt, propertyName } = query; const { websiteId } = await params; if (!(await canViewWebsite(auth, websiteId))) { @@ -30,10 +30,10 @@ export async function GET( const startDate = new Date(+startAt); const endDate = new Date(+endAt); - const data = await getEventDataEvents(websiteId, { + const data = await getSessionDataValues(websiteId, { startDate, endDate, - event, + propertyName, }); return json(data); From 33662f9f5e7302ec7ad5a2e5a9f4f93f265d2f7c Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 12 Feb 2025 11:26:40 -0800 Subject: [PATCH 4/4] join on website event for date ranges --- .../sql/sessions/getSessionDataValues.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/queries/sql/sessions/getSessionDataValues.ts b/src/queries/sql/sessions/getSessionDataValues.ts index 3281521a..8cd6a4ab 100644 --- a/src/queries/sql/sessions/getSessionDataValues.ts +++ b/src/queries/sql/sessions/getSessionDataValues.ts @@ -27,11 +27,13 @@ async function relationalQuery( when data_type = 4 then ${getDateSQL('date_value', 'hour')} else string_value end as "value", - count(*) as "total" - from session_data - where website_id = {{websiteId::uuid}} - and created_at between {{startDate}} and {{endDate}} - and data_key = {{propertyName}} + count(distinct d.session_id) as "total" + from website_event e + join session_data d + on d.session_id = e.session_id + where e.website_id = {{websiteId::uuid}} + and e.created_at between {{startDate}} and {{endDate}} + and d.data_key = {{propertyName}} ${filterQuery} group by value order by 2 desc @@ -54,11 +56,13 @@ async function clickhouseQuery( multiIf(data_type = 2, replaceAll(string_value, '.0000', ''), data_type = 4, toString(date_trunc('hour', date_value)), string_value) as "value", - count(*) as "total" - from session_data final - where website_id = {websiteId:UUID} - and created_at between {startDate:DateTime64} and {endDate:DateTime64} - and data_key = {propertyName:String} + uniq(d.session_id) as "total" + from website_event e + join session_data d final + on d.session_id = e.session_id + where e.website_id = {websiteId:UUID} + and e.created_at between {startDate:DateTime64} and {endDate:DateTime64} + and d.data_key = {propertyName:String} ${filterQuery} group by value order by 2 desc