Newsgroup: it.comp.appl.access
Titolo: problema con criteri dfunction

Buonasera
 
vorrei fare una media mobile di 15 valori in una query ma il criterio 
che ho scritto sembra non funzionare, la tabella di partenza ha i 
seguenti campi:
id, numerico
TotN, numerico
 
nella query
 
reimporto tutto ed aggiungo il seguente campo media15
 
media15: DCount("TotN";"elaborazione";"id >" & [id]-15 And "id<=" & [id])
 
elaborazione è il nome della query, e per fare la verifica ho usato 
DCount al posto di DAvg che restituisce sempre 33 che è il numero di 
record presenti. Io mi sarei aspettato fino all'id 15 valori che 
salivano progressivamente di ragione 1 da 1 a 15 e da 15 in poi il 
valore fisso 15.
 
chiedo a voi numi come posso risolvere, ho provato anche between ma il 
risultato non cambia.
 
Grazie
Akery
 
-- 
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

Giorgio Rancati ha scritto un bellissimo articolo su come sfruttare la matematica per effettuare calcoli di media ponderata e geometrica...
Suggerisco una lettura approfondita:
 
http://www.riolab.org/index.php?option=com_content&view=article&id=134:media-geometrica-semplice-e-media-geometrica-ponderata&catid=46:access&Itemid=69
 
 
@Alex

Il 28/03/20 20:58, @Alex ha scritto:

l'articolo è sicuramente interessante ma non risponde alla mia domanda 
che provo a porre in questi altri termini: come faccio a raggruppare 15 
record per volta ovvero preso il record x devo poter aggreggare da
x-15 a x.
 
Akery

Premesso che se devi raggruppare su 15(n) records devi avere un campo da usare allo scopo.
 
Se non lo hai lo devi creare.
 
Ti basterebbe un numero progressivo che dividi per 15 prendendo solo la parte intera.
IndiceRaggr=NumProgr\15
Il backslash funziona come Fix(..) o Cint(..)
Pii raggruppi...
Avrai 
0÷14=0
15÷29=1
30÷44=2
...
 
Poi usa le funzioni espresse da Giorgio inserendo come calcolo della frequenza il count per Raggruppamento.
 
@Alex

Il 29/03/20 11:34, @Alex ha scritto:

il
risultato che dsidero ottenere è sotto riportato, l'ho fatto in excel
 
id	TotN			media15
1	0,052960222016651	#RIF!
2	0,037341992346051	#RIF!
3	0,041723166788359	#RIF!
4	0,05410354586316	#RIF!
5	0,056578528193692	#RIF!
6	0,06044692138685	#RIF!
7	0,080181757940077	#RIF!
8	0,087213536089098	#RIF!
9	0,096766707920792	#RIF!
10	0,103529175185173	#RIF!
11	0,119213892837278	#RIF!
12	0,127506257047774	#RIF!
13	0,139864961247682	#RIF!
14	0,147686084466428	0,086079767809219
15	0,170400921487757	0,091701178054455
16	0,167031484011126	0,099305928854086
17	0,170352954042158	0,108173326300493
18	0,175710083593959	0,117105787420867
19	0,18115050057443	0,125575584401618
20	0,193798662636255	0,134723593364456
21	0,198136093963923	0,143902871536261
22	0,202809469274148	0,152078052291865
23	0,211937547508695	0,160392986386505
24	0,215735074694487	0,168324210838085
25	0,224508554139744	0,176389502768389
26	0,227279757934321	0,183593893774859
27	0,22972961384432	0,190408784227962
28	0,228860457736395	0,19634181732721
29	0,232066882541711	0,201967203865562
30	0,232944060559529	0,206136746470347
31	0,229271525219991	0,210286082550938
32	0,223062648867224	0,213800062205942
33	0,219494060835518	0,216718994022046
 
cosa sto sbagliando a scrivere nel criterio della dfunction? a me sembra 
corretto ma non mi da il risultato atteso
 
Akery

Se ci fai vedere codice e/o SQL... magari...
 
@Alex

 
da access
 
SELECT 
dati.id
, dati.TotN, DAvg("totn","elaborazione","id >" & [id]-15 
And "id <=" & [id]) AS media15
FROM dati;
 
da excel nella colonna C
 
=MEDIA(B20:B34) con riferimenti variabili cella per cella
 


I 2 Calcoli sono UGUALI solo se in EXCEL questo calcolo lo assegni alla Cella C34=MEDIA(B20:B34)
 
Se lo hai assegnato alla Cella C20... credo sia evidente la differenza...
 
Purtroppo non capisco bene quello che hai fatto perchè le informazioni che dai sono molto parziali e danno per assunto si sappia come stai operando... cosa assai improbabile.
 
Ho importato i dati in Excel, fatta la Media partendo dalla Cella B2 in questo modo:
 
Id	TotN	                Media15Excel  
1	0,052960222016651	0,091701178054455
2	0,037341992346051	0,099305928854087
...
33	0,219494060835518	0,219494060835518
 
Dove la Colonna C2=MEDIA(B2:B16) quindi sono 15 RIGHE, trascinata fino in basso.
 
Poi ho importato tutto in ACCESS, ed ho scritto questa Query:
 
SELECT Media.[Id], Media.[TotN], Media.[Media15Excel], DAvg("Totn","Media","id>=" & [id] & "And id <" & [id]+15) AS Media15Access
FROM Media;
 
RISULTATO:
 
Id	TotN	Media15Excel	Media15Access
1	0,052960222016651	9,17011780544548E-02	9,17011780544548E-02
2	0,037341992346051	9,93059288540865E-02	9,93059288540865E-02
3	0,041723166788359	0,108173326300494	0,108173326300494
4	0,054103545863160	0,117105787420867	0,117105787420867
5	0,056578528193692	0,125575584401618	0,125575584401618
6	0,060446921386850	0,134723593364456	0,134723593364456
7	0,080181757940077	0,143902871536261	0,143902871536261
8	0,087213536089098	0,152078052291865	0,152078052291865
9	0,096766707920792	0,160392986386505	0,160392986386505
10	0,103529175185173	0,168324210838085	0,168324210838085
11	0,119213892837278	0,17638950276839	0,17638950276839
12	0,127506257047774	0,183593893774859	0,183593893774859
13	0,139864961247682	0,190408784227962	0,190408784227962
14	0,147686084466428	0,19634181732721	0,19634181732721
15	0,170400921487757	0,201967203865562	0,201967203865562
16	0,167031484011126	0,206136746470347	0,206136746470347
17	0,170352954042158	0,210286082550938	0,210286082550938
18	0,175710083593959	0,213800062205942	0,213800062205942
19	0,181150500574430	0,216718994022046	0,216718994022046
20	0,193798662636255	0,219259600696876	0,219259600696876
21	0,198136093963923	0,221218134393847	0,221218134393847
22	0,202809469274148	0,223141637763007	0,223141637763007
23	0,211937547508695	0,22499001671654	0,22499001671654
24	0,215735074694487	0,226295263637324	0,226295263637324
25	0,224508554139744	0,227468617964306	0,227468617964306
26	0,227279757934321	0,227838625942376	0,227838625942376
27	0,229729613844320	0,227918464229241	0,227918464229241
28	0,228860457736395	0,227616605960061	0,227616605960061
29	0,232066882541711	0,227367835604795	0,227367835604795
30	0,232944060559529	0,226193073870566	0,226193073870566
31	0,229271525219991	0,223942744974244	0,223942744974244
32	0,223062648867224	0,221278354851371	0,221278354851371
33	0,219494060835518	0,219494060835518	0,219494060835518
 
Mi sembra siano perfettamente confrontabili.
 
Quindi prova a rivedere cosa hai fatto e ragionaci sopra.
 
@Alex

 FROM Media;
 
Grazie, mi hai risolto il problema!
come immaginavo stavo scrivendo il criterio alla c.o di cane, infatti, 
scrivevo
 
"id>=" & [id] - 15 And "id <" & [id]
 
invece di
 
"id>=" & [id] - 15 & "And id <" & [id]
 
mi è bastato l'esempio per rendermene conto
 
grazie @Alex