BE: Duo feature retention chart
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Add GraphQL endpoint to support duo feature retention chart to aiMetrics. It needs to support both weekly and monthly aggregation.
Query sample
group(fullPath:"gitlab-org") {
aiMetrics(startDate: "x", endDate: "y") {
featureRetention(feature: "A", period: WEEK\MONTH) {
nodes {
periodStartDate
returningUsersCount
totalUsersCount
}
}
}
We can use ai_usage_events_daily to query returning users weekly or monthly, for example:
WITH ai_usage_retention_agg AS (
SELECT
date,
namespace_path,
event,
groupUniqArray(user_id) AS uniq_users
FROM ai_usage_events_daily
WHERE event IN (1, 2, 3, 4, 12, 13, 14, 15, 16, 17)
AND startsWith(namespace_path, '9970/')
AND date >= '2024-11-10'
AND date < '2025-11-11'
GROUP BY namespace_path, event, date
),
weekly_aggregates AS (
SELECT
toStartOfWeek(date) AS week,
event,
arrayDistinct(arrayFlatten(groupArray(uniq_users))) AS user_ids
FROM ai_usage_retention_agg
GROUP BY week, event
)
SELECT
this_week.week,
this_week.event,
length(this_week.user_ids) AS this_week_users,
length(last_week.user_ids) AS last_week_users,
length(arrayIntersect(this_week.user_ids, last_week.user_ids)) AS users_who_returned,
round(users_who_returned * 100.0 / last_week_users, 2) AS retention_percentage
FROM weekly_aggregates this_week
INNER JOIN weekly_aggregates last_week
ON this_week.event = last_week.event
AND last_week.week = this_week.week - INTERVAL 1 WEEK
ORDER BY this_week.week, this_week.event
We also need to support monthly retention following the same principle from the query above.
Edited by 🤖 GitLab Bot 🤖