Durchschnittliche Antwortzeiten des Personals auf Themen

Dieser Data Explorer-Bericht analysiert die durchschnittlichen Reaktionszeiten von Mitarbeitern (Admins und Moderatoren) auf Themen, die innerhalb eines bestimmten Zeitraums und einer bestimmten Kategorie erstellt wurden.

Dieser Bericht kann helfen, die Effizienz und Reaktionsfähigkeit der Mitarbeiterinteraktionen auf einer Discourse-Site zu verstehen, was für das Community-Management von entscheidender Bedeutung sein kann.

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-01-30
-- int_list :categories = 0
-- boolean :include_subcategories = false

WITH filtered_topics AS (
    SELECT t.id AS topic_id, t.category_id, t.created_at::DATE AS created_at
    FROM topics t
    WHERE
      (
        ':categories' = '0'
        OR t.category_id IN
          (
            SELECT id
            FROM categories
            WHERE id IN(:categories)
              OR (:include_subcategories AND parent_category_id IN(:categories))
          )
      )
      AND t.created_at >= :start_date
      AND t.created_at < :end_date
      AND t.archetype = 'regular'
      AND t.deleted_at IS NULL
),
staff_replies AS (
    SELECT p.topic_id, MIN(p.created_at) AS first_staff_reply
    FROM posts p
    JOIN users u ON p.user_id = u.id
    WHERE (u.admin = true OR u.moderator = true)
      AND p.deleted_at IS NULL
      AND p.post_type = 1
    GROUP BY p.topic_id
),
response_times AS (
    SELECT
        ft.topic_id,
        ft.created_at AS topic_created_at,
        sr.first_staff_reply,
        ft.category_id as category_id,
        EXTRACT(EPOCH FROM (sr.first_staff_reply - ft.created_at)) / 3600 AS response_time_hours
    FROM filtered_topics ft
    LEFT JOIN staff_replies sr ON ft.topic_id = sr.topic_id
)
SELECT
    topic_id,
    category_id,
    topic_created_at,
    response_time_hours as staff_response_time_hours
FROM response_times
ORDER BY topic_created_at ASC

SQL-Abfrageerklärung

Der Bericht verwendet mehrere Common Table Expressions (CTEs), um die Abfrage aufzuschlüsseln:

  • filtered_topics: Diese CTE filtert Themen basierend auf den Eingabeparametern wie Datumsbereich, Kategorie und ob Unterkategorien einbezogen werden sollen. Sie stellt sicher, dass nur nicht gelöschte Themen des regulären Archetyps berücksichtigt werden.
  • staff_replies: Diese CTE identifiziert die erste Antwort eines Mitarbeiters (entweder Admin oder Moderator) auf die in der CTE filtered_topics identifizierten Themen. Sie filtert gelöschte Beiträge heraus und berücksichtigt nur die Hauptbeiträge (post_type = 1).
  • response_times: Diese CTE berechnet die Reaktionszeit, indem sie die Differenz zwischen der Erstellungszeit des Themas und der Zeit der ersten Mitarbeiterantwort ermittelt. Das Ergebnis wird von Sekunden in Stunden umgerechnet.

Die abschließende SELECT-Anweisung aus der CTE response_times ruft die Themen-ID, die Kategorie-ID, das Erstellungsdatum des Themas und die berechnete Mitarbeiterreaktionszeit in Stunden ab und sortiert die Ergebnisse nach dem Erstellungsdatum des Themas.

Parameter

  • start_date (date): Das Anfangsdatum des Zeitraums, für den die Themen-Erstellung analysiert werden soll.
  • end_date (date): Das Enddatum des Zeitraums, für den die Themen-Erstellung analysiert werden soll.
  • categories (int_list): Eine Liste von Kategorie-IDs zur Filterung der Themen. Wenn auf 0 gesetzt, werden alle Kategorien einbezogen.
  • include_subcategories (boolean): Ein Flag, das bestimmt, ob Unterkategorien der angegebenen Kategorien in die Analyse einbezogen werden sollen.

Ergebnisse

  • topic_id: Die eindeutige Kennung des Themas.
  • category_id: Die Kategorie, zu der das Thema gehört.
  • topic_created_at: Das Datum, an dem das Thema erstellt wurde.
  • staff_response_time_hours: Die Zeit in Stunden, die der Mitarbeiter zur Beantwortung des Themas benötigt hat. Ein NULL-Wert bedeutet, dass es keine Antwort des Mitarbeiters auf das Thema gibt.

Beispielergebnisse

topic_id category_id topic_created_at staff_response_time_hours
101 5 2024-01-02 1.5
102 5 2024-01-02 3.2
103 12 2024-01-03 NULL
104 12 2024-01-04 0.75
1 „Gefällt mir“

Gibt es eine einfache Möglichkeit, von Mitarbeitern gestartete Themen auszuschließen?

1 „Gefällt mir“

Ja, Sie können den Bericht wie folgt ändern, um Themen auszuschließen, die von Mitarbeitern erstellt wurden.

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-01-30
-- int_list :categories = 0
-- boolean :include_subcategories = false

WITH staff_users AS (
    SELECT id
    FROM users
    WHERE admin = true OR moderator = true
),
filtered_topics AS (
    SELECT t.id AS topic_id, t.category_id, t.created_at::DATE AS created_at
    FROM topics t
    LEFT JOIN staff_users su ON t.user_id = su.id
    WHERE
      (
        ':categories' = '0'
        OR t.category_id IN
          (
            SELECT id
            FROM categories
            WHERE id IN(:categories)
              OR (:include_subcategories AND parent_category_id IN(:categories))
          )
      )
      AND t.created_at >= :start_date
      AND t.created_at < :end_date
      AND t.archetype = 'regular'
      AND t.deleted_at IS NULL
      AND su.id IS NULL  -- Exclude topics created by staff
),
staff_replies AS (
    SELECT p.topic_id, MIN(p.created_at) AS first_staff_reply
    FROM posts p
    JOIN staff_users su ON p.user_id = su.id
    WHERE p.deleted_at IS NULL
      AND p.post_type = 1
    GROUP BY p.topic_id
),
response_times AS (
    SELECT
        ft.topic_id,
        ft.created_at AS topic_created_at,
        sr.first_staff_reply,
        ft.category_id as category_id,
        EXTRACT(EPOCH FROM (sr.first_staff_reply - ft.created_at)) / 3600 AS response_time_hours
    FROM filtered_topics ft
    LEFT JOIN staff_replies sr ON ft.topic_id = sr.topic_id
)
SELECT
    topic_id,
    category_id,
    topic_created_at,
    response_time_hours as staff_response_time
FROM response_times
ORDER BY topic_created_at ASC

Erklärungen zu den Änderungen:

  1. CTE staff_users: Eine neue CTE wird hinzugefügt, um Benutzer zu identifizieren, die entweder Administratoren oder Moderatoren sind. Dies hilft bei der Filterung von Themen, die in nachfolgenden Schritten von Mitarbeitern erstellt wurden.
  2. CTE filtered_topics: Diese CTE enthält nun einen LEFT JOIN mit der CTE staff_users, um Themen auszuschließen, bei denen die user_id mit der ID eines Mitarbeiters übereinstimmt. Dies geschieht durch die Prüfung su.id IS NULL, die sicherstellt, dass das Thema nicht von einem Mitarbeiter erstellt wurde.
1 „Gefällt mir“

Danke! Das Ergebnis ist jetzt viel ruhiger.

Verdammt, alles ist einfach… wenn man genug Fähigkeiten hat.

1 „Gefällt mir“