Newsgroup: it.comp.appl.access
Titolo: Calcolare valori su una query rispetto al totale delle COLONNE e non delle righe

Ho una query a campi incrociati che, in base ad una precisa selezione, mi
puo' dare come risultato non solo dati differenti, ovviamente, ma anche un
numero di colonne differenti.
Ora, i dati della query sono valori assoluti. Ma ha me interessano anche in
percentuali.
Laddove la percentuale richiesta è un valore calcolato rispetto un un altro
valore fisso, non ho problemi. Nel campo "il valore" della query scrivo
un'espressione legata a quel valore fisso, e sono a posto.
Riesco anche a calcolare la percentuale dei singoli valori rispetto al
totale dei valori della RIGA (ho fatto un'altra query che mi calcola solo la
colonna del totale, e nella query a campi incrociati, ho inserito la
precedente query, legandola con una relazione. In questo modo invece di
visualizzare la colonna del totale come campo calcolato (che non posso
utilizzare per un'espressione nel campo "il valore), utilizzo il campo della
seconda query dove ho già i totali belli e fatti e così posso utilizzare
questo campo in una qualsiasi esperessione nel campo "il valore"
Il problema mi sorge quando devo calcolare, ad esempio, la percentuali dei
valori sul totale della COLONNA, e non più della riga.
Come posso fare? Con una query di unione sono riuscito a visualizzare i
totali delle relative colonne in fondo alla query.
Ma non sono riuscito a capire come fare i calcoli rispetto a questi valori
totali, per ogni colonna.
Fra l'altro c'è un problema in più. Le colonne non sono sempre quelle, e
dunque qualsiasi ulteriore query che  faccio, basata sull'iniziale query a
campi incrociati, mi da un messaggio di errore se la query a campi
incrociati viene non ha più le colonne che aveva inizialmente, a causa
magari di una diversa selezione di dati all'origine.
A questo punto, dunque, credo che il problema possa avere una soluzione
esclusivamente via codice, ma, pur avendone una certa esperienza, non riesco
a trovare il bandolo della matassa.
Qualcuno può darmi qualche suggerimento?
Grazie
Stefano
-- 
Posted from root@[212.104.51.2] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:JPEDICIALLLHDFAEKNAPOEL...@gvassociati.it...

Ammettiamo che la tabella sulla quale si basa la query a campi incrociati si
chiami Tabella2 e che contenga un campo chiamato X che adoperi per
l'intestazione di riga, un campo di tipo testo chiamato Y per l'intestazione
di colonna e un campo di tipo numerico chiamato Importo.
Ipotizziamo che nella query voi la somma del campo Importo ed il totale di
riga, il codice SQL di questa query sarà:
TRANSFORM Sum(Tabella2.Importo) AS [Il valore]
SELECT Tabella2.X, Sum(Tabella2.Importo) AS [Totale di Importo]
FROM Tabella2
GROUP BY Tabella2.X
PIVOT Tabella2.Y;
Se invece vuoi che il campo chiamato [Il valore] della query debba contenere
la percentuale della somma di Importo rispetto al totale di colonna, il
codice SQL della query a campi incrociati sarà:
TRANSFORM Sum([Importo]/DSum("Importo","Tabella2","Y=" & Chr$(34) & [Y] &
Chr$(34))) AS [Il valore]
SELECT Tabella2.X, Sum(Tabella2.Importo) AS [Totale di Importo]
FROM Tabella2
GROUP BY Tabella2.X
PIVOT Tabella2.Y;
Naturalmente poi assegnerai al campo [Il valore]  il formato Percentuale. Ti
ricordo che ho dato per presupposto che Y sia un campo di tipo testo.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

Caro Roberto,
voglio innanzi tutto ringraziarti per il prezioso suggerimento che mi hai
dato riguardo alla query a campi incrociati.
Era proprio quello di cui avevo bisogno, e tutto funziona perfettamente.
Ho avuto un solo problema ad un certo punto.
Mentre tutte le altre funzionavano, una query in particolare mi dava un
errore apparentemente strano.
"Errore di sintassi (operatore mancante) nell'espressione della query
'[Zona]=' "
La query era questa:
"TRANSFORM Sum(TAB_I_Base.Risposta1)/DSum("[Risposta1]","TAB_I_Base","[Zona]
=" & Zona) AS [Il valore]
SELECT TAB_I_Base.Intenzioni, Sum(TAB_I_Base.Risposta1) AS Totale
FROM TAB_I_Base
GROUP BY TAB_I_Base.IDIntenzioni, TAB_I_Base.Intenzioni
PIVOT TAB_I_Base.Zona;"
Sono andato a vedere la corrispondente query con valori assoluti, ed ho
notato che, contrariamente alle altre, diverse celle avevano valori nulli
(perchč cosě doveva essere in base ai dati immessi)
Ho capito che era questo a generare quell'errore.
Allora, ragionandoci un po' sopra e ricordandomi della funzione IIF, ho
sostituito la variabile [ZONA] con un riferimento ad un valore che mi va a
prendere su una maschera particolare ([Forms]![Ricerca].[TotZone]) e che
corrisponde al valore massimo di Zona.
Dunque cosě č la query:
PARAMETERS [Forms]![Ricerca].[TotZone] Short;
TRANSFORM Sum(TAB_I_Base.Risposta1)/DSum("[Risposta1]","TAB_I_Base","[Zona]
=" & IIf(Zona Between 1 And [Forms]![Ricerca].[TotZone],Zona,100)) AS [Il
valore]
SELECT TAB_I_Base.Intenzioni, Sum(TAB_I_Base.Risposta1) AS Totale
FROM TAB_I_Base
GROUP BY TAB_I_Base.IDIntenzioni, TAB_I_Base.Intenzioni
PIVOT TAB_I_Base.Zona;
Quel 100 č un valore alternativo dato "a cavolo" (il numero massimo di
[Zona] infatti č 9), ma fa in modo che venga inserito comunque un criterio
valido qualora [Zona] risulti nullo.
Insomma, il risultato finale č che la query funziona!
Ciao, e grazie ancora!
