تم تصميم تقرير مستكشف البيانات هذا لتحليل متوسط أوقات استجابة أعضاء هيئة الموظفين (المشرفين والمعدلين) للمواضيع التي تم إنشاؤها ضمن نطاق زمني وفئة محددين.
يمكن أن يساعد هذا التقرير في فهم كفاءة واستجابة تفاعلات الموظفين على موقع Discourse، وهو أمر بالغ الأهمية لإدارة المجتمع.
-- [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
يستخدم التقرير العديد من تعبيرات الجدول المشتركة (CTEs) لتقسيم الاستعلام:
filtered_topics: يقوم هذا CTE بتصفية المواضيع بناءً على معلمات الإدخال مثل النطاق الزمني والفئة وما إذا كان سيتم تضمين الفئات الفرعية. يضمن أن المواضيع ذات النمط العادي وغير المحذوفة فقط هي التي يتم النظر فيها.staff_replies: يحدد هذا CTE أول رد تم تقديمه بواسطة عضو هيئة موظفين (إما مشرف أو معدل) للمواضيع المحددة في CTEfiltered_topics. يقوم بتصفية المشاركات المحذوفة ويعتبر فقط المشاركات الرئيسية (post_type = 1).response_times: يحسب هذا CTE وقت الاستجابة عن طريق إيجاد الفرق بين وقت إنشاء الموضوع وأول وقت رد من قبل الموظفين. يتم تحويل النتيجة من ثوانٍ إلى ساعات.
الجملة SELECT النهائية من CTE response_times تجلب معرف الموضوع، ومعرف الفئة، وتاريخ إنشاء الموضوع، ووقت استجابة الموظفين المحسوب بالساعات، وترتيب النتائج حسب تاريخ إنشاء الموضوع.
المعلمات
start_date(date): تاريخ بداية الفترة التي سيتم تحليل إنشاء المواضيع فيها.end_date(date): تاريخ نهاية الفترة التي سيتم تحليل إنشاء المواضيع فيها.categories(int_list): قائمة بمعرفات الفئات لتصفية المواضيع. إذا تم تعيينها على 0، يتم تضمين جميع الفئات.include_subcategories(boolean): علامة لتحديد ما إذا كان سيتم تضمين الفئات الفرعية للفئات المحددة في التحليل.
النتائج
topic_id: المعرف الفريد للموضوع.category_id: الفئة التي ينتمي إليها الموضوع.topic_created_at: تاريخ إنشاء الموضوع.staff_response_time_hours: الوقت الذي استغرقه الموظفون للرد على الموضوع بالساعات. تشير القيمة NULL إلى عدم وجود رد من الموظفين على الموضوع.
نتائج مثال
| 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 |