From a219f5dbe3cea44a29ba96c0a4fb2314cb66128b Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Mon, 26 Aug 2024 10:36:07 -0700 Subject: [PATCH 1/2] pass timezone in stats CH query --- src/queries/analytics/pageviews/getPageviewStats.ts | 6 +++--- src/queries/analytics/sessions/getSessionStats.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/queries/analytics/pageviews/getPageviewStats.ts b/src/queries/analytics/pageviews/getPageviewStats.ts index 96e9f1e1..2230da91 100644 --- a/src/queries/analytics/pageviews/getPageviewStats.ts +++ b/src/queries/analytics/pageviews/getPageviewStats.ts @@ -41,7 +41,7 @@ async function clickhouseQuery( websiteId: string, filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { - const { unit = 'day' } = filters; + const { timezone = 'utc', unit = 'day' } = filters; const { parseFilters, rawQuery } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, @@ -57,7 +57,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at) as t, + date_trunc('${unit}', created_at, '${timezone}') as t, count(*) as y from website_event where website_id = {websiteId:UUID} @@ -75,7 +75,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at) as t, + date_trunc('${unit}', created_at, '${timezone}') as t, sum(views)as y from website_event_stats_hourly website_event where website_id = {websiteId:UUID} diff --git a/src/queries/analytics/sessions/getSessionStats.ts b/src/queries/analytics/sessions/getSessionStats.ts index 8fde94f3..bddebcec 100644 --- a/src/queries/analytics/sessions/getSessionStats.ts +++ b/src/queries/analytics/sessions/getSessionStats.ts @@ -41,7 +41,7 @@ async function clickhouseQuery( websiteId: string, filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { - const { unit = 'day' } = filters; + const { timezone = 'utc', unit = 'day' } = filters; const { parseFilters, rawQuery } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, @@ -57,7 +57,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at) as t, + date_trunc('${unit}', created_at, '${timezone}') as t, count(distinct session_id) as y from website_event where website_id = {websiteId:UUID} @@ -75,7 +75,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at) as t, + date_trunc('${unit}', created_at, '${timezone}') as t, uniq(session_id) as y from website_event_stats_hourly website_event where website_id = {websiteId:UUID} From b1caf6edb702f227220e0f2e1742963b282be746 Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Tue, 27 Aug 2024 12:02:23 -0700 Subject: [PATCH 2/2] fix monthly and all time charts --- src/components/charts/BarChart.tsx | 2 +- src/lib/clickhouse.ts | 4 ++-- src/queries/analytics/pageviews/getPageviewStats.ts | 6 +++--- src/queries/analytics/sessions/getSessionStats.ts | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/charts/BarChart.tsx b/src/components/charts/BarChart.tsx index b9681221..7a8dcbed 100644 --- a/src/components/charts/BarChart.tsx +++ b/src/components/charts/BarChart.tsx @@ -36,7 +36,7 @@ export function BarChart(props: BarChartProps) { x: { type: XAxisType, stacked: true, - min: minDate, + min: unit === 'minute' ? minDate : '', max: maxDate, time: { unit, diff --git a/src/lib/clickhouse.ts b/src/lib/clickhouse.ts index 332d0727..5502b5ba 100644 --- a/src/lib/clickhouse.ts +++ b/src/lib/clickhouse.ts @@ -63,9 +63,9 @@ function getDateStringSQL(data: any, unit: string = 'utc', timezone?: string) { function getDateSQL(field: string, unit: string, timezone?: string) { if (timezone) { - return `date_trunc('${unit}', ${field}, '${timezone}')`; + return `toDateTime(date_trunc('${unit}', ${field}, '${timezone}'), '${timezone}')`; } - return `date_trunc('${unit}', ${field})`; + return `toDateTime(date_trunc('${unit}', ${field}))`; } function mapFilter(column: string, operator: string, name: string, type: string = 'String') { diff --git a/src/queries/analytics/pageviews/getPageviewStats.ts b/src/queries/analytics/pageviews/getPageviewStats.ts index 2230da91..48b82000 100644 --- a/src/queries/analytics/pageviews/getPageviewStats.ts +++ b/src/queries/analytics/pageviews/getPageviewStats.ts @@ -42,7 +42,7 @@ async function clickhouseQuery( filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { const { timezone = 'utc', unit = 'day' } = filters; - const { parseFilters, rawQuery } = clickhouse; + const { parseFilters, rawQuery, getDateSQL } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -57,7 +57,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at, '${timezone}') as t, + ${getDateSQL('website_event.created_at', unit, timezone)} as t, count(*) as y from website_event where website_id = {websiteId:UUID} @@ -75,7 +75,7 @@ async function clickhouseQuery( g.y as y from ( select - date_trunc('${unit}', created_at, '${timezone}') as t, + ${getDateSQL('website_event.created_at', unit, timezone)} as t, sum(views)as y from website_event_stats_hourly website_event where website_id = {websiteId:UUID} diff --git a/src/queries/analytics/sessions/getSessionStats.ts b/src/queries/analytics/sessions/getSessionStats.ts index bddebcec..212f15e9 100644 --- a/src/queries/analytics/sessions/getSessionStats.ts +++ b/src/queries/analytics/sessions/getSessionStats.ts @@ -42,7 +42,7 @@ async function clickhouseQuery( filters: QueryFilters, ): Promise<{ x: string; y: number }[]> { const { timezone = 'utc', unit = 'day' } = filters; - const { parseFilters, rawQuery } = clickhouse; + const { parseFilters, rawQuery, getDateSQL } = clickhouse; const { filterQuery, params } = await parseFilters(websiteId, { ...filters, eventType: EVENT_TYPE.pageView, @@ -53,11 +53,11 @@ async function clickhouseQuery( if (EVENT_COLUMNS.some(item => Object.keys(filters).includes(item)) || unit === 'minute') { sql = ` select - g.t as x, + g.t as x, g.y as y from ( select - date_trunc('${unit}', created_at, '${timezone}') as t, + ${getDateSQL('website_event.created_at', unit, timezone)} as t, count(distinct session_id) as y from website_event where website_id = {websiteId:UUID} @@ -71,11 +71,11 @@ async function clickhouseQuery( } else { sql = ` select - g.t as x, + g.t as x, g.y as y from ( select - date_trunc('${unit}', created_at, '${timezone}') as t, + ${getDateSQL('website_event.created_at', unit, timezone)} as t, uniq(session_id) as y from website_event_stats_hourly website_event where website_id = {websiteId:UUID}