funnel fix (total sessions)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user