تقرير لوحة القيادة - ملاحظات المستخدم

هذا هو إصدار SQL لتقرير لوحة المعلومات لملاحظات المستخدم.

:discourse: يتطلب هذا التقرير تمكين المكون الإضافي Discourse User Notes.

يسرد تقرير لوحة المعلومات هذا ملاحظات المستخدم التي أنشأها موظفون في نطاق تاريخي محدد. ملاحظات المستخدم هي تعليقات أو ملاحظات إضافية يضيفها المشرفون أو المسؤولون إلى ملف تعريف المستخدم، وغالبًا ما تُستخدم لتتبع سلوك المستخدم أو مشكلاته أو معلومات مهمة عنه.

-- [params]
-- date :start_date = 2024-01-07
-- date :end_date = 2024-02-08

WITH user_notes AS (
    SELECT
        REPLACE(key, 'notes:', '')::int AS user_id,
        notes.value->>'created_at' AS created_at,
        notes.value->>'raw' AS user_note,
        notes.value->>'created_by' AS created_by
    FROM plugin_store_rows,
    LATERAL json_array_elements(value::json) notes
    WHERE plugin_name = 'user_notes'
    ORDER BY 2 DESC
)
SELECT
    un.user_id,
    un.created_by AS moderator_user_id,
    un.created_at::date,
    un.user_note as html$user_note
FROM user_notes un
JOIN users u ON u.id = un.user_id
WHERE un.created_at BETWEEN :start_date AND :end_date
ORDER BY un.created_at ASC

شرح استعلام SQL

يستخرج هذا التقرير هذه الملاحظات من جدول plugin_store_rows، حيث يتم تخزينها بتنسيق JSON بواسطة المكون الإضافي user_notes، ويعرضها بتنسيق سهل الفهم.

يعمل الاستعلام في عدة خطوات:

  • المعلمات:
    • يبدأ الاستعلام بتعريف معلمتين، :start_date و :end_date، لتحديد الفترة الزمنية للتقرير. تقبل كلتا معلمتي التاريخ تنسيق YYYY-MM-DD.
  • التعبير الجدولي المشترك (CTE) - user_notes: يبدأ الاستعلام بـ CTE يسمى user_notes يستخرج ويحول البيانات ذات الصلة من جدول plugin_store_rows. يخزن هذا الجدول بيانات المكونات الإضافية المختلفة بتنسيق مفتاح-قيمة، حيث يتم مسبوق المفتاح لملاحظات المستخدم بـ notes: متبوعًا بمعرف المستخدم. يقوم CTE بتنفيذ العمليات التالية:
    • يقوم بتصفية الصفوف حيث يكون plugin_name هو 'user_notes'، مما يضمن تحديد بيانات ملاحظات المستخدم فقط.
    • يستخدم الدالة json_array_elements في انضمام جانبي لتوسيع مصفوفة JSON المخزنة في العمود value إلى كائنات JSON فردية، يمثل كل منها ملاحظة.
    • يستخرج معرف المستخدم من المفتاح عن طريق إزالة البادئة notes: وتحويل النتيجة إلى عدد صحيح.
    • يستخرج تاريخ إنشاء الملاحظة، ومحتوى الملاحظة الخام، ومعرف المستخدم الذي أنشأ الملاحظة من كائن JSON.
  • الاستعلام الرئيسي:
    • ينضم CTE user_notes مع جدول users لضمان تضمين الملاحظات للمستخدمين الحاليين فقط.
    • يقوم بتصفية الملاحظات بناءً على تاريخ created_at لتضمين تلك الموجودة ضمن النطاق الزمني المحدد (:start_date إلى :end_date) فقط.
    • يحدد معرف المستخدم، ومعرف المستخدم المشرف (منشئ الملاحظة)، وتاريخ إنشاء الملاحظة، ومحتوى الملاحظة.
    • يقوم بترتيب النتائج حسب تاريخ إنشاء الملاحظة بترتيب تصاعدي لتقديم الملاحظات بترتيب زمني.

نتائج مثال

مستخدم مشرف تاريخ الإنشاء ملاحظة المستخدم
user_1 staff_user_2 2024-01-10 example user note with HTML formatting
user_3 staff_user_4 2024-01-14 this is an example note about user_3
3 إعجابات