Seitenaufrufe für Benutzer zählen (nicht-Mitarbeiter, nicht-Crawler)

Hey Leute,

ich sehe diese Daten nicht in den Berichten. Ich verwende das Data Explorer-Plugin. Welche Abfrage würde mir die Seitenaufrufzahlen nur für unsere Benutzer pro Woche liefern, wobei die Aktivität von Crawlern und die Mitglieder unseres Forums ausgeschlossen, aber anonyme Seitenaufrufe eingeschlossen werden sollen?

  • Würde so etwas funktionieren?
  • Würde dies anonyme Aufrufe berücksichtigen?
  • Gibt es zudem eine Möglichkeit, dies in einen Bericht umzuwandeln?
-- [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

Die Abfrage sieht so aus, als würde sie funktionieren.

Ja, so wie sie geschrieben ist, zählt sie anonyme Aufrufe. Bei anonymen Themenaufrufen ist die user_id NULL und die ip_address NOT NULL. Sie können anonyme Aufrufe ausschließen, indem Sie die folgende Bedingung zur Abfrage hinzufügen:

AND user_id IS NOT NULL

Das könnte über ein Plugin umgesetzt werden. Das Discourse Solved-Plugin fügt der Admin-Dashboard einen Bericht hinzu. In diesem Plugin könnte es Code geben, der als Beispiel dafür dient, wie man einen Bericht hinzufügt: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

Also so etwas? Wäre die IP-Adresse für Crawler also null?

Ich möchte Folgendes einschließen:

  • anonyme Besucher
  • angemeldete Benutzer

Ich möchte Folgendes ausschließen:

  • Crawler
  • Mitarbeiter-Benutzer
-- [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

Das oben ist falsch. Es werden anonyme Benutzer im Vergleich zu den konsolidierten Seitenaufrufen im Discourse-Bericht unterzählt.

Sieht so aus, als müsste ich auch noch andere Tabellen berücksichtigen?

Der Bericht „Seitenaufrufe

Verstehe. Also ist es im Wesentlichen nicht möglich, genaue PV-Zahlen zu erhalten, ohne Mitarbeiterkonten auszuschließen.

Ich versuche es mal mit einer Vermutung: Ist es möglich, bestimmte Kategorien auszuschließen (ich vermute mal, dass das nicht geht)? Wir haben einige private Kategorien, die nur für das interne Team bestimmt sind – und möchten nicht, dass diese unsere Benutzer-PV-Zahlen verfälschen.

Ich sehe keine Möglichkeit, Staff-Benutzer aus den Daten der Tabelle application_requests auszuschließen. Es ist auch nicht möglich, die Ergebnisse dieser Tabelle nach Kategorien zu filtern. Wenn du Daten über die Nutzung deiner Seite erhalten möchtest, liefert dir die Tabelle topic_views, die du in deiner ursprünglichen Abfrage verwendest, genaue Daten darüber, wie deine Seite genutzt wird. Diese Daten stimmen jedoch nicht mit dem überein, was du im Bericht „Seitenaufrufe