دليل مرجعي لتقرير لوحة تحكم المشرف

:bookmark: هذا دليل مرجعي يصف كيفية عمل تقارير لوحة تحكم المسؤول، والبيانات التي تعرضها، واستعلامات SQL المقابلة في Data Explorer، وأين يمكن العثور على كود Ruby لكل تقرير.

:person_raising_hand: مستوى المستخدم المطلوب: موظف

يحتوي Discourse على عدة تقارير مدمجة في لوحة تحكم المسؤول يمكن أن تكون مفيدة لاستكشاف إحصائيات حول المجتمع. للوصول إلى هذه التقارير، يمكنك زيارة discourse.example.com/admin/dashboard/reports في موقعك (أو النقر على رابط التقارير في أعلى لوحة التحكم). تجدر الإشارة إلى أن فقط المستخدمين من فئة الموظفين سيكون لديهم حق الوصول إلى هذه التقارير.

تتضمن البيانات الواردة في هذه التقارير جميع المستخدمين في الموقع (بما في ذلك نشاط الموظفين مثل زيارة صفحات الإدارة). الشرط الوحيد المفروض على المستخدمين في التقارير هو أن يكونوا مستخدمين “حقيقيين”، وهو ما يُستخدم لاستبعاد مستخدم system من التقارير.

يمكن للإضافات أيضًا إضافة تقارير إلى لوحة التحكم باستخدام add_report(name, &block).

:gem: تقع نماذج Ruby لمعظم التقارير في: discourse/app/models/concerns/reports/. تشير بعض التقارير أيضًا إلى: discourse/app/models/report.rb

:bulb: تحتوي مواضيع dashboard-sql على جميع استعلامات SQL المقابلة التي يمكن استخدامها لتوليد تقارير مطابقة لتقارير لوحة تحكم المسؤول. يمكن استخدام هذه الاستعلامات داخل إضافة Data Explorer ولـ تشغيل استعلامات Data Explorer باستخدام واجهة برمجة تطبيقات Discourse

:wrench: لإخفاء تقارير محددة من لوحة التحكم، استخدم إعداد الموقع dashboard_hidden_reports.

الحلول المقبولة

يعرض الإحصاء اليومي للمشاركات التي تم تحديدها كحلول.

كود Ruby: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub

استعلام SQL: Dashboard Report - Accepted Solutions

تسجيلات دخول المسؤولين

قائمة بأوقات تسجيل دخول المسؤولين مع مواقعهم.

كود Ruby: discourse/app/models/concerns/reports/staff_logins.rb

استعلام SQL: Dashboard Report - Admin Logins

مجهول

عدد المشاهدات الجديدة للصفحات من زوار غير مسجلين في حساب.

كود Ruby: discourse/app/models/concerns/reports/consolidated_page_views.rb

استعلام SQL: Dashboard Report - Anonymous

الإشارات المرجعية

عدد المواضيع والمشاركات الجديدة التي تم وضع إشارات مرجعية عليها.

كود Ruby: discourse/app/models/concerns/reports/bookmarks.rb

استعلام SQL: Dashboard Report - Bookmarks

طلبات واجهة برمجة التطبيقات المدمجة

إحصائيات استخدام واجهة برمجة التطبيقات حسب التاريخ، وتتبع كل من طلبات واجهة برمجة التطبيقات العادية وطلبات واجهة برمجة التطبيقات الخاصة بالمستخدم.

كود Ruby: discourse/app/models/concerns/reports/consolidated_api_requests.rb at main · discourse/discourse · GitHub

استعلام SQL: Dashboard Report - Consolidated API Requests

مشاهدات الصفحات المدمجة

مشاهدات الصفحات للمستخدمين المسجلين، والمستخدمين المجهولين، ومحركات الزحف. هذا تقرير قديم تم استبداله بتقرير حركة مرور الموقع.

كود Ruby: discourse/app/models/concerns/reports/consolidated_page_views.rb

استعلام SQL: Dashboard Report - Consolidated Pageviews

مشاهدات الصفحات المدمجة مع كشف المتصفح (مهجور)

مشاهدات الصفحات للمستخدمين المسجلين، والمستخدمين المجهولين، ومحركات الزحف المعروفة، وغيرها. تم إهمال هذا التقرير الآن ويتم تفويضه إلى تقرير حركة مرور الموقع.

كود Ruby: discourse/app/models/concerns/reports/consolidated_page_views_browser_detection.rb

استعلام SQL: Dashboard Report - Consolidated Pageviews with Browser Detection

DAU/MAU

عدد الأعضاء الذين قاموا بتسجيل الدخول في اليوم الأخير مقسومًا على عدد الأعضاء الذين قاموا بتسجيل الدخول في الشهر الأخير – يعيد نسبة مئوية تشير إلى “التشبث” بالمجتمع. استهدف >20%.

كود Ruby: discourse/app/models/concerns/reports/dau_by_mau.rb

استعلام SQL: Dashboard Report - DAU/MAU

المستخدمين النشطين يوميًا

عدد المستخدمين الذين قاموا بالإعجاب أو النشر في اليوم الأخير.

كود Ruby: discourse/app/models/concerns/reports/daily_engaged_users.rb

استعلام SQL: Dashboard Report - Daily Engaged Users

البريد الإلكتروني المُرسل

عدد رسائل البريد الإلكتروني الجديدة المرسلة.

كود Ruby: discourse/app/models/concerns/reports/emails.rb

استعلام SQL: Dashboard Report - Emails Sent

الأعلام

عدد الأعلام الجديدة.

كود Ruby: discourse/app/models/concerns/reports/flags.rb

استعلام SQL: Dashboard Report - Flags

حالة الأعلام

قائمة بحالات الأعلام بما في ذلك نوع العلم، والناشر، والمُعلم، والوقت المستغرق للحل.

كود Ruby: discourse/app/models/concerns/reports/flags_status.rb

استعلام SQL: Dashboard Report - Flags Status

الإعجابات

عدد الإعجابات الجديدة.

كود Ruby: discourse/app/models/concerns/reports/likes.rb

استعلام SQL: Dashboard Report - Likes

تسجيل الدخول

عدد المشاهدات الجديدة للصفحات من المستخدمين المسجلين.

كود Ruby: discourse/app/controllers/admin/reports_controller.rb#L5

استعلام SQL: Dashboard Report - Logged In

نشاط المشرفين

قائمة بنشاط المشرفين بما في ذلك الأعلام التي تم مراجعتها، ووقت القراءة، والمواضيع المنشأة، والمشاركات المنشأة، والرسائل الخاصة المنشأة، والمراجعات.

استعلام SQL: Dashboard Report - Moderator Activity

تحذير المشرفين

عدد التحذيرات المرسلة عبر الرسائل الخاصة من المشرفين.

كود Ruby: discourse/app/models/concerns/reports/moderator_warning_private_messages.rb

استعلام SQL: Dashboard Report - Moderator Warnings

المساهمون الجدد

عدد المستخدمين الذين نشروا مشاركتهم الأولى خلال هذه الفترة.

كود Ruby: discourse/app/models/concerns/reports/new_contributors.rb

استعلام SQL: Dashboard Report - New Contributors

إشعار المشرفين

عدد المرات التي تم فيها إشعار المشرفين بشكل خاص بواسطة علم.

كود Ruby: discourse/app/models/concerns/reports/notify_moderators_private_messages.rb

استعلام SQL: Dashboard Report - Notify Moderators

إشعار المستخدم

عدد المرات التي تم فيها إشعار المستخدمين بشكل خاص بواسطة علم.

كود Ruby: discourse/app/models/concerns/reports/notify_user_private_messages.rb

استعلام SQL: Dashboard Report - Notify User

المشاعر العامة

عدد المشاركات المصنفة إما إيجابية أو سلبية باستخدام الذكاء الاصطناعي “المشاعر”، خلال فترة محددة.

كود Ruby: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

استعلام SQL: تقرير لوحة التحكم - المشاعر العامة

مشاهدات الصفحات

عدد المشاهدات الجديدة للصفحات من جميع الزوار. نفس الإجمالي لمشاهدات الصفحات المدمجة.

يستخدم Discourse الاستعلام التالي لتحديد إجمالي مشاهدات الصفحات:

استعلام SQL: Dashboard Report - Consolidated Pageviews

تعديلات المشاركات

عدد تعديلات المشاركات الجديدة.

كود Ruby: discourse/app/models/concerns/reports/post_edits.rb

استعلام SQL: Dashboard Report - Post Edits

المشاركات

المشاركات الجديدة التي تم إنشاؤها خلال الفترة الزمنية المحددة.

كود Ruby: discourse/app/models/concerns/reports/posts.rb

استعلام SQL: Dashboard Report - Posts

عاطفة المشاركة

عدد المشاركات المصنفة بواسطة الذكاء الاصطناعي بأحد المشاعر التالية: الحزن، المفاجأة، الخوف، الغضب، الفرح، الاشمئزاز - تجميع حسب مستوى ثقة الناشر، خلال فترة محددة.

كود Ruby: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

استعلام SQL: تقرير لوحة التحكم - عاطفة المشاركة

التفاعلات

قائمة أحدث التفاعلات.

كود Ruby: discourse-reactions/plugin.rb at main · discourse/discourse-reactions · GitHub

استعلام SQL: Dashboard Report - Reactions

الاشتراكات

تسجيلات الحسابات الجديدة لهذه الفترة.

كود Ruby: discourse/app/models/concerns/reports/signups.rb

استعلام SQL: Dashboard Report - Signups

حركة مرور الموقع

مشاهدات الصفحات للمتصفحات المسجلة، والمتصفحات المجهولة، ومحركات الزحف، وحركة المرور الأخرى. هذا هو تقرير حركة المرور الأساسي، ويحل محل تقارير مشاهدات الصفحات المدمجة القديمة.

كود Ruby: discourse/app/models/concerns/reports/site_traffic.rb

استعلام SQL: تقرير لوحة التحكم - حركة مرور الموقع

تسجيلات الدخول المشبوهة

تفاصيل تسجيلات الدخول الجديدة التي تختلف بشكل مشبوه عن تسجيلات الدخول السابقة.

كود Ruby: discourse/app/models/concerns/reports/suspicious_logins.rb

استعلام SQL: Dashboard Report - Suspicious Logins

النظام

عدد الرسائل الخاصة المرسلة تلقائيًا بواسطة النظام.

كود Ruby: discourse/app/models/concerns/reports/system_private_messages.rb

استعلام SQL: Dashboard Report - System

الوقت المستغرق للاستجابة الأولى

متوسط الوقت (بالساعات) للاستجابة الأولى للمواضيع الجديدة.

كود Ruby: discourse/app/models/concerns/reports/time_to_first_response.rb + discourse/discourse/blob/main/app/models/topic.rb#L1799-L1844

استعلام SQL: Dashboard Report - Time to First Response

أعلى المستخدمين تجاهلًا / إسكاتًا

المستخدمون الذين تم تجاهلهم و/أو إسكاتهم من قبل العديد من المستخدمين الآخرين.

كود Ruby: discourse/app/models/concerns/reports/top_ignored_users.rb

استعلام SQL: Dashboard Report - Top Ignored / Muted Users

المواضيع الأكثر إحالةً

المواضيع التي تلقت أكبر عدد من النقرات من مصادر خارجية.

كود Ruby: discourse/app/models/concerns/reports/top_referred_topics.rb

استعلام SQL: Dashboard Report - Top Referred Topics

أعلى الموجهين

المستخدمون المدرجون حسب عدد النقرات على الروابط التي شاركوها.

كود Ruby: discourse/app/models/concerns/reports/top_referrers.rb

استعلام SQL: Dashboard Report - Top Referrers

أعلى مصادر حركة المرور

المصادر الخارجية التي ربطت بهذا الموقع أكثر من غيرها.

كود Ruby: discourse/app/models/concerns/reports/top_traffic_sources.rb

استعلام SQL: Dashboard Report - Top Traffic Sources

أعلى الملفات المرفوعة

قائمة بجميع الملفات المرفوعة حسب الامتداد، وحجم الملف، والمؤلف.

كود Ruby: discourse/app/models/concerns/reports/top_uploads.rb

استعلام SQL: Dashboard Report - Top Uploads

أعلى المستخدمين حسب الإعجابات المستلمة

أعلى 10 مستخدمين تلقوا إعجابات.

كود Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received.rb

استعلام SQL: Dashboard Report - Top Users by Likes Received

أعلى المستخدمين حسب الإعجابات المستلمة من مستخدم بمستوى ثقة أقل

أعلى 10 مستخدمين في مستوى ثقة أعلى تم إعجابهم من قبل أشخاص في مستوى ثقة أقل.

كود Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received_from_inferior_trust_level.rb

استعلام SQL: Dashboard Report - Top Users by Likes Received from a User with a Lower Trust Level

أعلى المستخدمين حسب الإعجابات المستلمة من مجموعة متنوعة من الأشخاص

أعلى 10 مستخدمين تلقوا إعجابات من مجموعة واسعة من الأشخاص.

كود Ruby: discourse/app/models/concerns/reports/top_users_by_likes_received_from_a_variety_of_people.rb

استعلام SQL: Dashboard Report - Top Users by Likes Received From a Variety of People

المواضيع

المواضيع الجديدة التي تم إنشاؤها خلال هذه الفترة.

كود Ruby: discourse/app/models/concerns/reports/topics.rb

استعلام SQL: Dashboard Report - Topics

المواضيع بدون استجابة

عدد المواضيع الجديدة التي تم إنشاؤها ولم تتلق استجابة.

كود Ruby: discourse/app/models/concerns/reports/topics_with_no_response.rb

استعلام SQL: Dashboard Report - Topics with No Response

إحصائيات مشاهدة المواضيع

أعلى 100 موضوع حسب المشاهدات مع تفصيل للمستخدمين المجهولين والمسجلين، قابلة للفلترة حسب الفئة.

كود Ruby: discourse/app/models/concerns/reports/topic_view_stats.rb

استعلام SQL: تقرير لوحة التحكم - إحصائيات مشاهدة المواضيع

مصطلحات البحث الرائجة

أكثر مصطلحات البحث شيوعًا مع معدلات النقر إليها.

كود Ruby: discourse/app/models/concerns/reports/trending_search.rb

استعلام SQL: Dashboard Report - Trending Search Terms

نمو مستوى الثقة

عدد المستخدمين الذين زادوا مستوى ثقتهم خلال هذه الفترة.

يستخرج تقرير نمو مستوى الثقة البيانات من جدول user_histories في قاعدة بيانات Discourse. تحديدًا، يقوم هذا التقرير بعد عدد المرات التي تم فيها تسجيل user_histories.action لزيادة مستوى ثقة المستخدم.

كود Ruby: discourse/app/models/concerns/reports/trust_level_growth.rb

استعلام SQL: Dashboard Report - Trust Level Growth

السياسات غير المقبولة

يحدد هذا التقرير في لوحة التحكم المواضيع التي تحتوي على سياسات لم يقبلها مستخدمون معينون.

كود Ruby: discourse-policy/plugin.rb at main · discourse/discourse-policy · GitHub

استعلام SQL: Dashboard Report - Unaccepted Policies

نسبة تصويت المستخدمين

قائمة بالمستخدمين مرتبة حسب نسبة استجابة الموظفين لأعلامهم (خلاف متفق عليه).

كود Ruby: discourse/app/models/concerns/reports/user_flagging_ratio.rb

استعلام SQL: Dashboard Report - User Flagging Ratio

ملاحظات المستخدم

قائمة أحدث ملاحظات المستخدم.

كود Ruby: discourse-user-notes/plugin.rb at main · discourse/discourse-user-notes · GitHub

استعلام SQL: Dashboard Report - User Notes

مشاهدات ملف المستخدم

إجمالي المشاهدات الجديدة لملفات المستخدمين.

كود Ruby: discourse/app/models/concerns/reports/profile_views.rb

استعلام SQL: Dashboard Report - User Profile Views

زيارات المستخدم

إجمالي عدد زيارات المستخدمين المسجلين في المنتدى خلال الفترة الزمنية المحددة (اليوم، أمس، آخر 7 أيام، إلخ).

تُحتسب زيارة المستخدم في أي وقت يزور فيه مستخدم مسجل فريد الموقع، حتى مرة واحدة يوميًا. على سبيل المثال، إذا زار مستخدم موقعًا كل يوم خلال أسبوع، فسيحتسب Discourse ذلك كـ 7 زيارات للمستخدم.

كود Ruby: discourse/app/models/concerns/reports/visits.rb

استعلام SQL: Dashboard Report - User Visits

زيارات المستخدم (على الهاتف المحمول)

عدد المستخدمين المسجلين الفريدين الذين زاروا الموقع باستخدام جهاز محمول.

كود Ruby: discourse/app/models/concerns/reports/mobile_visits.rb

استعلام SQL: Dashboard Report - User Visits

من مستخدم إلى مستخدم (باستثناء الردود)

عدد الرسائل الخاصة الجديدة التي تم initiatingها.

كود Ruby: discourse/app/models/concerns/reports/user_to_user_private_messages.rb

استعلام SQL: Dashboard Report - User-to-User

من مستخدم إلى مستخدم (مع الردود)

عدد جميع الرسائل الخاصة والردود الجديدة.

كود Ruby: discourse/app/models/concerns/reports/user_to_user_private_messages_with_replies.rb

استعلام SQL: Dashboard Report - User-to-User

المستخدمين حسب مستوى الثقة

عدد المستخدمين المصنفين حسب مستوى الثقة.

كود Ruby: discourse/app/models/concerns/reports/users_by_trust_level.rb

استعلام SQL: Dashboard Report - Users Per Trust Level

المستخدمين حسب النوع

عدد المستخدمين المصنفين حسب المسؤول، المشرف، المعلق، والمُصمت.

كود Ruby: discourse/app/models/concerns/reports/users_by_type.rb

استعلام SQL: Dashboard Report - Users Per Type

مشاهدات صفحات محركات الزحف على الويب

إجمالي مشاهدات الصفحات من محركات الزحف على الويب بمرور الوقت.

كود Ruby: discourse/app/models/report.rb

استعلام SQL: Dashboard Report - Web Crawler Pageviews

وكلاء مستخدم محركات الزحف على الويب

قائمة بوكلاء مستخدم محركات الزحف على الويب، مرتبة حسب مشاهدات الصفحات.

كود Ruby: discourse/app/models/concerns/reports/web_crawlers.rb

استعلام SQL: Dashboard Report - Web Crawler User Agents

18 إعجابًا

لا أرى رابطًا لهذا في /admin. هل أفشل في القراءة؟ يبدو أن هذا يجب أن يكون أكثر قابلية للاكتشاف. أعتقد أنني كنت أعرف أن هذه التقارير كانت هنا ولكنني بحثت ولم أتمكن من العثور عليها.

على الرغم من أن الأمر استغرق مني بضع دقائق فقط للعثور عليه، إلا أنه قد يكون من الجيد إضافة شيء مثل

3 إعجابات

نعم، قد يكون من الجيد ذكرها في رسالة خاصة للموظفين عند إنشاء موقع لأول مرة. :thinking:

إعجاب واحد (1)

:crying_cat_face:

آسف. بالتأكيد اعتقدت أنني رأيتها في مكان ما من قبل.

لا يمكنك جعل الناس يقرؤون الأشياء. . . . باستثناء أنه يمكنني قراءة الكود المصدري لمعرفة كيفية القيام بذلك في إضافة؟

ولكن ربما قم بتحديث ما سبق إلى

أعتقد أن هذا قد يكون ما أربكني حقًا. (ولكن لا، ليس لدي عذر.)

لقد جعلت الموضوع ويكي، تفضل! :+1:

إعجابَين (2)

هذا لا يتطابق مع واجهة المستخدم (تستخدم الواجهة 20%)، أيهما يجب أن يكون؟

إعجابَين (2)

تم اكتشاف ذلك جيدًا. تم تحديثه مؤخرًا إلى 20٪. سأقوم بإجراء التغيير في المنشور الأصلي. :slight_smile: :+1:

إعجابَين (2)

مرحباً @SaraDev هل يمكن الحصول على مخرجات هذا التقرير باستخدام استعلام SQL؟ هل يمكنك مشاركته؟
شكراً

إعجاب واحد (1)

نعم، يمكنك استخدام تقرير SQL التالي لأهم مصادر الزيارات:

-- [params]
-- date :start_date = 01/05/2023
-- date :end_date = 03/06/2023

WITH count_links AS (

SELECT COUNT(*) AS clicks,
       ind.name AS domain
FROM incoming_links il
  INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
  INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
  INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
  INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at::date BETWEEN :start_date AND :end_date
GROUP BY ind.name
ORDER BY clicks DESC
),

count_topics AS (

SELECT COUNT(DISTINCT p.topic_id) AS topics,
       ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at > (CURRENT_TIMESTAMP - INTERVAL '30 DAYS')
GROUP BY ind.name
)

SELECT cl.domain,
       cl.clicks AS "Clicks",
       ct.topics AS "Topics"
FROM count_links cl
JOIN count_topics ct ON cl.domain = ct.domain
LIMIT 10

مع هذا الاستعلام، لاحظ أن معلمات التاريخ تقبل التواريخ بالتنسيق يوم/شهر/سنة.

إعجاب واحد (1)

مرحباً @SaraDev، شكراً لمشاركتك الاستعلام.
سؤال أعم حول هذا التقرير، وجدول incoming_links في الواقع - إنه يمثل الزيارات لصفحات المنشورات فقط وليس الزيارات لجميع صفحات المنتدى، صحيح؟

السياق: أنا أتطلع إلى تحليل اتجاهات الزيارات الإجمالية للمنتدى وكنت آمل في الحصول على الزيارات الإجمالية حسب المصادر من تقرير مصادر الزيارات الأعلى.
ولكن بينما الزيارات الإجمالية حوالي 272 ألف في الشهر الماضي (للمستخدمين والمجهولين)، فإن إجمالي النقرات في تقرير مصادر الزيارات لنفس الإطار الزمني هو 59 ألف فقط.
أيضاً، أرى أنك تستخدم inner join مع جدولي topics و posts مما يعني أنه إذا لم يكن هناك post_id مرتبط بالنقرة، فلن تحتسبها.

هل يمكنك تأكيد استنتاجي وربما شرح المنطق وراء جدول incoming_links؟

مرحباً @SaraDev لقد قمت بتشغيل هذا الاستعلام والنتيجة لا تتطابق تمامًا مع تقرير المشاركات في علامة التبويب العامة.
على سبيل المثال في 30 نوفمبر:
الاستعلام = 112 مشاركة
التقرير = 120 مشاركة
هل يمكنك التحقق من الفجوة؟
شكرا

إعجاب واحد (1)

فقط للعلم @Yotam_Hagay - على الرغم من أن سارة هي صاحبة الموضوع الأصلي، إلا أن الدليل هو مسؤولية الجميع :slight_smile: :discourse: لا داعي لذكر @ على كل مشاركة. :slight_smile:

إعجابَين (2)

شكرا @JammyDodger للتوضيح.
هل هناك أي شخص آخر يمكنني الإشارة إليه أو اللجوء إليه للحصول على إجابة؟

إعجاب واحد (1)

نتائج هذا الاستعلام مختلفة قليلاً عن تقرير وقت الاستجابة الأولية:
في 8 نوفمبر على سبيل المثال:
الاستعلام: 93 ساعة
التقرير: 116 ساعة
هل يمكن لأحد أن ينصحني؟

إعجاب واحد (1)

أعتقد أن بعض هذه قد تستغرق بعض الوقت للبحث فيها. أنا ألقي نظرة عليها بنفسي لمعرفة ما يجري (على الرغم من أن الفجوة بين مهاراتي في SQL ومهاراتي في Ruby كبيرة جدًا :slight_smile:).

لكن استمر في تقديم النتائج حيث سيكون من الرائع ترسيخ كل هذه المعلومات. :+1:

إعجابَين (2)

بالنسبة لمنشورات، أعتقد أن تقرير المخزون يحسب أيضًا منشورات الموضوع بالإضافة إلى تلك الخاصة بالمستخدمين النظام، ولكنه يستهدف فقط تلك التي تحتوي على post_type 1 (أي، ليست همسات أو منشورات إجراءات صغيرة أو إجراءات مشرف).

أعتقد أن استعلام SQL سيبدو كالتالي:

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

SELECT
    p.created_at::date AS "اليوم",
    COUNT(p.id) AS "العدد"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1

هل يمكنك تشغيل ذلك على موقعك ومعرفة ما إذا كان يتطابق؟

إعجابَين (2)

شكرًا جيمي، سأتحقق!
أعمل حاليًا على تحليل الوقت المستغرق لأول استجابة، لذا سأكون ممتنًا لو أمكنك إلقاء نظرة على هذا أيضًا.

إعجاب واحد (1)

بالنظر إلى إصدار SQL، أعتقد أنه يفتقد AND p.user_id <> t.user_id لاستبعاد الردود من المنشئ الأصلي للموضوع. إذا أضفت ذلك، فإنه يعطيني الوقت الدقيق بين المنشئ الأصلي للموضوع والاستجابة الأولى من شخص آخر:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT
        p.topic_id,
        MIN(post_number) post_number,
        t.created_at
    FROM posts p
    INNER JOIN topics t ON (p.topic_id = t.id)
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_number != 1
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
    ORDER BY 2 DESC
)

SELECT
    p.topic_id,
    fr.created_at::date dt_topic_created,
    (p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr
    ON fr.topic_id = p.topic_id
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
ORDER BY response_time

أعتقد أيضًا أن تقرير المخزون بالكسور العشرية بدلاً من الساعات والدقائق كما في SQL. سأحاول مرة أخرى لجعله مطابقًا. :+1:


تحديث صغير لتضمين AVG ليكون أكثر تشابهًا مع ناتج تقرير المخزون:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT
        p.topic_id,
        MIN(post_number) post_number,
        t.created_at
    FROM posts p
    INNER JOIN topics t ON p.topic_id = t.id
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
)

SELECT
    fr.created_at::date dt_topic_created,
    AVG(p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr
    ON fr.topic_id = p.topic_id
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
GROUP BY fr.created_at::date
ORDER BY response_time

يبدو أن هذا يتوافق مع تقرير المخزون طالما أنك تأخذ في الاعتبار أن أحدهما بالكسور العشرية والآخر بالساعات والدقائق. أنا متأكد من وجود طريقة لتحويل response_time في SQL إلى كسور عشرية، لكن الساعات والدقائق تبدو طريقة أكثر بديهية للقيام بذلك. (أعتقد أن هناك أيضًا بعض المعايير الإضافية التي قد لا تكون ضرورية، ولكنها قد تكون أيضًا إجراءً وقائيًا ضد الظروف غير العادية، لذلك تركت تلك الأجزاء كما هي في النهاية حتى أتمكن من التأكيد بشكل قاطع :slight_smile:)

هل يمكنك تشغيل هذا ومعرفة كيف يتطابق؟

4 إعجابات

نعم، أصبح المجموع الآن مطابقًا للأرقام المعروضة في تقرير المخزون، شكرًا لك!
تعليق واحد فقط -
وجدت أن دالة AVG أدناه تُرجع نتائج مفقودة في حالة تجاوز الوقت 24 ساعة (أعتقد أن قسم عدد الأيام مفقود).

AVG(p.created_at - fr.created_at)::time response_time

إعجاب واحد (1)

نعم، كان تحويل النوع إلى time اختيارًا سيئًا. :slight_smile: إذا قمت بإزالة ::time، فسيعود إلى الإصدار الأكثر دقة (وإن كان أكثر صعوبة على العين).

سأقوم بتحرير ما ورد أعلاه أيضًا. :+1:

إعجابَين (2)