Report Personalizzati in Moodle con SQL Query
La reportistica standard di Moodle offre una panoramica generale sull'andamento dei corsi, ma raramente soddisfa le esigenze analitiche specifiche di chi gestisce formazione complessa. I report Moodle SQL personalizzati permettono di interrogare direttamente il database per estrarre insight su completamenti, performance, tempi di fruizione e compliance che i report nativi non sono in grado di fornire. In questa guida vediamo come creare query personalizzate efficaci, quali tabelle interrogare e come sfruttare al meglio il plugin Configurable Reports.
Perché Servono Report Moodle SQL Personalizzati
Moodle include diversi report built-in: log delle attività, completamento corsi, overview dei voti e statistiche di accesso. Tuttavia, scenari formativi reali richiedono analisi più sofisticate:
- Report di compliance: elenco dei dipendenti che non hanno completato la formazione obbligatoria entro la scadenza, con dettaglio per reparto e sede.
- Analisi dei tempi di fruizione: tempo medio per completare ciascun modulo, identificazione dei contenuti con tassi di abbandono anomali.
- Report per enti certificatori: dati formattati secondo i requisiti specifici di ECM, IVASS, CONSOB o altri organismi di vigilanza.
- Dashboard manageriali: KPI aggregati per business unit, con confronti temporali e benchmark interni.
- Analisi delle valutazioni: distribuzione dei punteggi per domanda, item analysis, identificazione di domande problematiche.
Per rispondere a queste esigenze, l'approccio più flessibile è l'accesso diretto al database Moodle tramite query SQL, eventualmente mediate dal plugin Configurable Reports.
Struttura del Database Moodle: Le Tabelle Fondamentali
Il database Moodle (versione 4.x) contiene oltre 400 tabelle. Per i report Moodle SQL più comuni, le tabelle chiave sono:
Tabelle utenti e iscrizioni
- mdl_user: anagrafica utenti (id, username, firstname, lastname, email, department, institution).
- mdl_user_enrolments: iscrizioni degli utenti ai corsi, con stato (attivo/sospeso) e date.
- mdl_enrol: metodi di iscrizione configurati per ciascun corso.
- mdl_role_assignments: assegnazione dei ruoli (studente, docente, manager) nei vari contesti.
Tabelle corsi e attività
- mdl_course: catalogo corsi (id, fullname, shortname, category, startdate, enddate).
- mdl_course_modules: singole attività all'interno dei corsi (quiz, SCORM, compiti, forum).
- mdl_course_modules_completion: stato di completamento di ciascuna attività per ogni utente, con timestamp.
- mdl_course_completions: completamento complessivo del corso, con data di completamento.
Tabelle valutazioni
- mdl_grade_items: definizione degli elementi valutabili (quiz, compiti, voti manuali).
- mdl_grade_grades: voti effettivi assegnati agli utenti.
- mdl_quiz_attempts: tentativi dei quiz con punteggio, data inizio e fine.
- mdl_question_attempts: risposte alle singole domande (per item analysis).
Query Personalizzate: Esempi Pratici per Analytics Custom
Ecco alcune query personalizzate pronte all'uso per i casi d'uso più richiesti. Tutte assumono il prefisso tabella standard mdl_.
1. Report completamento corsi per reparto
Questa query restituisce il numero di utenti iscritti e la percentuale di completamento per ciascun reparto, utile per dashboard manageriali:
SELECT u.department, c.fullname AS corso, COUNT(DISTINCT ue.userid) AS iscritti, COUNT(DISTINCT cc.userid) AS completati, ROUND(COUNT(DISTINCT cc.userid) * 100.0 / COUNT(DISTINCT ue.userid), 1) AS perc_completamento FROM mdl_user u JOIN mdl_user_enrolments ue ON u.id = ue.userid JOIN mdl_enrol e ON ue.enrolid = e.id JOIN mdl_course c ON e.courseid = c.id LEFT JOIN mdl_course_completions cc ON cc.userid = u.id AND cc.course = c.id AND cc.timecompleted IS NOT NULL WHERE u.deleted = 0 AND u.suspended = 0 GROUP BY u.department, c.fullname ORDER BY u.department, perc_completamento ASC;
2. Utenti con formazione obbligatoria scaduta
Identifica chi non ha completato un corso entro la data limite, essenziale per la compliance:
SELECT u.firstname, u.lastname, u.email, u.department, c.fullname AS corso, FROM_UNIXTIME(c.enddate) AS scadenza FROM mdl_user u JOIN mdl_user_enrolments ue ON u.id = ue.userid JOIN mdl_enrol e ON ue.enrolid = e.id JOIN mdl_course c ON e.courseid = c.id LEFT JOIN mdl_course_completions cc ON cc.userid = u.id AND cc.course = c.id AND cc.timecompleted IS NOT NULL WHERE cc.id IS NULL AND c.enddate < UNIX_TIMESTAMP() AND c.enddate > 0 AND u.deleted = 0 ORDER BY c.enddate DESC;
3. Tempo medio di completamento per modulo
Analisi dei tempi che aiuta a identificare contenuti troppo lunghi o difficili:
SELECT cm.id AS module_id, m.name AS tipo_attivita, COALESCE(cm.name, '') AS nome_modulo, c.fullname AS corso, ROUND(AVG(cmc.timemodified - ue.timecreated) / 3600, 1) AS ore_medie_completamento, COUNT(cmc.id) AS completamenti FROM mdl_course_modules cm JOIN mdl_modules m ON cm.module = m.id JOIN mdl_course c ON cm.course = c.id JOIN mdl_course_modules_completion cmc ON cmc.coursemoduleid = cm.id AND cmc.completionstate IN (1,2) JOIN mdl_user_enrolments ue ON ue.userid = cmc.userid JOIN mdl_enrol e ON ue.enrolid = e.id AND e.courseid = c.id GROUP BY cm.id, m.name, cm.name, c.fullname HAVING completamenti > 5 ORDER BY ore_medie_completamento DESC;
Configurable Reports: Report Moodle SQL Senza Accesso Diretto al DB
Il plugin Configurable Reports (ad_hoc_report) consente di eseguire query SQL direttamente dall'interfaccia di Moodle, senza necessità di accesso al database server. Questo lo rende lo strumento ideale per amministratori non tecnici che necessitano di analytics custom.
Caratteristiche principali:
- Editor SQL integrato con syntax highlighting e autocompletamento dei nomi tabella.
- Parametri dinamici: variabili come
%%COURSEID%%,%%USERID%%,%%STARTTIME%%e%%ENDTIME%%che permettono agli utenti di filtrare i risultati senza modificare la query. - Esportazione multipla: CSV, Excel, PDF per condivisione con stakeholder non tecnici.
- Scheduling: esecuzione automatica e invio via email a destinatari specifici (es. report settimanale di compliance ai responsabili HR).
- Permessi granulari: ogni report può essere visibile solo a ruoli specifici (manager, admin, HR).
Per installare Configurable Reports su Moodle 4.x: scaricare il plugin dal repository ufficiale, decomprimere in /blocks/configurable_reports/, eseguire l'aggiornamento dal pannello di amministrazione. La configurazione richiede circa 15 minuti.
Sicurezza e Ottimizzazione delle Query sul Database Moodle
Quando si lavora con query personalizzate sul database Moodle, la sicurezza e le performance sono prioritarie:
- Utente database read-only: creare un utente MySQL/PostgreSQL con permessi di sola lettura (SELECT) per l'esecuzione dei report. Mai usare le credenziali dell'utente applicativo di Moodle.
- Indici appropriati: verificare che le colonne usate nelle clausole WHERE e JOIN siano indicizzate. Le tabelle di completamento e voti beneficiano particolarmente di indici su
(userid, course). - Limitare i risultati: usare sempre LIMIT nelle query esplorative e WHERE con filtri temporali per evitare full table scan su tabelle con milioni di righe.
- Esecuzione in orari non di picco: schedulare i report pesanti (aggregazioni su tutto lo storico) durante le ore notturne, tramite cron job o lo scheduler di Configurable Reports.
- Cache dei risultati: per report che non necessitano dati real-time, implementare una cache con TTL di 1-4 ore per ridurre il carico sul database.
Hai bisogno di report personalizzati per la tua installazione Moodle? HIE Learning progetta dashboard analitiche e report su misura per piattaforme formative. Contattaci per una consulenza e scopri come trasformare i dati della tua piattaforma in decisioni informate sulla formazione.
Domande frequenti
Quali sono i limiti dei report standard di Moodle?
I report integrati in Moodle forniscono una panoramica generale su log, completamenti e voti, ma non sono in grado di soddisfare esigenze analitiche complesse. Non permettono, ad esempio, di incrociare dati specifici come scadenze, reparti o tempi di fruizione dettagliati per creare report di compliance o analisi avanzate.
Cosa si può fare con i report SQL personalizzati in Moodle?
Le query SQL personalizzate consentono di interrogare direttamente il database di Moodle per estrarre dati specifici e combinabili. È possibile creare report su completamenti obbligatori in ritardo, analizzare i tempi medi di fruizione per modulo, formattare dati per enti certificatori e identificare contenuti con tassi di abbandono anomali.
Come si crea un report personalizzato in Moodle?
Per creare report personalizzati oltre a quelli standard, è necessario utilizzare plugin aggiuntivi come "Configurable Reports" o scrivere query SQL direttamente sul database. Questi strumenti permettono di definire parametri, selezionare tabelle specifiche (come quelle di completamento o log) e formattare l'output secondo le proprie esigenze.
Quali sono esempi pratici di report SQL utili?
Esempi concreti includono report di compliance per identificare dipendenti in ritardo su corsi obbligatori, analisi dei tempi di fruizione per ottimizzare i contenuti e report generati su misura per soddisfare i requisiti di enti certificatori come ECM, IVASS o CONSOB, che richiedono formati dati specifici.