Avatar billede efinnpoulsen Nybegynder
07. marts 2011 - 11:53 Der er 9 kommentarer og
1 løsning

Gennemsnitsberegning

Access 2003, Win XP

Jeg har en database med et felt hvor jeg indtaster nogle resultate løbende for et antal brugere. Alle brugere er i samme tabel.

I et nyt felt skal jeg have beregnet gennemsnittet for hver 8. resultat for hver bruger.

Det skal helst foregå på tabelniveau.

Er der en der har en god løsning på det problem?
Avatar billede mugs Novice
07. marts 2011 - 11:58 #1
Jeg mener ikke, at du kan gøre det på tabelniveau.

Men i en forespørgsel kan du gruppere (Totaler) på hver bruger og indsætte et udtryk der beregner gennemsnittet. Jeg mener der er en funktion der guider dig igennem. Brug querybuilderen.
Avatar billede efinnpoulsen Nybegynder
07. marts 2011 - 12:05 #2
Hej Mugs

Ja, det er rigtig, men der skal kun beregnes for hvert 8. resultat. Den model du beskriver laver, så vidt jeg ved, kun et gennemsnit for alle resultater for denne bruger.
Avatar billede hugopedersen Nybegynder
07. marts 2011 - 15:14 #3
Hvad mener du med 'på tabelniveau'

Du kan da 'sagtens' lave en kode der gør det og smider det i et felt i tabellen.
Men det vil blive lidt tungt hvis der er mange records.

Du laver en koder der looper din tabel med brugere og for hver af disse brugere kalder du en funktion der løber data igennem og for hver 8. record gemmer den gennemsnit i et felt.

Men det er ikke uden fælder:
Rækkefølge - hvordan skal records løbes igennem. Datostempel?
Antal ikke deleligt med 8 - hvad nu hvis der er 83 records?
O.S.V.
Avatar billede sifuentes Nybegynder
07. marts 2011 - 16:08 #4
Hvis du nu vender spørgsmålet om, og dermed forklarer hvorfor hver ottende er specielt? Så har du vel svaret på hvilken faktor der bestemmer hvilke tal skal indgå i middeltalsberegningen? (de otte tal har noget tilfældes, hvad?)
Avatar billede efinnpoulsen Nybegynder
07. marts 2011 - 22:54 #5
Hej Hugupedersen

Tak for dit svar

Med tabelniveau mener jeg at beregningen skal foretages i tabellen og ikke i en forespørgelse, formular eller rapport.

Der er ikke tale om ret mange records, ca. 5-600 om året. Bliver der for mange kan de ældste arkiveres i en historisk database.

Om antallet er ulige burde være lige gyldigt. Jeg havde forestillet mig at beregningen kun skulle foretages når der var 8 nye records, altså en beregning for hver nye 8 records som der ikke har været lavet en beregning på tidligere.

Dit indlæg er udmærket, men det er teori. Det var den praktiske løsning jeg var ude efter, koden!



Hej Sifuentes

Jeg forstår ikke rigtig din kommentar. Hvad mener du med "hvorfor hver 8 specielt"? Hvis du mener at det ville være nemmere at det var hver 7. eller hver 9. så er det ikke det som opgaven lyder på, det skal være hver 8. Hvorfor det er sådan har ingen betydning for løsningen. Ikke fordi det er en hemmelighed, men det vil ikke være rimeligt at bruge plads på det her.



Nu venter jeg til i morgen aften, er der ikke kommet et brugbart svar må jeg indse at det ikke er her resurserne er og så lukker jeg spørgsmålet. Tak for indsatsen.
Avatar billede mugs Novice
07. marts 2011 - 22:59 #6
Er der noget der kendetegner data i hver 8. post fra f.eks. 7. post?

Hvis der er et nummersystem med numrerne fra 1 til 8, og så igen 1 til 8, må man kunne bruge en modulusberegning til at identificere hver 8 post.

Du kan ikke lave det på tabelniveau!
Avatar billede sifuentes Nybegynder
07. marts 2011 - 23:30 #7
Du har svaret på dit eget spørgsmål, netop at der ikke eksistere korrelation mellem din udvalgte data, om talsættet udgøres af 7, 9 2156, eller 41 tal er komplet uinteressant i denne sammenhæng. Der som ingen korrelation eksistere kan talsættene ikke udrages, og dermed kan middeltal ikke beregnes.

Hvis du spørger om et givent recordset kan nummereres stigende eller faldende, er svaret ja, men dersom en enkelt post i recordsettets data ændres/tilføjes/slettes, ændres nummereringen tilsvarende, og nummereringen vil derfor ikke udgøre statiske data, men derimod dynamiske. (efter en nummerering kan udvælgelse ske evt. med heltalsdivision og modulus som kriterie)
Avatar billede efinnpoulsen Nybegynder
08. marts 2011 - 20:35 #8
Hej Mugs

Der er ikke noget der kendetegner de data som der skal beregnes på, de er helt tilfældige og vilkårlige. Dog kan man sige at det er et tal mellem 1 og 300.

Men jeg har tænk på at man kunne oprette et felt mere som kommer til at indeholde tallet 1 når den første records oprettes. Når record to oprettes tager man værdien i det forgående felt og lægger en til. Sådan bliver man ved ind til der står otte i feltet. Når records ni oprettes begynder man forfra med et. På den måde ville man have en værdi hvor man kunne finde de 8 felter der skal laves en gennemsnitsberegning på.

Så burde jeg kunne lave beregningen som en rapport.

Tabellen holdes sorteret på et dato-tids felt.

Jeg fik ideen ud fra din kommentar så hvis du sender et svar så får du de 30 point
Avatar billede mugs Novice
08. marts 2011 - 21:26 #9
Det er lige nøjagtig hvad jeg mener. Du kan også holde beregningen i en forespørgsel.

Men du kan stadig ikke lave det på tabelniveau. For at lave nummereringen automatisk, skal du have noget VBA kode i en formular.
Avatar billede efinnpoulsen Nybegynder
08. marts 2011 - 21:37 #10
Hej Mugs

Jeg er med på det skal laves i en formular, men jeg tror at jeg beslutter mig for at lave et VB program som kommer til at køre som front end og så laver jeg beregningerne i dette program.

Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Rapport kortlægger de 13 bedste muligheder for at sætte turbo på din cloud computing