Non vedo questi dati nei report. Sto usando il plugin Data Explorer; quale query mi fornirebbe i conteggi delle visualizzazioni di pagina solo per i nostri utenti per settimana, escludendo l’attività dei crawler e i membri dello staff del nostro forum, ma includendo le visualizzazioni anonime?
Funzionerebbe qualcosa di simile?
Considererebbe le visualizzazioni anonime?
Inoltre, c’è un modo per convertire questo in un report?
-- [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
Sì, così com’è scritta, conta anche le visualizzazioni anonime. Per le visualizzazioni anonime di un argomento, user_id sarà NULL e ip_address sarà NOT NULL. Puoi escludere le visualizzazioni anonime aggiungendo la seguente condizione alla query:
AND user_id IS NOT NULL
Questo potrebbe essere realizzato tramite un plugin. Il plugin Discourse Solved aggiunge un report alla dashboard di amministrazione. Potresti trovare del codice in quel plugin utile come esempio su come aggiungere un report: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.
Quindi, qualcosa del genere? Quindi, l’indirizzo IP sarebbe null per i crawler?
Voglio includere:
visualizzatori anonimi
utenti loggati
Voglio escludere:
crawler
utenti staff
-- [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
Il rapporto Visualizzazioni pagina interroga la tabella application_requests. Tuttavia, quella tabella non fornisce dati per filtrare le visualizzazioni del personale. Restituisce invece la somma del numero di richieste di ciascun tipo per giorno. Il campo req_type viene restituito come numero intero. Gli interi sono mappati al tipo di richiesta secondo le seguenti regole:
La tabella topic_views utilizzata dalla tua query restituisce al massimo un’entry per utente o indirizzo IP al giorno per argomento. Questi dati non possono essere utilizzati per tracciare le visualizzazioni pagina: potrebbero esserci più richieste di applicazione per una singola visualizzazione di argomento.
Capisco. Quindi, in sostanza, escludere gli utenti staff non è possibile per ottenere numeri accurati delle visualizzazioni della pagina.
Scommetto azzardando, è possibile escludere determinate categorie (immagino di no)? Abbiamo alcune categorie private riservate esclusivamente al team interno e non vogliamo che queste alterino i nostri dati sulle visualizzazioni della pagina degli utenti.
Non vedo alcun modo per escludere lo staff dai dati forniti dalla tabella application_requests. Inoltre, non è possibile filtrare i risultati di quella tabella per categoria. Se stai cercando di ottenere dati sull’utilizzo del tuo sito, la tabella topic_views che stai utilizzando nella tua query originale ti fornirà dati accurati su come il tuo sito viene utilizzato, ma tali dati non corrisponderanno a ciò che vedi nel rapporto sulle Visualizzazioni di pagina.