عدّ مشاهدات الصفحات للمستخدمين (غير الموظفين، وغير الزواحف)

مرحبًا يا رفاق،

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

  • هل شيء مثل هذا سيعمل؟
  • هل سيأخذ في الاعتبار المشاهدات المجهولة؟
  • أيضًا، هل هناك طريقة لتحويل هذا إلى تقرير؟
-- [params]
-- string :date = '2020-01-01'

WITH t AS (
    SELECT date(:date) AS START
),
f AS (
    SELECT id as user_id
    FROM users u
    WHERE u.moderator = 'True' or u.admin = 'True'
)

    SELECT
    date_part('year', viewed_at) as year,
    date_part('week', viewed_at) as week,
    COUNT(topic_id) AS topics_viewed
    FROM topic_views, t
    WHERE viewed_at > t.START
        AND user_id not in (select f.user_id from f)
    GROUP BY year, week
    ORDER BY year, week

يبدو أن الاستعلام يعمل كما هو متوقع.

نعم، كما هو مكتوب، يقوم بحساب المشاهدات المجهولة. بالنسبة للمشاهدات المجهولة للمواضيع، ستكون قيمة user_id هي NULL وستكون قيمة ip_address هي NOT NULL. يمكنك استبعاد المشاهدات المجهولة بإضافة الشرط التالي إلى الاستعلام:

AND user_id IS NOT NULL

يمكن تحقيق ذلك من خلال إضافة. تضيف إضافة Discourse Solved تقريرًا إلى لوحة تحكم المسؤول. قد يكون هناك بعض الأكواد في هذه الإضافة مفيدة كمثال على كيفية إضافة تقرير: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

إذن، شيء من هذا القبيل؟ إذن، هل سيكون عنوان IP فارغًا (null) لمحركات الزحف؟

أريد تضمين:

  • المشاهدين المجهولين
  • المستخدمين المسجلين

أريد استبعاد:

  • محركات الزحف
  • مستخدمو الطاقم
-- [params]
-- string :date = '2020-01-01'
-- boolean :staff = false

WITH t AS (
    SELECT date(:date) AS START
),
f AS (
    SELECT id as user_id
    FROM users u
    WHERE u.moderator = 'True' or u.admin = 'True'
)

    SELECT
    user_id,
--    date_part('year', viewed_at) as year,
--    date_part('week', viewed_at) as week,
    COUNT(topic_id) AS topics_viewed
    FROM topic_views, t
    WHERE viewed_at > t.START
    AND ((ip_address is not null AND user_id is NULL) OR
        user_id not in (select f.user_id from f))
    GROUP BY user_id
    ORDER BY topics_viewed DESC
    -- GROUP BY year, week
    -- ORDER BY year, week

ما ورد أعلاه غير صحيح. إنه يقلل من عدد المستخدمين المجهولين مقارنة بصفحات المشاهدة الموحدة في تقرير Discourse.

يبدو أنني قد أحتاج إلى النظر في بعض الجداول الأخرى أيضًا؟

استعلام تقرير عدد مرات عرض الصفحات من جدول application_requests. ومع ذلك، لا يوفر هذا الجدول أي بيانات لفلترة مشاهدات الموظفين. ما يتم إرجاعه هو مجموع عدد الطلبات لكل نوع في اليوم. يُرجع req_type كرقم صحيح. يتم ربط الأرقام الصحيحة بنوع الطلب وفقًا للقواعد التالية:

"http_total"=0,
"http_2xx"=1,
"http_background"=2,
"http_3xx"=3,
"http_4xx"=4,
"http_5xx"=5,
"page_view_crawler"=6,
"page_view_logged_in"=7,
"page_view_anon"=8,
"page_view_logged_in_mobile"=9,
"page_view_anon_mobile"=10

يعيد جدول topic_views الذي تستخدمه استعلامك مدخلاً واحدًا كحد أقصى لكل مستخدم أو عنوان IP في اليوم لكل موضوع. لا يمكن استخدام هذه البيانات لتتبع عدد مرات عرض الصفحات، حيث قد يكون هناك طلبات تطبيق متعددة لعرض موضوع واحد.

أرى. إذن، بشكل أساسي، لا يمكن استبعاد مستخدمي الموظفين للحصول على أرقام دقيقة لعدد مرات عرض الصفحة.

أحاول حظي هنا، هل من الممكن استبعاد فئات معينة (أظن أن الإجابة لا)؟ لدينا بعض الفئات الخاصة المخصصة للفريق فقط، ولا نريد أن تؤثر هذه الفئات على أرقام عدد مرات عرض الصفحة الخاصة بالمستخدمين.

لا أرى أي طريقة لاستبعاد الطاقم من البيانات التي يوفرها جدول application_requests. كما أنه من المستحيل تصفية نتائج هذا الجدول حسب الفئة. إذا كنت تحاول الحصول على بيانات حول استخدام موقعك، فسيوفر جدول topic_views الذي تستخدمه في استعلامك الأصلي بيانات دقيقة حول كيفية استخدام موقعك، لكن هذه البيانات لن تتطابق مع ما تراه في تقرير عدد مرات عرض الصفحة.