Newsgroup: it.comp.appl.access
Titolo: media delle medie (ancora)

Roberto
Innazi tutto grazie Roberto!
Penso di essermi espresso malissimo! le date non si riferiscono ai soli
gennaio e febbraio ma a tutto il periodo compreso fra le varie
registrazioni.
Innoltre ho dimenticato di precisare che nel MioCampoTesto sono contenuti
dei nomi. Ho necessità infatti di creare un report  filtrato per
MioCampoTesto con elencate le registrazioni mese per mese con la media in
calce a tutti i  mesi calcolata  con il metodo già espresso nel messaggio
originale ovvero [media di( tutti i valori del mese + media del mese
precedente)].
Ancora ...... [(somma di tutti i valoridel mese)+(media mese
precedente)]/[(numero dei valori del mese)+1]="media che mi serve"
nb. la"media mese precedente" è ottenuta  come "media che mi serve".
Grazie infinite
- Bruno -

 - Bruno -
Cosi la cosa è un po' più complessa, e non ho una soluzione che preveda solo
l'uso di un paio di query unione.
La soluzione che ti propongo è quella di crearti una tabella di appoggio
(Tabella2) che contenga la media di tutti i mesi, media calcolata come tu
hai sopra scritto; quindi creare il report raggruppato per mese e nella
sezione piè di pagina di gruppo inserire una casella di testo non associata
che, tramite una funzione DLookup, ricava la media da Tabella2.
Se i dati sono contenuti in una tabella che si chiama Tabella1 che ha una
struttura simile a questa:
ID                              Contatore e chiave primaria
MioCampoData         Data/ora
MioCampoTesto        Testo
MioCampoNumero    Numerico
ecc. ecc.
Creati una tabella chiamata Tabella2 che abbia la seguente struttura:
AnnoMese        Numerico e chiave primaria
MediaValore    Numerico
Creati una maschera non associata chiamata Maschera1 che contenga una
casella ti testo non associata chiamata CercaNome ed un pulsante di comando.
Creati una query di selezione chiamata Query1 che selezionerà da Tabella1 i
record da prendere in considerazione; in Query1 ci saranno tutti i campi di
Tabella1 oltre ad un campo calcolato chiamato AnnoMese; la query sarà
ordinata per questo campo calcolato; Query1 avrà il seguente codice SQL:
SELECT Tabella1.*, Val(Format([MioCampoData],"yyyymm")) AS AnnoMese
FROM Tabella1
WHERE (((Tabella1.MioCampoTesto)=[Forms]![Maschera1]![CercaNome]))
ORDER BY Tabella1.MioCampoData;
Creati un report chiamato Report1 che abbia come origine record Query1;
Report1 deve essere raggruppato per AnnoMese; nella sezione Piè di pagina
AnnoMese di Report1 inserisci una casella di testo non associata nella cui
origine controllo scrivi:
=Val(DLookUp("MediaValore";"Tabella2";"AnnoMese=" & [AnnoMese]))
A fronte dell'evento "Su clic" del pulsante di comando inserito in
Maschera1, genera il seguente codice VBA:
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim DepAnMe As Long
Dim Uno As Long
Dim Conta As Long
Dim NuovaMedia As Long
Dim Pippo As Boolean
DoCmd.SetWarnings False
DoCmd.RunSQL "Delete * From Tabella2;"
DoCmd.SetWarnings True
Set dbs = CurrentDb()
Set rst2 = dbs.OpenRecordset("Tabella2")
Set qdf = dbs.QueryDefs("Query1")
qdf.Parameters![Forms!Maschera1!CercaNome] = Me!CercaNome
Set rst = qdf.OpenRecordset
rst.MoveFirst
DepAnMe = rst!AnnoMese
Conta = 0
Uno = 0
Pippo = True
Do Until rst.EOF
    If rst!AnnoMese <> DepAnMe Then
    If Pippo = True Then
        NuovaMedia = Uno / Conta
        Pippo = False
    Else
        NuovaMedia = (NuovaMedia + Uno) / (Conta + 1)
    End If
        rst2.AddNew
        rst2!AnnoMese = DepAnMe
        rst2!MediaValore = NuovaMedia
        Uno = 0
        Conta = 0
        rst2.Update
        DepAnMe = rst!AnnoMese
    End If
    Uno = Uno + rst!MioCampoNumero
    Conta = Conta + 1
    rst.MoveNext
Loop
NuovaMedia = (NuovaMedia + Uno) / (Conta + 1)
rst2.AddNew
rst2!AnnoMese = DepAnMe
rst2!MediaValore = NuovaMedia
rst2.Update
Set qdf = Nothing
Set rst = Nothing
Set dbs = Nothing
DoCmd.OpenReport "Report1", acViewPreview
Come vedi, questa routine fa riferimento alla libreria Microsoft DAO,
pertanto, se usi una versione di Access seguente Access 97, aggiungi ai
riferimenti del tuo database il riferimento a tale libreria.
A questo punto apri Maschera1, digita nella casella di testo la stringa con
la quale selezionare i record in base al valore contenuto nel campo
MioCampoTesto e pigia il pulsante di comando: si dovrebbe aprire il report
mostrandoti ciò che volevi.
Facci sapere se la soluzione funziona.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:wT2H9.51097$3l.14...@twister1.libero.it...

Grazie Mille!
Ci lavoro il prossimo fine settimana e poi faccio sapere.
- Bruno -