Rapporto sull'efficienza della gestione delle segnalazioni dei moderatori

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 formato AAAA-MM-GG.
  • :end_date: La data di fine del periodo che si desidera analizzare, anch’essa nel formato AAAA-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_actions per 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