Avatar billede puppetmaster Nybegynder
27. januar 2005 - 10:42 Der er 11 kommentarer og
1 løsning

Øge hastighed - Rapportgenerering

Nogle af mine rapporter benytter beregnede felter, så som =Gennemsnit([Temperatur]), hvilket sløver genereringen af rapporten VOLDSOMT. Felterne som indeholder disse beregninger, er sat på rapportfoden.
Jeg vil jo helst ændre rapportens Postkilde til en forespørgsel, men får en fejl, hvis jeg bare kobler feltet på forespørgslen:
Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "Dato" som en del af en aggregatfunktion.

SQL:
SELECT *, Avg([Temperatur]) AS Temp
FROM [MinTabel];
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:09 #1
Der kan man bare se, troede svaret lå ligefor..... :)
Avatar billede jensen363 Forsker
27. januar 2005 - 11:10 #2
Generelt er det af performancehensyn anbefalelsesværdigt at preberegne data :o)
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:14 #3
:)
Avatar billede jensen363 Forsker
27. januar 2005 - 11:31 #4
Mine erfaringer herfra har jeg fra databaser benyttet i netværk, hvor jeg har kunnet opnå en betydelige performanceforbedring i rapport-øjemed ved at preberegne stort set alle data
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:33 #5
Check, men hvordan? Med preberegne mener du vel, at i mit tilfælde ville du flytte beregningerne fra kontrollerne (tekstboksene) til formularens postkilde, som så ændres fra at være en tabel til en forespørgsel.
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:35 #6
Hvis jeg f.eks. har et felt på min rapport som har postkilden
=Gennemsnit([Temperatur])
og formularens postkilde er
MinTabel

så vil jeg ændre dette til en forespørgsel, men denne giver en fejlmeddelelse:
SELECT *, Avg([Temperatur]) AS Temp
FROM [MinTabel];

"Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "Dato" som en del af en aggregatfunktion."
Hvordan skal forespørgslen se ud?
Avatar billede jensen363 Forsker
27. januar 2005 - 11:35 #7
Det kunne være en farbar vej.
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:46 #8
:(
(det var nok derfor min foregænger valgte at beregne dataene på rapporten)
Avatar billede jensen363 Forsker
27. januar 2005 - 11:49 #9
Hvilke elementer indgår i MinTabel ?
Avatar billede puppetmaster Nybegynder
27. januar 2005 - 11:50 #10
Aggregate funktioner kan ikke kobles sammen med en "almindelig" SQL forespørgsel og rapporten kan ikke bygge på 2 datakilder....suk.
Avatar billede juks Novice
27. januar 2005 - 12:45 #11
puppet..
har du prøvet at slå autokorrektur fra eller til , jeg kan huske jeg havde nogle problemer med det(rapporter og autokorrektur) i 2000
Avatar billede kjulius Novice
27. januar 2005 - 18:24 #12
Hvis jeg må tillade mig at komme med en kommentar til din SQL i indledende spørgsmål, så vil du aldrig kunne få den til at fungere som den står:

SELECT *, Avg([Temperatur]) AS Temp
FROM [MinTabel];

Som du har skrevet den, så ønsker du alle felter i MinTabel retur + et felt med gennemsnit på Temperatur feltet. Det kan du ikke, for så snart du specificerer en aggregat funktion (SUM, AVG og lign.), så skal alle andre returnerede felter specificeres i en GROUP BY sætning.

Hvis du gør det (specificerer alle tabellens felter i GROUP BY), får du dog kun gennemsnittet af hver DISTINCT row (husk, at hvis du specificerer alle en tabels felter i GROUP BY, svarer det til at skrive DISTINCT, altså ingen dubletter). Du vil altså kun få gennemsnittet af dubletter, hvilket ikke giver mening.

Du er derfor nødt til enten at droppe kravet om, at få alle tabellens felter med tilbage:

SELECT Avg([Temperatur]) AS Temp
FROM [MinTabel];

Eller gå den anden vej - lave en selvstændig select på gennemsnitsfeltet:

SELECT [MinTabel].*, (SELECT Avg([Temperatur]) FROM [MinTabel]) AS Temp
FROM [MinTabel];

Temp feltet bliver altså nu beregnet i en helt selvstændig forespørgsel (i parantesen).
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