What goes in a session frustration signals dashboard?
A session frustration signals dashboard aggregates the behavioral distress signals session tools capture — rage clicks, dead clicks, error clicks, and abandoned flows — normalized by traffic so a busy page doesn't automatically look like a broken one.
Which cards belong on this dashboard?
- Rage clicks per 1,000 sessions by page
- Dead and error clicks by flow over time
- Frustrated-session share with trend
- Top frustration pages this week vs. last
- Frustration signals by release or deploy marker
- Funnel steps with the highest abandonment
- Frustration by device and browser
- Sessions affected by frontend errors
What data does this dashboard need?
- Daily session rollups per page or flow (sessions, rage, dead, error clicks)
- Conversion or funnel-step outcomes per flow
- Release or deploy markers with timestamps
- Device and browser dimensions on rollups
- Frontend error groups where the tool tracks them
How do you build it?
- Sync the source tools into a database and retain raw IDs, timestamps, statuses, and segment fields.
- Build modeled tables at the grain this dashboard requires.
- Create one saved question per card and certify the shared models and definitions.
- Add dashboard filters for Date range, page or flow, device, browser, release.
- Show refresh time, and exclude internal and test activity from every headline card.
Example card SQL
WITH weekly AS (
SELECT
page_or_flow,
date_trunc('week', usage_date) AS week,
1000.0 * SUM(rage_clicks) / NULLIF(SUM(sessions), 0)
AS rage_per_1k
FROM session_rollups
GROUP BY 1, 2
), compared AS (
SELECT
page_or_flow,
week,
rage_per_1k,
LAG(rage_per_1k) OVER (
PARTITION BY page_or_flow ORDER BY week
) AS prior_week
FROM weekly
)
SELECT
page_or_flow,
ROUND(rage_per_1k, 2) AS this_week,
ROUND(prior_week, 2) AS last_week
FROM compared
WHERE week = date_trunc('week', CURRENT_DATE)
AND rage_per_1k > COALESCE(prior_week, 0)
ORDER BY this_week DESC;