Skip to content

Commit dcf2457

Browse files
committed
update terminology, add metric cards to new metrics
1 parent 51139c1 commit dcf2457

File tree

3 files changed

+45
-30
lines changed

3 files changed

+45
-30
lines changed

src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx

+32-19
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ export function WebsiteMetricsBar({
2121
const { ref, isSticky } = useSticky({ enabled: sticky });
2222
const { data, isLoading, isFetched, error } = useWebsiteStats(websiteId);
2323

24-
const { pageviews, uniques, bounces, totaltime } = data || {};
25-
const num = Math.min(data && uniques.value, data && bounces.value);
24+
const { views, visitors, visits, bounces, totaltime } = data || {};
25+
const num = Math.min(data && visitors.value, data && bounces.value);
2626
const diffs = data && {
27-
pageviews: pageviews.value - pageviews.change,
28-
uniques: uniques.value - uniques.change,
27+
views: views.value - views.change,
28+
visitors: visitors.value - visitors.change,
29+
visits: visits.value - visits.change,
2930
bounces: bounces.value - bounces.change,
3031
totaltime: totaltime.value - totaltime.change,
3132
};
@@ -39,25 +40,39 @@ export function WebsiteMetricsBar({
3940
})}
4041
>
4142
<MetricsBar isLoading={isLoading} isFetched={isFetched} error={error}>
42-
{pageviews && uniques && (
43+
{views && visitors && (
4344
<>
4445
<MetricCard
4546
label={formatMessage(labels.views)}
46-
value={pageviews.value}
47-
change={pageviews.change}
47+
value={views.value}
48+
change={views.change}
4849
/>
4950
<MetricCard
5051
label={formatMessage(labels.visitors)}
51-
value={uniques.value}
52-
change={uniques.change}
52+
value={visitors.value}
53+
change={visitors.change}
54+
/>
55+
<MetricCard
56+
label={formatMessage(labels.visits)}
57+
value={visits.value}
58+
change={visits.change}
59+
/>
60+
<MetricCard
61+
label={formatMessage(labels.viewsPerVisit)}
62+
value={visits.value ? views.value / visits.value : 0}
63+
change={
64+
visits.value && visits.change
65+
? views.value / visits.value - diffs.views / diffs.visits
66+
: 0
67+
}
5368
/>
5469
<MetricCard
5570
label={formatMessage(labels.bounceRate)}
56-
value={uniques.value ? (num / uniques.value) * 100 : 0}
71+
value={visitors.value ? (num / visitors.value) * 100 : 0}
5772
change={
58-
uniques.value && uniques.change
59-
? (num / uniques.value) * 100 -
60-
(Math.min(diffs.uniques, diffs.bounces) / diffs.uniques) * 100 || 0
73+
visitors.value && visitors.change
74+
? (num / visitors.value) * 100 -
75+
(Math.min(diffs.visitors, diffs.bounces) / diffs.visitors) * 100 || 0
6176
: 0
6277
}
6378
format={n => Number(n).toFixed(0) + '%'}
@@ -66,14 +81,12 @@ export function WebsiteMetricsBar({
6681
<MetricCard
6782
label={formatMessage(labels.averageVisitTime)}
6883
value={
69-
totaltime.value && pageviews.value
70-
? totaltime.value / (pageviews.value - bounces.value)
71-
: 0
84+
totaltime.value && views.value ? totaltime.value / (views.value - bounces.value) : 0
7285
}
7386
change={
74-
totaltime.value && pageviews.value
75-
? (diffs.totaltime / (diffs.pageviews - diffs.bounces) -
76-
totaltime.value / (pageviews.value - bounces.value)) *
87+
totaltime.value && views.value
88+
? (diffs.totaltime / (diffs.views - diffs.bounces) -
89+
totaltime.value / (views.value - bounces.value)) *
7790
-1 || 0
7891
: 0
7992
}

src/components/messages.ts

+2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ export const labels = defineMessages({
100100
queryParameters: { id: 'label.query-parameters', defaultMessage: 'Query parameters' },
101101
back: { id: 'label.back', defaultMessage: 'Back' },
102102
visitors: { id: 'label.visitors', defaultMessage: 'Visitors' },
103+
visits: { id: 'label.visits', defaultMessage: 'Visits' },
103104
filterCombined: { id: 'label.filter-combined', defaultMessage: 'Combined' },
104105
filterRaw: { id: 'label.filter-raw', defaultMessage: 'Raw' },
105106
views: { id: 'label.views', defaultMessage: 'Views' },
@@ -127,6 +128,7 @@ export const labels = defineMessages({
127128
pageViews: { id: 'label.page-views', defaultMessage: 'Page views' },
128129
uniqueVisitors: { id: 'label.unique-visitors', defaultMessage: 'Unique visitors' },
129130
bounceRate: { id: 'label.bounce-rate', defaultMessage: 'Bounce rate' },
131+
viewsPerVisit: { id: 'label.views-per-visit', defaultMessage: 'Views per visit' },
130132
averageVisitTime: { id: 'label.average-visit-time', defaultMessage: 'Average visit time' },
131133
desktop: { id: 'label.desktop', defaultMessage: 'Desktop' },
132134
laptop: { id: 'label.laptop', defaultMessage: 'Laptop' },

src/queries/analytics/getWebsiteStats.ts

+11-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { QueryFilters } from 'lib/types';
77
export async function getWebsiteStats(
88
...args: [websiteId: string, filters: QueryFilters]
99
): Promise<
10-
{ pageviews: number; uniques: number; visitors: number; bounces: number; totaltime: number }[]
10+
{ views: number; visitors: number; visits: number; bounces: number; totaltime: number }[]
1111
> {
1212
return runQuery({
1313
[PRISMA]: () => relationalQuery(...args),
@@ -19,7 +19,7 @@ async function relationalQuery(
1919
websiteId: string,
2020
filters: QueryFilters,
2121
): Promise<
22-
{ pageviews: number; uniques: number; visitors: number; bounces: number; totaltime: number }[]
22+
{ views: number; visitors: number; visits: number; bounces: number; totaltime: number }[]
2323
> {
2424
const { getTimestampDiffQuery, parseFilters, rawQuery } = prisma;
2525
const { filterQuery, joinSession, params } = await parseFilters(websiteId, {
@@ -30,9 +30,9 @@ async function relationalQuery(
3030
return rawQuery(
3131
`
3232
select
33-
sum(t.c) as "pageviews",
34-
count(distinct t.session_id) as "uniques",
35-
count(distinct t.visit_id) as "visitors",
33+
sum(t.c) as "views",
34+
count(distinct t.session_id) as "visitors",
35+
count(distinct t.visit_id) as "visits",
3636
sum(case when t.c = 1 then 1 else 0 end) as "bounces",
3737
sum(${getTimestampDiffQuery('t.min_time', 't.max_time')}) as "totaltime"
3838
from (
@@ -61,7 +61,7 @@ async function clickhouseQuery(
6161
websiteId: string,
6262
filters: QueryFilters,
6363
): Promise<
64-
{ pageviews: number; uniques: number; visitors: number; bounces: number; totaltime: number }[]
64+
{ views: number; visitors: number; visits: number; bounces: number; totaltime: number }[]
6565
> {
6666
const { rawQuery, parseFilters } = clickhouse;
6767
const { filterQuery, params } = await parseFilters(websiteId, {
@@ -72,9 +72,9 @@ async function clickhouseQuery(
7272
return rawQuery(
7373
`
7474
select
75-
sum(t.c) as "pageviews",
76-
count(distinct t.session_id) as "uniques",
77-
count(distinct t.visit_id) as "visitors",
75+
sum(t.c) as "views",
76+
count(distinct t.session_id) as "visitors",
77+
count(distinct t.visit_id) as "visits",
7878
sum(if(t.c = 1, 1, 0)) as "bounces",
7979
sum(max_time-min_time) as "totaltime"
8080
from (
@@ -96,9 +96,9 @@ async function clickhouseQuery(
9696
).then(a => {
9797
return Object.values(a).map(a => {
9898
return {
99-
pageviews: Number(a.pageviews),
100-
uniques: Number(a.uniques),
99+
views: Number(a.views),
101100
visitors: Number(a.visitors),
101+
visits: Number(a.visits),
102102
bounces: Number(a.bounces),
103103
totaltime: Number(a.totaltime),
104104
};

0 commit comments

Comments
 (0)