logo MC2 E-Learning S.a r.l.
Logo Einstein grigio sfumato
e = m x c al quadrato





Query a campi incrociati con Microsoft Access

Breve tutorial di MC2 E-Learning sulle query a campi incrociati.Impariamo a costruire una query a campi incrociati con Microsoft Access







Che cosa sono, prima di tutto, le query a campi incrociati?

Le query a campi incrociati sono un particolare tipo di query di selezione, le quali permettono di "incrociare" i campi di più tabelle, in modo da ottenere unamatrice in cui le righe corrispondono normalmente a campi di tipo descrittivo e riepilogativo, mentre le colonne corrispondono a sub-totali quasi sempre divalori numerici o valuta, doveogni colonna rappresenta un "periodo temporale", ad esempio il mese o il trimestre, oppure qualsiasi altro campo, di solito descrittivo.

Vengono chiamate anche query pivot, perchè i dati da queste restituiti assomigliano alletabelle pivot di excel , ma vediamo subito degli esempi concreti:

Primo esempio: Quante medaglie sono state vinte da ciascuna nazione nelle varie edizioni ?

Per rispondere a questa domanda ci occorre proprio una query a campi incrociati, nella quale le righe mostrino le nazioni, le colonne le varie edizioni (elemento PIVOT) e negli incroci tra righe e colonne il numero di vincitori.

Questa volta ci avvaliamo della 'Creazione guidata Query a campi incrociati' , procedura guidata specifica proprio per questo genere di query (figura 1).

Facciamo click sul pulsante'OK': nel passaggio che segue ci viene posta una domanda precisa: "Quale tabella o query contiene i campi da utilizzare nella query a campi incrociati?" Attenzione, perchè la domanda non è scontata, in quanto dobbiamo chiederci a questo punto se le informazioni che vogliamo facciano parte dei risultati sono tutte provenienti da una unica tabella oppure da tabelle differenti.

E' evidente che se il caso che si presenta fosse il secondo, allora dovremmo pre-costruire una query di selezione semplice "ad hoc" per preparare i dati per questa query, cioè la query a campi incrociati che stiamo costruendo ora.

Quindi a questo punto della procedura guidata selezioneremmo la query preparatoria e non la tabella risultati.

Nell'esempio selezioniamo comunque la tabella 'Risultati' per semplicità (figura 2). Notiamo che nella parte inferiore della maschera (e questo è importantissimo!) ci viene mostrata una sorta di 'anteprima' di come appariranno i risultati della query a campi incrociati; in particolare si tratta di una 'matrice' composta da righe, da colonne (Intestazioni) e da un valore TOTALE che verrà mostrato appunti in corrispondenza di ciascuna riga con ciascuna colonna.

Facciamo 'click' sui 'Avanti'.

Nel passaggio successivo (figura 3) ci viene posta invece la seguente domanda: "Da quale campo si desidera trarre i valori da usare come intestazioni di righe?" Notare che l'elenco dei Campi disponibili è relativo alla tabella Risultati, per selezionare campi provenienti da più tabelle avremmo avuto necessità della query preparatoria di cui parlavamo prima.

Qui ora selezioniamo il campo 'IdNazione', potremmo anche specificare più campi come intestazione di riga, in questo caso i campi selezionati verrebbero posizionati a sinistra della 'matrice' vera e propria che conterrà invece i valori TOTALE.

Facciamo click su 'Avanti'.

Ora si tratta di selezionare il campo da cui trarre i valori da usare come 'intestazioni di colonne' , nell'esempio  selezioniamo il campo 'IdEdizione' (figura 4): notate che appena impostato un campo, nella parte inferiore l'anteprima ci mostra come descrizione di colonna: 'IdEdizione1', 'IdEdizione2', ecc. al posto di 'Intestazione1', 'Intestazione2', ecc.

Naturalmente a questo punto avremmo potuto selezionare un altro campo qualsiasi (che ci fornisca però risultati coerenti) come ad esempio ''IdSport" o 'IdDisciplina': in questo caso avremmo il numero delle medaglie (cioè dei vincitori) per nazione e per sport (o disciplina) anzichè per Edizione.

Facciamo click su 'Avanti'.

Abbiamo finora definito le righe e le colonne, non ci resta che definire la parte centrale, e cioè ivalori di intersezione (TOTALI)  che saranno sempre  dei valori calcolati in  base alle funzioni di aggregazione:'Conteggio', oppure 'Max' , 'Min', 'Primo' o 'Ultimo'.

Precisiamo a questo punto che la Query a campi incrociati è sempre una Query di raggruppamento.

La domanda esatta è: "Quale valore deve essere calcolato per ogni intersezione di riga e di colonna ?"

Rispondiamo con il campo 'Vincitore', quindi applichiamo la funzione 'Conteggio' , notiamo che non appena compiute le 2 selezioni, nella parte inferiore della finestra appare al posto di TOTALE, l'espressione: Conteggio(Vincitore) (figura 5).

Facciamo attenzione anche allacasella di controllo 'Includi somme di righe' : cosa significa? Lasciandola selezionata Access automaticamente aggiungerà una intestazione di riga che si chiamerà'TOTALE di Vincitore' con i totali di riga cioè con il numero di medaglie complessive per ciascuna nazione, come vedremo nei risultati. 

Se la deselezionassimo, non avremmo questa utile informazione di riepilogo ma soltanto la 'matrice' per edizione.

Facciamo click sul pulsante 'Avanti': a questo punto non resta che attribuire un nome alla query, accettiamo il nome proprosto per ora che è quello di 'Risultati-CampiIncrociati' quindi facciamo click su 'Fine', la query viene salvata nel database (figura 6).

Riapriamo quindi la query in modalità 'Visualizzazione Foglio Dati' o facciamo semplicemente 'doppio click' sul nome della Query Risultati-CampiIncrociati ed ecco i risultato finale (figura 7): nelle righe abbiamo le nazioni in ordine alfabetico, (che era quello naturale della tabella 'Nazioni') e nelle colonne dapprima il Totale di riga, e quindi per ogni colonna le edizioni olimpiche e infine nelle intersezioni il conteggio dei vincitori che equivale alnumero delle medaglie pernazione (riga) e per ogni edizione (colonna).

Secondo esempio: stesso obiettivo, rispondere cioè alla domanda: 'Quante medaglie sono state vinte dalle varie nazioni per ciascuna edizione? Ma questa volta costruiamo la query manualmente, cioè senza l'ausilio della procedura di creazione guidata.

Facciamo click sulla voce di menù 'Inserisci', quindi su 'Query' quindi su 'Visualizzazione Struttura', si apre la finestra di definizione query; facciamo click su 'Mosta tabella' (icona gialla segno di '+') ed aggiungiamo le tabelle 'Risultati' e 'Nazioni'.

In corrispondenza del pulsante 'Tipo di query' (quello imediatamente a sinistra del punto esclamativo rosso) sulla barra degli strumenti, selezioniamo 'Query a campi incrociati', come mostrato nella figura 8.
 
Notiamo che nella griglia inferiore compaiono 2 righe: Formula (come in tutte le query di raggruppamento) e 'Campi incrociati'.

Le selezioni possibili relativamente a quest'ultima sono: 'Intestazione Riga', 'Intestazione Colonna' e 'Valore'

Operiamo quindi queste selezioni: trasciniamo il campo Nazione da tabella Nazioni in prima colonna, e il campo IdEdizione da tabella Risultati in seconda colonna. Quindi applichiamo la funzione di aggregazione 'Raggruppamento' ad entrambi i campi.

In corrispondenza della riga 'Campi incrociati' , invece, selezioniamo 'Intestazione riga' per il primo campo 'Nazione' e 'Intestazione colonna' per il secondo campo 'IdEdizione' (figura 9).

A questo punto 'trasciniamo' il campo 'Vincitore' dalla tabellaRisultati, interza colonna e applichiamogli la funzione 'Conteggio' in corrispondenza della riga 'Formula' e l'impostazione 'Valore' in corrispondenza della riga 'Campi incrociati' (figura 10).

Tutte e tre gli elementi base di una query a campi incrociati sono stati definiti: Intestazione riga, Intestazione colonna e Valore.  Cosa manca ?

Manca l'eventuale (non è obbligatoria) indicazione deltotale di riga, cioè di uncampo calcolato che riepiloghi i valori della matrice, in questo caso 'Totale medaglie' etichetta per il campo calcolato: Conteggio(Vincitore)

Trasciniamo una seconda volta il campo Vincitore nella griglia inferiore, sempre con la funzione 'Conteggio' in riga 'Formula', ma questa volta impostiamo a 'Intestazione riga' per 'Campi incrociati' anzichè a Valore, infine facciamo precedere la descrizione del Campo (prima riga) dall'etichetta 'Totale medaglie' e i due punti (:) (figura 11).

Abbiamo terminato. Ora facciamo click sull'icona a forma di floppy (salva) e chiamiamo la query con il nome di 'Medaglie per Nazione e per Edizione'.

Riapriamo la query in modalità "Visualizzazione Foglio Dati" ed ecco il risultato, identico a quello ottenuto nel primo esempio con la procedura guidata (figura 12).

Avvertenza !

Il file dell'esempioQuery-campi-incrociati.zip contenente la Query Medaglie per Nazione e per Edizione , di cui si è discusso in questo tutorial ed infine alcuni dati di prova tratti dal database 'Olimpiadi.mdb', è disponibile nell'area 'Tutorial Download' riservata agli iscritti alle nostre newsletters. Iscriviti ora alla newsletter 'Utilizzare Access per davvero',  è gratis! Puoi utilizzare il riquadro qui a lato sulla sinistra della pagina in alto oppure seguire questo collegamento:

http://www.mc2elearning.com/html/utilizzare_access.html




Esempi Query con Access

Tutorials su Microsoft Access




Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html


Cerca sul web con Google:


Google