Dashboard-Bericht - DAU/MAU

Danke, @SaraDev, das ist nützlich für uns. Da wir eine kleine Community mit viel aktiveren Mitarbeitern als normalen Benutzern sind, habe ich (nun ja, ich und ChatGPT) die Abfrage so modifiziert, dass sie normale Benutzer und Mitarbeiter getrennt oder kombiniert ausführen kann. Und ich sehe es gerne grafisch dargestellt, also habe ich es so modifiziert, dass es dies ermöglicht.
Ich habe kürzlich gesehen, wie man das Datenbankschema in diesem Tipp von @tyler.lamparter herunterladen kann, und ich lade das zu Beginn dieser Sitzungen in ChatGPT hoch. Das macht es einfacher, Chatty zu bitten, z. B. staff zu trennen.

-- [params]
-- int :months_ago = 3
-- int :include_staff = 1


WITH staff_users AS (
  SELECT user_id FROM group_users WHERE group_id = 3
),
daily_users AS (
  SELECT
    date_trunc('day', visited_at)::DATE AS day,
    COUNT(DISTINCT user_id) AS dau
  FROM user_visits
  WHERE visited_at >= CURRENT_DATE - INTERVAL ':months_ago months'
  AND (
    (:include_staff = 1) -- Alle Benutzer
    OR (:include_staff = 0 AND user_id NOT IN (SELECT user_id FROM staff_users)) -- Nur Nicht-Mitarbeiter
    OR (:include_staff = 2 AND user_id IN (SELECT user_id FROM staff_users)) -- Nur Mitarbeiter
  )
  GROUP BY day
),
monthly_users AS (
  SELECT
    date_trunc('month', visited_at)::DATE AS month,
    COUNT(DISTINCT user_id) AS mau
  FROM user_visits
  WHERE visited_at >= CURRENT_DATE - INTERVAL ':months_ago months'
  AND (
    (:include_staff = 1) -- Alle Benutzer
    OR (:include_staff = 0 AND user_id NOT IN (SELECT user_id FROM staff_users)) -- Nur Nicht-Mitarbeiter
    OR (:include_staff = 2 AND user_id IN (SELECT user_id FROM staff_users)) -- Nur Mitarbeiter
  )
  GROUP BY month
)
SELECT
  d.day::DATE AS date,  -- ✅ X-Achse für die grafische Darstellung
  ROUND((d.dau::numeric / NULLIF(m.mau, 0)::numeric) * 100, 1)::FLOAT AS dau_mau_ratio  -- ✅ Y-Achse für die grafische Darstellung
FROM daily_users d
JOIN monthly_users m ON date_trunc('month', d.day) = m.month
ORDER BY date
-- 0 = Nur Nicht-Mitarbeiter, 1 = Alle Benutzer, 2 = Nur Mitarbeiter
1 „Gefällt mir“