funnel fix (total sessions)

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-08-21 00:11:00 +02:00
parent d5819c920a
commit 1edd63e01e

View File

@@ -292,7 +292,7 @@ export async function getFunnelData({
const innerSql = `SELECT const innerSql = `SELECT
session_id, session_id,
windowFunnel(${ONE_DAY_IN_SECONDS})(toUnixTimestamp(created_at), ${funnels.join(', ')}) AS level windowFunnel(${ONE_DAY_IN_SECONDS}, 'strict_order')(toUnixTimestamp(created_at), ${funnels.join(', ')}) AS level
FROM ${TABLE_NAMES.events} FROM ${TABLE_NAMES.events}
WHERE WHERE
project_id = ${escape(projectId)} AND project_id = ${escape(projectId)} AND
@@ -301,7 +301,7 @@ export async function getFunnelData({
name IN (${payload.events.map((event) => escape(event.name)).join(', ')}) name IN (${payload.events.map((event) => escape(event.name)).join(', ')})
GROUP BY session_id`; GROUP BY session_id`;
const sql = `SELECT level, count() AS count FROM (${innerSql}) GROUP BY level ORDER BY level DESC`; const sql = `SELECT level, count() AS count FROM (${innerSql}) WHERE level != 0 GROUP BY level ORDER BY level DESC`;
const funnelRes = await chQuery<{ level: number; count: number }>(sql); const funnelRes = await chQuery<{ level: number; count: number }>(sql);
@@ -340,36 +340,34 @@ export async function getFunnelData({
); );
const totalSessions = last(filledFunnelRes)?.count ?? 0; const totalSessions = last(filledFunnelRes)?.count ?? 0;
const steps = reverse(filledFunnelRes) const steps = reverse(filledFunnelRes).reduce(
.filter((item) => item.level !== 0) (acc, item, index, list) => {
.reduce( const prev = list[index - 1] ?? { count: totalSessions };
(acc, item, index, list) => { const event = payload.events[item.level - 1]!;
const prev = list[index - 1] ?? { count: totalSessions }; return [
const event = payload.events[item.level - 1]!; ...acc,
return [ {
...acc, event: {
{ ...event,
event: { displayName: event.displayName ?? event.name,
...event,
displayName: event.displayName ?? event.name,
},
count: item.count,
percent: (item.count / totalSessions) * 100,
dropoffCount: prev.count - item.count,
dropoffPercent: 100 - (item.count / prev.count) * 100,
previousCount: prev.count,
}, },
]; count: item.count,
}, percent: (item.count / totalSessions) * 100,
[] as { dropoffCount: prev.count - item.count,
event: IChartEvent & { displayName: string }; dropoffPercent: 100 - (item.count / prev.count) * 100,
count: number; previousCount: prev.count,
percent: number; },
dropoffCount: number; ];
dropoffPercent: number; },
previousCount: number; [] as {
}[] event: IChartEvent & { displayName: string };
); count: number;
percent: number;
dropoffCount: number;
dropoffPercent: number;
previousCount: number;
}[]
);
return { return {
totalSessions, totalSessions,