Questa è una query SQL di Esplorazione Dati progettata per fornire informazioni sull’efficienza e la reattività dei moderatori del forum nel gestire i flag sollevati dagli utenti sui post.
Questo report mostra il conteggio del numero di flag gestiti e il tempo medio per risolvere i flag da parte di ciascun moderatore su un sito, in un intervallo di date specificato.
Comprendere la rapidità e l’efficacia con cui i moderatori rispondono ai flag può aiutare gli amministratori a garantire che il forum rimanga uno spazio sicuro e accogliente per tutti gli utenti.
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
WITH period_actions AS (
SELECT pa.id,
pa.post_action_type_id,
pa.created_at,
pa.agreed_at,
pa.disagreed_at,
pa.deferred_at,
pa.agreed_by_id,
pa.disagreed_by_id,
pa.deferred_by_id,
pa.post_id,
pa.user_id,
COALESCE(pa.disagreed_at, pa.agreed_at, pa.deferred_at) AS responded_at,
EXTRACT(EPOCH FROM (COALESCE(pa.disagreed_at, pa.agreed_at, pa.deferred_at) - pa.created_at)) / 60 AS time_to_resolution_minutes -- tempo di risoluzione in minuti
FROM post_actions pa
WHERE pa.post_action_type_id IN (3,4,6,7,8) -- Tipi di flag
AND pa.created_at >= :start_date
AND pa.created_at <= :end_date
),
moderator_actions AS (
SELECT pa.id,
pa.post_id,
pa.created_at,
pa.responded_at,
pa.time_to_resolution_minutes,
COALESCE(pa.agreed_by_id, pa.disagreed_by_id, pa.deferred_by_id) AS moderator_id
FROM period_actions pa
WHERE COALESCE(pa.agreed_by_id, pa.disagreed_by_id, pa.deferred_by_id) IS NOT NULL
),
moderator_stats AS (
SELECT
m.moderator_id,
u.username AS moderator_username,
COUNT(m.id) AS handled_flags,
AVG(m.time_to_resolution_minutes) AS avg_resolution_time_minutes
FROM moderator_actions m
JOIN users u ON u.id = m.moderator_id
GROUP BY m.moderator_id, u.username
)
SELECT
ms.moderator_username,
ms.handled_flags,
ROUND(ms.avg_resolution_time_minutes::numeric, 2) AS avg_resolution_time_minutes
FROM moderator_stats ms
ORDER BY ms.handled_flags DESC, ms.avg_resolution_time_minutes ASC
Spiegazione della query SQL
Parametri
La query utilizza due parametri per definire l’intervallo di date per cui vengono analizzati i dati:
:start_date: La data di inizio del periodo che si desidera analizzare, nel formatoAAAA-MM-GG.:end_date: La data di fine del periodo che si desidera analizzare, anch’essa nel formatoAAAA-MM-GG.
CTE spiegate
- period_actions: Questa CTE seleziona i flag sollevati all’interno del periodo di tempo specificato, concentrandosi su tipi specifici di flag. Calcola il tempo impiegato per risolvere ciascun flag (in minuti) dal momento in cui è stato creato fino a quando non è stato concordato, rifiutato o posticipato da un moderatore.
- moderator_actions: Questa CTE filtra le azioni da
period_actionsper includere solo quelle a cui ha risposto un moderatore. Identifica il moderatore responsabile di ciascuna azione. - moderator_stats: Questa CTE aggrega i dati da
moderator_actions, calcolando il numero totale di flag gestiti da ciascun moderatore e il tempo medio di risoluzione (in minuti) per i flag che hanno gestito.
Risultati
L’output finale della query fornisce un elenco di moderatori ordinati per numero di flag gestiti, con un ordinamento secondario per il loro tempo medio di risoluzione (in ordine crescente). Per ogni moderatore, il report mostra:
moderator_username: Il nome utente del moderatore.handled_flags: Il numero totale di flag gestiti dal moderatore nel periodo di tempo specificato.avg_resolution_time_minutes: Il tempo medio impiegato dal moderatore per risolvere un flag, arrotondato a due cifre decimali.
Risultati di esempio
| moderator_username | handled_flags | avg_resolution_time_minutes |
|---|---|---|
| Moderator1 | 343 | 39.41 |
| Moderator2 | 70 | 30.51 |
| Moderator3 | 63 | 42.21 |