▦ Dati e database

Qualità dei dati: sei dimensioni e i controlli per misurarle

Completezza, validità, unicità, coerenza, accuratezza e tempestività: cosa significano in pratica e quali query SQL usare per misurare la qualità dei dati.

Un report può essere costruito con la tecnica migliore e restituire comunque numeri sbagliati, se i dati di partenza sono sbagliati. La qualità dei dati è spesso trattata come un problema vago, «i dati sono sporchi», che nessuno sa da dove affrontare. Diventa invece gestibile quando la si scompone in dimensioni precise, ciascuna misurabile con un controllo concreto.

Le sei dimensioni

Completezza

I dati che dovrebbero esserci, ci sono? Un'anagrafica clienti in cui il 40% dei record non ha l'email è incompleta per qualunque attività che preveda comunicazioni via email, anche se ogni singolo record è corretto.

SELECT
  COUNT(*) AS totale,
  COUNT(email) AS con_email,
  ROUND(100.0 * COUNT(email) / COUNT(*), 1) AS percentuale
FROM clienti;

La completezza va valutata rispetto all'uso: un numero di fax mancante non è un problema, un codice di spedizione mancante sì.

Validità

I valori rispettano il formato e le regole previste? Un CAP italiano ha cinque cifre, una percentuale sta tra 0 e 100, una data di nascita non è nel futuro.

SELECT id, cap FROM clienti
WHERE cap IS NOT NULL AND cap NOT SIMILAR TO '[0-9]{5}';

SELECT id, data_nascita FROM clienti
WHERE data_nascita > CURRENT_DATE;

La sintassi delle espressioni regolari varia tra i database, ma il principio è lo stesso: si cercano i valori che violano la regola.

Unicità

Ogni entità del mondo reale compare una sola volta? Lo stesso cliente registrato due volte con due codici diversi fa sembrare i clienti più numerosi e divide la sua storia di acquisti in due.

SELECT LOWER(TRIM(email)) AS email_norm, COUNT(*)
FROM clienti
GROUP BY LOWER(TRIM(email))
HAVING COUNT(*) > 1;

Normalizzare il valore prima del confronto, togliendo spazi e maiuscole, fa emergere duplicati che un confronto esatto non vedrebbe.

Coerenza

Dati collegati concordano tra loro? Un ordine non dovrebbe fare riferimento a un cliente inesistente, una data di consegna non dovrebbe precedere la data dell'ordine, il totale della fattura dovrebbe essere uguale alla somma delle righe.

SELECT f.id, f.totale, SUM(r.importo) AS somma_righe
FROM fatture f
JOIN righe_fattura r ON r.id_fattura = f.id
GROUP BY f.id, f.totale
HAVING f.totale <> SUM(r.importo);

Accuratezza

I dati corrispondono alla realtà? È la dimensione più difficile, perché un valore può essere valido, completo e unico, ma sbagliato: un indirizzo esistente che però non è più quello del cliente. L'accuratezza si verifica confrontando con una fonte di riferimento: un controllo a campione, una conferma da parte del cliente, un confronto con un registro ufficiale.

Tempestività

I dati sono abbastanza aggiornati per l'uso che se ne fa? Le giacenze di magazzino aggiornate una volta a settimana non bastano a un negozio online che vende in tempo reale.

SELECT MAX(aggiornato_il) AS ultimo_aggiornamento FROM giacenze;

Un controllo semplice ma utilissimo è verificare che l'ultimo caricamento sia avvenuto entro il tempo previsto: un flusso di dati che si è fermato in silenzio è uno dei problemi più frequenti.

Dalla misura alla prevenzione

Misurare è il primo passo, ma correggere a valle all'infinito è costoso. La regola generale è intervenire il più vicino possibile al punto in cui il dato nasce.

Dimensione Prevenzione alla fonte
Completezza Colonne NOT NULL, campi obbligatori nei moduli
Validità Tipi di dato corretti, vincoli CHECK, menu a tendina invece di testo libero
Unicità Vincoli UNIQUE su valori normalizzati, ricerca del cliente prima della creazione
Coerenza Chiavi esterne, calcolo dei totali da parte del sistema e non a mano
Accuratezza Conferma dei dati da parte dell'interessato, verifica degli indirizzi
Tempestività Avvisi automatici quando un caricamento non arriva

Costruire un piccolo sistema di controlli

Non serve un software dedicato per iniziare. Un metodo pratico:

  1. Scegliere le tabelle critiche, quelle su cui si basano decisioni, fatture o comunicazioni.
  2. Scrivere una query per ogni regola, che restituisca le righe che la violano. Una query che restituisce zero righe è un controllo superato.
  3. Eseguire i controlli in automatico, per esempio ogni notte, salvando in una tabella la data, il nome del controllo e il numero di righe non conformi.
  4. Osservare l'andamento: un numero che cresce all'improvviso segnala un cambiamento a monte, come un nuovo modulo o un'importazione difettosa.
  5. Assegnare un responsabile per ogni controllo: un problema che riguarda tutti finisce per non essere risolto da nessuno.

Nel mio lavoro ho visto che le regole più utili sono quasi sempre quelle suggerite da chi usa i dati ogni giorno: sanno benissimo quali errori ricorrono, anche se non li hanno mai scritti.

In sintesi

  • La qualità dei dati si scompone in completezza, validità, unicità, coerenza, accuratezza e tempestività.
  • Ogni dimensione si misura con query concrete che cercano le righe non conformi.
  • L'accuratezza richiede un confronto con la realtà, non solo con le regole.
  • La prevenzione alla fonte, con vincoli e moduli ben fatti, costa meno della correzione.
  • Controlli automatici con storico e responsabili trasformano il problema in un processo.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche