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 CTEfiltered_topicsidentifizierten 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 |