mirror of
https://github.com/umami-software/umami.git
synced 2026-02-11 16:17:13 +01:00
add dropped off node
This commit is contained in:
parent
8b410096bd
commit
e8a605af39
1 changed files with 29 additions and 5 deletions
|
|
@ -43,7 +43,7 @@ async function relationalQuery(
|
||||||
): Promise<JourneyResult[]> {
|
): Promise<JourneyResult[]> {
|
||||||
const { startDate, endDate, steps, startStep, endStep } = filters;
|
const { startDate, endDate, steps, startStep, endStep } = filters;
|
||||||
const { rawQuery } = prisma;
|
const { rawQuery } = prisma;
|
||||||
const { sequenceQuery, startStepQuery, endStepQuery, params } = getJourneyQuery(
|
const { sequenceQuery, startStepQuery, endStepQuery, finalSelectQuery, params } = getJourneyQuery(
|
||||||
steps,
|
steps,
|
||||||
startStep,
|
startStep,
|
||||||
endStep,
|
endStep,
|
||||||
|
|
@ -57,12 +57,14 @@ async function relationalQuery(
|
||||||
sequenceQuery: string;
|
sequenceQuery: string;
|
||||||
startStepQuery: string;
|
startStepQuery: string;
|
||||||
endStepQuery: string;
|
endStepQuery: string;
|
||||||
|
finalSelectQuery: string;
|
||||||
params: { [key: string]: string };
|
params: { [key: string]: string };
|
||||||
} {
|
} {
|
||||||
const params = {};
|
const params = {};
|
||||||
let sequenceQuery = '';
|
let sequenceQuery = '';
|
||||||
let startStepQuery = '';
|
let startStepQuery = '';
|
||||||
let endStepQuery = '';
|
let endStepQuery = '';
|
||||||
|
let finalSelectQuery = '';
|
||||||
|
|
||||||
// create sequence query
|
// create sequence query
|
||||||
let selectQuery = '';
|
let selectQuery = '';
|
||||||
|
|
@ -104,10 +106,18 @@ async function relationalQuery(
|
||||||
params['endStep'] = endStep;
|
params['endStep'] = endStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create final select query
|
||||||
|
for (let i = 1; i < steps; i++) {
|
||||||
|
finalSelectQuery += `\nCASE WHEN e${i} IS NOT NULL and e${
|
||||||
|
i + 1
|
||||||
|
} IS NULL THEN 'dropped off' ELSE e${i + 1} END AS e${i + 1},`;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sequenceQuery,
|
sequenceQuery,
|
||||||
startStepQuery,
|
startStepQuery,
|
||||||
endStepQuery,
|
endStepQuery,
|
||||||
|
finalSelectQuery,
|
||||||
params,
|
params,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -124,7 +134,9 @@ async function relationalQuery(
|
||||||
where website_id = {{websiteId::uuid}}
|
where website_id = {{websiteId::uuid}}
|
||||||
and created_at between {{startDate}} and {{endDate}}),
|
and created_at between {{startDate}} and {{endDate}}),
|
||||||
${sequenceQuery}
|
${sequenceQuery}
|
||||||
select *
|
select e1,
|
||||||
|
${finalSelectQuery}
|
||||||
|
count
|
||||||
from sequences
|
from sequences
|
||||||
where 1 = 1
|
where 1 = 1
|
||||||
${startStepQuery}
|
${startStepQuery}
|
||||||
|
|
@ -153,7 +165,7 @@ async function clickhouseQuery(
|
||||||
): Promise<JourneyResult[]> {
|
): Promise<JourneyResult[]> {
|
||||||
const { startDate, endDate, steps, startStep, endStep } = filters;
|
const { startDate, endDate, steps, startStep, endStep } = filters;
|
||||||
const { rawQuery } = clickhouse;
|
const { rawQuery } = clickhouse;
|
||||||
const { sequenceQuery, startStepQuery, endStepQuery, params } = getJourneyQuery(
|
const { sequenceQuery, startStepQuery, endStepQuery, finalSelectQuery, params } = getJourneyQuery(
|
||||||
steps,
|
steps,
|
||||||
startStep,
|
startStep,
|
||||||
endStep,
|
endStep,
|
||||||
|
|
@ -167,12 +179,14 @@ async function clickhouseQuery(
|
||||||
sequenceQuery: string;
|
sequenceQuery: string;
|
||||||
startStepQuery: string;
|
startStepQuery: string;
|
||||||
endStepQuery: string;
|
endStepQuery: string;
|
||||||
|
finalSelectQuery: string;
|
||||||
params: { [key: string]: string };
|
params: { [key: string]: string };
|
||||||
} {
|
} {
|
||||||
const params = {};
|
const params = {};
|
||||||
let sequenceQuery = '';
|
let sequenceQuery = '';
|
||||||
let startStepQuery = '';
|
let startStepQuery = '';
|
||||||
let endStepQuery = '';
|
let endStepQuery = '';
|
||||||
|
let finalSelectQuery = '';
|
||||||
|
|
||||||
// create sequence query
|
// create sequence query
|
||||||
let selectQuery = '';
|
let selectQuery = '';
|
||||||
|
|
@ -207,17 +221,25 @@ async function clickhouseQuery(
|
||||||
if (endStep) {
|
if (endStep) {
|
||||||
for (let i = 1; i < steps; i++) {
|
for (let i = 1; i < steps; i++) {
|
||||||
const startQuery = i === 1 ? 'and (' : '\nor ';
|
const startQuery = i === 1 ? 'and (' : '\nor ';
|
||||||
endStepQuery += `${startQuery}(e${i} = {endStep:String} and e${i + 1} is null) `;
|
endStepQuery += `${startQuery}(e${i} = {endStep:String} and e${i + 1} = 'dropped off') `;
|
||||||
}
|
}
|
||||||
endStepQuery += `\nor (e${steps} = {endStep:String}))`;
|
endStepQuery += `\nor (e${steps} = {endStep:String}))`;
|
||||||
|
|
||||||
params['endStep'] = endStep;
|
params['endStep'] = endStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create final select query
|
||||||
|
for (let i = 1; i < steps; i++) {
|
||||||
|
finalSelectQuery += `\nCASE WHEN e${i} IS NOT NULL and e${
|
||||||
|
i + 1
|
||||||
|
} IS NULL THEN 'dropped off' ELSE e${i + 1} END AS e${i + 1},`;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sequenceQuery,
|
sequenceQuery,
|
||||||
startStepQuery,
|
startStepQuery,
|
||||||
endStepQuery,
|
endStepQuery,
|
||||||
|
finalSelectQuery,
|
||||||
params,
|
params,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +255,9 @@ async function clickhouseQuery(
|
||||||
where website_id = {websiteId:UUID}
|
where website_id = {websiteId:UUID}
|
||||||
and created_at between {startDate:DateTime64} and {endDate:DateTime64}),
|
and created_at between {startDate:DateTime64} and {endDate:DateTime64}),
|
||||||
${sequenceQuery}
|
${sequenceQuery}
|
||||||
select *
|
select e1,
|
||||||
|
${finalSelectQuery}
|
||||||
|
count
|
||||||
from sequences
|
from sequences
|
||||||
where 1 = 1
|
where 1 = 1
|
||||||
${startStepQuery}
|
${startStepQuery}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue