totalen

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.726
Hallo,
Ik heb een formulier dat mijn inkomsten weergeeft per maand en dat startenden vanaf 4 jaar geleden tot nu
Het uiteindelijk tonen van het formulier duurt nogal een tijdje
Ik vroeg me af of het sneller kan

in elke cel staat iets als:

=IIf(IsNull(DSum("[bedrag_a]";"Betalingen";"Year([datum])=StartYear And Month([datum])=1"));0;(DSum("[bedrag_a]";"Betalingen";"Year([datum])=StartYear And Month([datum])=1"))

zo heb ik dus 48 cellen in mijn formulier

inkomen.webp

enig idee? alvast bedankt
 
Wat had je willen zien dan? Sowieso lijkt de constructie mij enigszins onbeholpen, want volgens mij kun je die bedragen in een flodder van een seconde uitrekenen met een kruistabel.
 
Ja, Michel, wat wil ik zien... ?

zoals blijkt uit de formule he:

DSum("[bedrag_a]";"Betalingen";"Year([datum])=StartYear And Month([datum])=1"))

de som van alle bedragen_a uit de tabel betalingen van de maand januari voor een bepaald jaar, en ik, om de snelheid wat te reduceren, beperk me tot 4 jaar terug

ik ken NIETS van een kruistabel... heb dat nooit echt begrepen (omdat ik dacht dat nooit echt nodig gehad te hebben

Gr
JP
 
Hallo,

is dit niet eerder een rapport dan een formulier? Of moet je hier, afhankelijk van het resultaat nog gegevens aanpassen? In elk geval kan je misschien beginnen om als basis voor je gegevensraster een groepsquery te nemen (groeperen op jaar en maand). Dan ben je in elk geval van de domein functies vanaf, want dat is, samen met subqueries, zowat de traagste manier van gegevens verwerken.
 
Overzichten op basis van een kruistabel zijn prima te maken; dat is echt het makkelijkste van het makkelijkste. Daarbij kun je groeperen op elke gewenste waarde, en de totalen dus ook op elke waarde laten uitrekenen. Jouw methode is echt niet handig :).
Dat overzicht kun je dan prima op een formulier of in een rapport laten zien, afhankelijk van wat het doel is van dat rapport/formulier. Enige nadeel daarbij: formulieren maken gebruik van vaste kolomkoppen, en een kruistabel heeft variabele kolomkoppen. Ik heb in de cursus een apart hoofdstuk gemaakt over hoe je variabele koppen boven een kruistabel formulier/rapport kunt zetten, zodat je op basis van een selectie (jaren, maanden) tóch de juiste koppen krijgt.
Al is dat dan weer wel wat programmeerwerk. Maar dus best mogelijk. En de kruistabel zelf heb je in twee minuten gemaakt :).
 
Het lukt voor geen meter Michel... word het stilaan beu...
daarom stuur ik je even een tabel door in de hoop dat je me op weg kan zetten
JP
 

Bijlagen

Geen probleem :). Ik heb er nog wat bedragen bijgeknald, zodat je het principe wat beter kan zien.
 

Bijlagen

geloof het of niet, maar het overzetten naar mijn situatie werkt!!! en, flitsend snel... top

Toch nog 3 vraagjes...
- kan je bvb aangeven dat betalingen van 10 jaar terug niet meer in de tabel moeten staan?
- kan er een extra lijn onderaan bij dat de gemiddelden uitrekent per maand
- ken er op het einde een kolom bij die de som van alle maanden weergeeft per jaar

(op de duur wordt een mens veeleisend he)
 
1: ja. Als je de query zo aanpast:
Code:
TRANSFORM Sum(inkomsten.Bedrag_a) AS SomVanBedrag_a
SELECT Year([Datu_betaling]) AS Jaar
FROM inkomsten
[B]WHERE (((Year([Datu_betaling]))>Year(Date())-10))
[/B]GROUP BY Year([Datu_betaling])
PIVOT Format([Datu_betaling],"mmm") In ("Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
Er komt dus, als je in het queryontwerp werkt, een veld bij met deze instelling
PHP:
Veld: Expr1: Year([Datu_betaling])
Totaal: Waar
Criteria: >Year(Date())-10

Vraag 2: Nee. En dat is gelijk ook het antwoord op vraag 3 :). Je kunt één totaalregel toevoegen aan een query, met dus maar één functie. Wil je meer: Maak dan een formulier op basis van de query, en zet in de voettekst tekstvakken met de functies AVG en SUM. Dan ben je er.
 
ik schrijf in de voettekst van het formulier:
=Gem([jan])
en krijg
#FOUT
 
Zit er misschien een jaar in met geen waarde? En is het niet AVG?
 
Als ik AVG ingeef zet het systeem het automatisch om naar GEM
heb voor alle maanden de #Fout... ongeacht of er maanden zijn met geen waarden of niet
 
Doet Sum het wel?
 
sum gebruik ik niet ik schrijf bij besturungsbron:

=[jan]+[feb]+[mrt]+[apr]+[mei]+[jun]+[jul]+[aug]+[sep]+[okt]+[nov]+[dec]

voor het gemiddelde:

stap1.webp

en als resultaat

stap2.webp

dus, in alle velden #FOUT
 
Ad 1: waarom zo ingewikkeld het jaar optellen? Met een extra veld erbij heb je het jaartotaal al in de kruistabel staan.
PHP:
TRANSFORM Sum(inkomsten.Bedrag_a) AS SomVanBedrag_a
SELECT Year([Datu_betaling]) AS Jaar, Sum(inkomsten.Bedrag_a) AS AS Jaartotaal
FROM inkomsten
GROUP BY Year([Datu_betaling])
PIVOT Format([Datu_betaling],"mmm") In ("Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
Je zet er dus dit veld bij:
Veld: [Bedrag_a]
Totaal: Som
Kruistabel: Rijkop.
En dat veld gebruik je dan vervolgens in je rapport/formulier.
Ik heb het vervolgens even in het voorbeeld getest, en daar komen de cijfers er prachtig uit.
 

Bijlagen

Ik krijg die gemiddelden niet goed in mijn concrete situatie
Ik blijf #FOUT
in de cellen zien
 
Dan doe je iets fout :). Omdat je eigen voorbeeld het goed doet, zou ik dat als voorbeeld nemen. Of een nieuw voorbeeld posten waar de fout in zit.
 
veld geschrapt,
opnieuw aangemaakt,
zelfde formule (=gem([Jan])
geen foutmelding meer...
"begrijpe wie begrijpen kan"
Maar
Ik vraag als aantal decimalen voor het veld "0"
en toch worden er tot 4 decimalen getoond
Wat kan ik hier aan doen?

Bedankt
 
Bedenking Michel

Zoals jij het formulier opzet is alles correct
Maar
Als je een gemiddelde maakt van de jaartotalen, dan krijg je een vertekend beeld als je het huidige jaar meeteld
Dus, het gemiddelde van de jaartotalen zou het gemiddelde moeten zijn van alle jaartotalen - het huidige jaartotaal
Hoe krijg je dat voor mekaar
JP
 
Probeer deze SOL maar:

Code:
TRANSFORM Sum(inkomsten.Bedrag_a) AS SomVanBedrag_a
SELECT Year([Datu_betaling]) AS Jaar, Sum(inkomsten.Bedrag_a) AS Jaartotaal
FROM inkomsten
WHERE (((Year([Datu_betaling]))<>Year(Now())))
GROUP BY Year([Datu_betaling])
PIVOT Format([Datu_betaling],"mmm") In ("Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan