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.