Come aggiungere subtotali in un report Access: tutorial pratico

Aggiungere subtotali in un report Access permette di mostrare un risultato intermedio per ogni gruppo di record, per esempio il totale vendite di ogni cliente, il numero di ordini per mese, la giacenza complessiva per categoria o la media degli importi per responsabile. Il subtotale si differenzia dal totale generale perché viene calcolato e mostrato alla fine di ciascun gruppo.

Nelle versioni desktop correnti di Access per Microsoft 365 e Access 2024 su Windows, il metodo più chiaro consiste nel creare un raggruppamento, attivare il relativo piè di pagina e inserire una funzione aggregata come Sum, Count o Avg. Questa guida spiega il processo completo, incluse le cause dei subtotali errati e le tecniche per report con più livelli.

Indice

  • Che cos’è un subtotale
  • Preparare origine e gruppi
  • Creare il piè di pagina
  • Somma con Sum
  • Conteggio e media
  • Più livelli di subtotale
  • Subtotali per mese e categoria
  • Totale generale
  • Duplicazioni e granularità
  • Filtri, parametri e prestazioni
  • Runtime, troubleshooting e FAQ

Che cos’è un subtotale in Access

Un subtotale è un’aggregazione limitata ai record di un gruppo. Se un report contiene ordini raggruppati per Cliente, il subtotal Cliente somma soltanto gli ordini di quel cliente. Quando inizia il gruppo successivo, il calcolo riparte nel nuovo contesto.

Microsoft documenta raggruppamenti e opzioni di riepilogo nel riferimento Create a grouped or summary report. Il riquadro Group, Sort, and Total permette di aggiungere gruppi, footer e totali.

Subtotale e totale generale

Il subtotale vive nel piè di pagina del gruppo. Il totale generale vive nel Piè di pagina report. La formula può essere identica, per esempio =Sum([Importo]), ma il contesto cambia.

Se inserisci la formula nel footer Cliente ottieni totale cliente; nel footer Regione ottieni totale regione; nel footer Report ottieni totale complessivo.

1. Controllare il dataset

Prima di creare il report, apri la query di origine. Ogni riga deve rappresentare l’unità che vuoi sommare. Se vuoi sommare righe vendita, ogni riga deve avere ImportoRiga. Se vuoi contare ordini, evita una query che produce più righe per ordine salvo che tu gestisca il conteggio con una query distinta o aggregata.

Il subtotale non corregge duplicazioni. Somma esattamente le righe ricevute.

2. Creare o aprire il report

Puoi partire da una query e scegliere Crea > Report oppure Creazione guidata Report. Se il report esiste già, aprilo in Layout o Struttura.

Per le basi consulta Come creare un report in Microsoft Access.

3. Aggiungere un gruppo

Apri Raggruppa, ordina e totale, scegli Aggiungi gruppo e seleziona Cliente, Categoria, Regione o altro campo. Espandi Altre opzioni e attiva il piè di pagina del gruppo.

Se il report è già raggruppato, controlla che il livello corrisponda esattamente al subtotal che vuoi calcolare.

4. Inserire una casella di testo nel footer

In Layout o Struttura aggiungi una casella di testo nel Piè di pagina Cliente. Imposta Origine controllo a =Sum([Importo]). Modifica l’etichetta in Totale cliente.

Formatta la casella come valuta se Importo rappresenta denaro. Se il campo è numerico semplice usa un formato coerente con i dettagli.

5. Verificare il primo subtotale

Apri Anteprima e prendi un cliente con pochi record. Somma manualmente i valori e confronta. Fai lo stesso con un cliente con molte righe. Questo semplice test scopre rapidamente dataset duplicati o campo sbagliato.

6. Aggiungere Count

Per sapere quanti record appartengono al gruppo usa =Count(*). Se vuoi contare valori non Null di un campo usa =Count([IDOrdine]). Ricorda che Count(campo) ignora i Null.

Etichetta il controllo come Numero ordini, Numero righe o altra descrizione corretta rispetto alla granularità.

7. Non confondere righe e ordini

Se la query contiene una riga per prodotto ordinato, Count(*) conta righe prodotto, non ordini. Se vuoi il numero ordini distinti, prepara una query a una riga per ordine o una query aggregata. Access SQL non gestisce Count(DISTINCT …) nello stesso modo di altri DBMS, quindi conviene risolvere con query separate.

8. Aggiungere Avg

Per la media usa =Avg([Importo]). Chiediti cosa rappresenta la media: media righe, media ordini o media clienti. Il valore è corretto matematicamente solo rispetto al dataset.

Per ticket medio ordine, crea prima un dataset una riga per ordine.

9. Min e Max

Nel footer puoi mostrare =Min([Importo]) e =Max([Importo]). Su date, Min restituisce la più vecchia e Max la più recente all’interno del gruppo.

Questi valori sono utili nei report di attività: prima e ultima vendita del cliente, importo massimo, data ultima interazione.

10. Più subtotali nello stesso footer

Puoi mostrare Totale vendite, Numero ordini e Media ordine nello stesso footer. Mantieni allineamento e etichette chiare. Non trasformare il footer in un secondo report: scegli gli indicatori utili.

11. Subtotali su più livelli

Un report può avere Regione e Cliente. Footer Cliente: =Sum([Importo]). Footer Regione: stessa formula. Footer Report: stessa formula. Access calcola ogni controllo nel proprio ambito.

La gerarchia deve essere Regione > Cliente se i clienti appartengono alle regioni. La guida Come aggiungere ordinamento e raggruppamento mostra come gestire i livelli.

12. Subtotali per mese

Raggruppa DataOrdine per anno e mese. Nel footer mese usa Sum Importo. Nel footer anno puoi mostrare il totale annuale. Non raggruppare soltanto per numero mese se il report contiene anni diversi.

Mostra l’intestazione come =Format([DataOrdine],"mmmm yyyy"), ma usa la data o campi numerici per l’ordine cronologico.

13. Subtotali per categoria

Un report inventario può raggruppare Categoria e mostrare =Sum([Giacenza]) e =Count(*). Se vuoi valore inventario, prepara ValoreRiga: [Giacenza]*[CostoUnitario] nella query e somma ValoreRiga.

14. Subtotali condizionati

Puoi sommare soltanto record che soddisfano una condizione con =Sum(IIf([Stato]="Pagato",[Importo],0)). Per formule lunghe e riutilizzate, crea un campo calcolato nella query.

Il report sarà più leggibile se l’origine contiene ImportoPagato e ImportoDaPagare come campi calcolati.

15. Null e subtotal

Se un componente del calcolo è Null, l’espressione può diventare Null. Usa Nz quando Null equivale semanticamente a zero. Esempio: [Quantita]*[Prezzo]*(1-Nz([Sconto],0)).

Non usare Nz indiscriminatamente per campi dove Null significa non noto.

16. Campo numerico memorizzato come testo

Se Prezzo o Importo sono testo, correggi il tipo alla fonte. Un database ben progettato memorizza numeri come tipi numerici e date come Date/Time. Conversioni nel report possono mascherare errori e rallentare.

17. Totale generale oltre ai subtotali

Attiva Piè di pagina report e inserisci =Sum([Importo]). Aggiungi un’etichetta Totale generale e rendilo visivamente distinto. Il totale generale deve corrispondere alla somma dei subtotali se i gruppi sono disgiunti e coprono tutti i record.

Questo è un ottimo controllo: se la somma dei subtotali non coincide, verifica filtri, sezioni o query.

18. Subtotali e filtri

Se il report viene aperto filtrato, i subtotali riflettono soltanto i record inclusi. Un filtro per periodo modifica naturalmente i risultati. Mostra il periodo nel titolo per evitare che un subtotal mensile venga interpretato come annuale.

19. Parametri da maschera

Una maschera può contenere DataDa, DataA e Cliente. Apri il report con WhereCondition o usa una query che legge i controlli. Salva e valida i valori prima di aprire il report.

Per utenti Runtime questa interfaccia è preferibile ai prompt generici.

20. Subtotali in query Totali

Se non serve il dettaglio, puoi preparare SELECT Categoria, Sum(Importo) AS TotaleCategoria FROM qryBase GROUP BY Categoria;. Il report mostra una riga per categoria. In questo caso il valore TotaleCategoria è già un subtotal logico prodotto dalla query.

21. Quando aggregare prima

Aggrega nella query se il dataset è enorme e il report mostra soltanto riepiloghi, se il back-end è SQL Server e vuoi sfruttare il server, oppure se la stessa aggregazione viene riutilizzata in più oggetti.

22. Quando aggregare nel report

Usa footer se vuoi mostrare dettaglio e subtotal insieme, se i gruppi sono una scelta di presentazione o se l’utente può filtrare il report e vuoi che i totali seguano automaticamente il subset.

23. Running Sum e subtotal

Un totale progressivo è diverso dal subtotal. Puoi usare Running Sum per accumulare Importo lungo le righe. Imposta l’ordine dei record correttamente e scegli Over Group se vuoi che il progressivo riparta a ogni gruppo.

24. Controllare gli arrotondamenti

Se il report mostra valuta a due decimali, definisci la regola di arrotondamento a livello di processo. Sommare valori con più decimali e poi formattare può dare un centesimo diverso dalla somma delle righe visualizzate già arrotondate.

Per documenti contabili usa una logica coerente e testata.

25. Layout del footer

Allinea il subtotal alla colonna Importo quando il report è tabellare. Inserisci una linea superiore leggera o grassetto. Evita di ripetere intestazioni inutili. Il subtotal deve essere riconoscibile senza interrompere troppo il flusso.

26. Keep Together

Configura il gruppo per evitare che il footer appaia in modo poco leggibile rispetto al dettaglio, compatibilmente con la dimensione del gruppo. Controlla Anteprima su gruppi lunghi.

27. Prestazioni

I subtotal Sum nei footer sono generalmente efficienti. Problemi emergono soprattutto quando Importo deriva da funzioni di dominio o VBA per ogni riga. Sposta i calcoli set-based nella query quando possibile.

28. Access Runtime

Il Runtime calcola i subtotali normalmente. L’utente deve soltanto aprire il report tramite l’interfaccia. Predisponi filtri e pulsanti e non richiedere accesso alla Struttura.

29. Microsoft 365 e Access 2024

Raggruppamenti, footer e funzioni aggregate sono disponibili nelle versioni desktop correnti. Progetta sulla versione minima usata dall’organizzazione.

30. 32 e 64 bit

Sum, Count, Avg e footer non dipendono da 32/64 bit. Eventuale codice VBA esterno deve essere compatibile.

Esempio completo: ordini per cliente

Query con IDCliente, RagioneSociale, IDOrdine, DataOrdine e TotaleOrdine, una riga per ordine. Report raggruppato per Cliente. Footer: =Count([IDOrdine]) e =Sum([TotaleOrdine]). Footer report: stesso Count e Sum per totale generale.

Se invece la query include le righe ordine, non sommare TotaleOrdine ripetuto. Calcola ImportoRiga e usa Sum su quello oppure aggrega prima.

Esempio: vendite per mese e regione

Gruppo Anno, gruppo Mese, gruppo Regione. Footer Regione: totale regionale nel mese. Footer Mese: totale mensile. Footer Anno: totale annuale. Footer report: totale complessivo. Testa la gerarchia perché un ordine errato dei gruppi cambia l’interpretazione.

Checklist

  • Dataset alla granularità corretta
  • Campo gruppo appropriato
  • Footer attivato
  • Formula aggregata corretta
  • Count coerente con la granularità
  • Null gestiti
  • Valute formattate
  • Più livelli verificati
  • Totale generale confrontato
  • Filtri indicati
  • Prestazioni testate

Problemi comuni

Il subtotal è moltiplicato

Controlla se un valore padre viene ripetuto dalle righe figlie. Correggi query o campo sommato.

Count mostra troppe righe

Stai contando dettagli anziché entità. Prepara una query con una riga per ordine/cliente secondo la metrica.

Il footer non appare

Attiva Piè di pagina gruppo nelle opzioni del livello e verifica che la sezione non abbia altezza zero o Visible=False.

Il totale generale non coincide

Controlla filtri, gruppi e formule. Confronta il risultato con una query Totali indipendente.

I subtotal cambiano dopo un filtro

È normale: i controlli aggregati del report lavorano sui record elaborati dopo il filtro.

FAQ

Qual è la formula per un subtotal?

Di solito =Sum([Campo]) nel piè di pagina del gruppo.

Posso avere più subtotal?

Sì, uno per ogni livello di gruppo e più metriche nello stesso footer.

Come conto gli ordini?

Usa Count su un dataset con una riga per ordine. Se la query contiene righe ordine, Count(*) conta le righe.

Dove va il totale generale?

Nel Piè di pagina report.

Meglio query Totali o footer?

Query se vuoi solo riepilogo; footer se vuoi dettaglio e subtotal insieme.

Funziona nel Runtime?

Sì. I subtotal sono calcolati dal report.

Conclusione

Aggiungere subtotali in un report Access è semplice dal punto di vista sintattico ma richiede attenzione alla struttura dei dati. Crea il gruppo, abilita il footer e usa Sum, Count, Avg, Min o Max; poi verifica che il dataset rappresenti davvero ciò che vuoi misurare. Con gruppi multipli puoi ottenere riepiloghi cliente, regione, mese e totale generale nello stesso documento, mantenendo dettaglio e sintesi coerenti.

Per continuare consulta tutte le Guide Microsoft Access dedicate a report, totali e query.

Lascia un commento