Rückwirkend die Anzahl der Nutzer pro Kalendermonat erfassen

Hallo! Wir verwenden die Cloud-gehostete Version von Discourse und betreiben unsere Plattform seit etwa 1,5 Jahren. Wir möchten einige historische Metriken zur Akzeptanz und Nutzung der Plattform abrufen. Wir betrachten bereits den Bericht „Anmeldungen“ im Tab „Admin-Berichte“, möchten aber auch die Gesamtzahl der aktiven Benutzer pro Monat anzeigen können. Hat jemand Einblicke, wie ich das tun könnte? Ich kann im Berichte- oder Daten-Explorer nichts Passendes finden.

Diese Data Explorer-Abfrage gibt eindeutige monatliche Benutzerbesuche zurück. Ist das, was Sie wollen?

--[params]
-- date :start_date = 2021-01-01
-- date :end_date = 2021-12-31
-- string_list :group_name = staff,admins

WITH not_allowed_groups AS (
    SELECT gu.user_id FROM group_users gu
    INNER JOIN groups g ON (g.id = gu.group_id)
    WHERE g.name IN (:group_name)
)

SELECT
    to_char(date_trunc('month', uv.visited_at)::DATE,'YYYY-MM') AS "month",
    date_trunc('month', uv.visited_at)::DATE AS date_user_visits,
    COUNT(distinct uv.user_id) AS qtt_user_visits
FROM user_visits uv
WHERE
    uv.user_id NOT IN (SELECT user_id FROM not_allowed_groups)
    AND uv.visited_at::DATE BETWEEN :start_date AND :end_date
GROUP BY date_trunc('month', uv.visited_at)::DATE
ORDER BY date_trunc('month', uv.visited_at)::DATE

Vielen Dank, aber nicht ganz… Wir hätten gerne die Anzahl der aktiven Benutzer (registriert und nicht deaktiviert oder gelöscht) am Ende jedes Kalendermonats, unabhängig davon, ob sie die Plattform in diesem Monat besucht haben oder nicht.

Wir betrachten die Anmeldungsübersicht, aber die Summe der Anmeldungen während eines bestimmten Monats spiegelt unsere Benutzerbasis nicht wider, da wir jeden Monat auch automatische Deaktivierungen aufgrund von Inaktivität haben. Ich frage mich, ob der einzige Weg darin besteht, auf retrospektive Benutzerlistenexporte für bestimmte Daten zuzugreifen? Aber da wir Cloud-gehostet sind, weiß ich nicht, ob wir darauf Zugriff haben. Müssen wir dies bei Discourse beantragen?

Ich bin Discourse. :slight_smile:
Sie können entweder hier fragen oder uns direkt unter team@discourse.org eine E-Mail senden. Jemand mit besseren SQL-Kenntnissen kann Ihnen helfen.

4 „Gefällt mir“

Mir war nicht bewusst, da ich neu in diesem Forum bin, danke! Haben Sie zufällig gespeicherte historische Backups von Cloud-gehosteten Websites, die Sie auf Anfrage zur Verfügung stellen könnten?

1 „Gefällt mir“

Wir speichern Backups zur Geschäftskontinuität, und sie können im Notfall wiederhergestellt werden, aber nicht wirklich aus anderen Gründen.

1 „Gefällt mir“

Ok, ich habe eine weitere Idee. Ich habe unseren KI-Helfer gefragt.

SQL-Abfrage für aktive Benutzer nach Monat KI

HAWK:
Schreiben Sie mir eine Data Explorer-Abfrage, die eine Liste von Benutzerkonten zurückgibt, die noch aktiv sind und innerhalb eines bestimmten Monats registriert wurden.

DiscourseHelper:

Suche

Suche nach: Discourse Data Explorer-Abfrage zum Finden aktiver Benutzer, die in einem bestimmten Monat registriert wurden

Lesen

Gelesen: Aktive Benutzer für bestimmte Monate

Um eine Data Explorer-Abfrage zu erstellen, die eine Liste von Benutzerkonten zurückgibt, die noch aktiv sind und innerhalb eines bestimmten Monats registriert wurden, können Sie die folgende SQL-Abfrage verwenden. Diese Abfrage geht davon aus, dass ein aktiver Benutzer jemand ist, der innerhalb eines bestimmten Zeitraums einen Beitrag oder eine Antwort verfasst hat.

--[params]
-- int :month = 5
-- int :year = 2023

SELECT u.id, u.username, u.created_at, u.last_seen_at
FROM users u
WHERE u.active = TRUE
  AND EXTRACT(MONTH FROM u.created_at) = :month
  AND EXTRACT(YEAR FROM u.created_at) = :year
  AND u.last_seen_at IS NOT NULL -- Geht davon aus, dass aktiv bedeutet, dass sie sich kürzlich auf der Website angemeldet haben
ORDER BY u.created_at

Erklärung der Abfrage:

  • :month und :year sind Parameter, die Sie festlegen können, um nach dem spezifischen Monat und Jahr zu filtern.
  • u.active = TRUE stellt sicher, dass das Benutzerkonto noch aktiv ist.
  • EXTRACT(MONTH FROM u.created_at) = :month und EXTRACT(YEAR FROM u.created_at) = :year filtern das Registrierungsdatum auf den angegebenen Monat und das angegebene Jahr.
  • u.last_seen_at IS NOT NULL betrachtet den Benutzer als aktiv, wenn er sich jemals angemeldet hat.
  • Das Ergebnis liefert Benutzer-ID, Benutzernamen, Registrierungsdatum und Datum der letzten Anmeldung.

Passen Sie die Parameter und Felder gerne nach Ihren Bedürfnissen an. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen!

Geben Sie ihm gerne weiteren Kontext, falls mir etwas fehlt.

3 „Gefällt mir“

Dies ist eine großartige Abfrageerklärung, vielen Dank! Leider bin ich mir nicht sicher, ob es das ist, was wir suchen.

Wenn ich zum Beispiel die Parameter 01 und 2024 eingebe, schaue ich auf Januar dieses Jahres.
Ich verstehe, dass die Ausgabe alle Benutzer enthält, die sich im Januar angemeldet haben und heute noch aktiv sind. Ist das richtig?

Aber wir wollen die Anzahl der Personen, die seit dem Start jeden Monat u.active=TRUE hatten (nicht jetzt). Dann können wir plotten und zeigen, wie sich unsere Benutzerbasis von Monat zu Monat verändert hat. Am Ende jedes Monats wäre das für uns:

Aktive Benutzer = Wert des Vormonats + Neuanmeldungen - Neulöschungen - Neu deaktivierungen

Ich sehe im Data Explorer nichts über Deaktivierungen oder Daten, die mit der aktiven Variablen verknüpft sind. Der wahrscheinlichste Weg wäre dann, die Mitarbeiteraktionsprotokolle zu verwenden und nach Datum zu analysieren, ABER ich glaube nicht, dass die Exportfunktion für uns funktioniert. Wenn wir die Ergebnisse des Mitarbeiteraktionsprotokolls exportieren, erhalten wir seltsamerweise eine Tabelle mit dem Inhalt verschiedener Beiträge, nicht eine Tabelle mit Mitarbeiteraktionen. Wenn Sie uns dabei helfen könnten, wäre das vielleicht eine alternative Lösung! :slight_smile: Sind Ihnen andere bekannt, die das gleiche Problem haben?

Eine interessante Frage.

Ich habe mir zuerst das Beispiel hier angesehen. Aber das ignoriert gelöschte Benutzer. Man erhält nur die Anzahl der Benutzer, die zu diesem Zeitpunkt registriert waren und es immer noch sind, nicht aber diejenigen, die in der Zwischenzeit gelöscht wurden.
Meine Idee war daher, die ID des Benutzers zu nehmen, der zuletzt im Monat registriert wurde. Das ist die maximal mögliche Anzahl von Benutzern zu diesem Zeitpunkt. Davon kann dann die Anzahl der gelöschten Benutzer abgezogen werden. Bot-Konten (wie forum-helper) haben jedoch eine negative ID, werden aber mitgezählt, wenn sie gelöscht werden. (Das ist aber wahrscheinlich eine geringfügige Abweichung). Meine Abfrage war:

-- [params]
-- date :start_date
-- date :end_date


WITH month_dates AS (
    -- Generate end-of-month dates between the start and end date
    SELECT DATE_TRUNC('month', generate_series)::date + INTERVAL '1 month' - INTERVAL '1 day' AS month_end
    FROM generate_series(:start_date::date, :end_date::date, '1 month'::interval)
),
recent_user AS (
    -- For each end-of-month date, find the most recent user created before that date
    SELECT md.month_end,
           (SELECT id
            FROM users u
            WHERE u.created_at < md.month_end
            ORDER BY u.created_at DESC
            LIMIT 1) AS user_max_id
    FROM month_dates md
),
cumulative_deletion_count AS (
    -- Calculate the cumulative deletions up to each end-of-month date
    SELECT md.month_end,
           (SELECT COUNT(*)
            FROM user_histories uh
            WHERE uh.action = 1 AND uh.updated_at < md.month_end) AS deletions_count
    FROM month_dates md
)
SELECT
    md.month_end,
    ru.user_max_id,
    cdc.deletions_count,
    ru.user_max_id - cdc.deletions_count AS number_of_users
FROM
    month_dates md
LEFT JOIN recent_user ru ON md.month_end = ru.month_end
LEFT JOIN cumulative_deletion_count cdc ON md.month_end = cdc.month_end
ORDER BY md.month_end

Was sie aber nicht berücksichtigt, ist die (De-)Aktivierung, die ebenfalls in der Tabelle user_histories gespeichert ist. Aber vielleicht hilft sie Ihnen als Ausgangspunkt.

5 „Gefällt mir“

Hallo @marvi,
Ich wollte nur fragen, ob @Moin’s Antwort für Sie funktioniert?