IIF formule bij het kiezen van een kolom in een "veld" van een query

Status
Niet open voor verdere reacties.

halmar76

Gebruiker
Lid geworden
28 nov 2003
Berichten
60
Hallo,

Ik wil graag in een query de omzet van de "laatste" maand selecteren. Hij moet dus met behulp van de maand(vandaag())-1 functie de juiste maand selecteren en dus de bijvoorbeeld nu de kolom april selecteren.
Nu heb ik een aparte tabel waarin ik steeds de laatste maand handmatig zet. Ditzelfde geld ook voor de cummulatieve omzet.

Ik hoop dat iemand een handigere oplossing heeft.

Alvast bedankt,

Halmar
 
Voeg aan je query in ontwerpweergave een kolom toe.

Zet dit in de eigenschap veld:

DateDiff("m", [Omzetdatum],Date())

en dit in de eigenschap criteria:

1

Omzetdatum even aanpassen naar de naam van je kolom waarin je de omzetdatum vast legt.

FESTER
 
Ik ben al even aan het knutselen geslagen en ben gekomen tot:

Expr1: IIf(((maand(vandaag())-1)=1);[omzet jan 2006])

Alleen pikt Access deze formule niet. Ik kan het veld wel verlaten maar zodra ik de query wil draaien zegtie dat ik teveel haakjes heb gebruikt in:

Expr1: [omzet 2006].[IIf(((maand(vandaag())-1)=1);[omzet jan 2006])]

Hiermee wil ik dus dat in februari de laatste maand in een query wordt gebruikt, januari dus.

Halmar
 
Hoi Fester,

Hij doet het toch nog niet. Of de haakjes kloppen niet of te weinig argumenten.
De tabel is als volgt opgebouwd:

Klantnummer / Omzet jan 2006 / Omzet feb 2006 / Omzet mrt 2006 / Omzet apr 2006 enz.
1000271 / 50.0000,- / 100.000,- / 75.000,- / 25.000,- enz.

Ik heb hem ook als rar bijgesloten.
 

Bijlagen

Ik kan hier geen Rar bestanden openen en geen WinRAR installeren.
Sluit ff bij als WinZip bestand, Access 2000 formaat.

FESTER
 
Je moet natuurlijk wel over omzetdatums beschikken.
Importeer je de omzetgegevens?
Zo nee, dan raad ik je aan om je gegevensstruktuur aan te passen:

- omzetregels vastleggen
- totaliseren per maand per klant via een query, NIET in een tabel stoppen!

Als je je huidige opzet wilt blijven gebruiken, zul je in VBA een funktie moeten schrijven om je kolomnamen om te zetten naar maanden.

FESTER
 
OK, ik heb een tabel met alle orderregels uit onze database.

Alleen, het aantal regels loopt op tot aan het eind van het jaar zo'n 150.000 regels, vandaar de bundeling per maand. Anders zou het openen van de CRM-applicatie te veel tijd in beslag nemen. De orderregels zelf worden met een query incidenteel opgevraagd en zijn dan redelijk snel te draaien.

Ik heb deze tabel ook even toegevoegd.
 

Bijlagen

Maak een tabelmaakquery om je maandomzet per klant te berekenen.
Gebruik 1 kolom maandomzet, dus niet (zoals je nu doet, een kolom voor iedere maand)
Stel gegevenstype voor de kolom in op datum/tijd.

Hierbij een voorzetje.
Kan zijn dat je de komma's door puntkomma's moet vervangen.

SELECT [Orders 2006].Klantnummer, Sum([Orders 2006].Factuurbedrag) AS Maandomzet, Val(Format(Datum,"yyyymm")) AS Omzetperiode INTO tblMaandomzet
FROM [Orders 2006]
GROUP BY [Orders 2006].Klantnummer, Format(Datum,"yyyymm"), Year(Datum);

FESTER
 
Hoi Fester,

Het lukt nog niet echt.

Ik probeer nu in het criteria veld een formule te bouwen als:

=IIf(Month(Date())-1=1;>1-1-2006 and <1-2-2006)..........

Om zo de juiste maand te filteren. Alleen werkt hij zo niet.
Uit jouw oplossing kom ik eerlijk gezegd niet echt.

Ik hoop dat je me nog verder kan helpen want ik heb het idee dat ik dicht bij ben.

p.s. ik werk met de nederlandse versie van Access 97.
 
Ik hoop dat je me nog verder kan helpen want ik heb het idee dat ik dicht bij ben.

Zolang je blijkt persisteren in je aanpak bzul je echt niet dichtbij komen.
Nogmaals, om maanden uit te filteren op jouw manier heb je kolommen nodig met gegevenstype datum/tijd.
Heb je m'n query al geprobeerd (kwestie van knippen en plakken in het SQL weergave venster van een lege query)....

Lees nou ff rustig m'n eerdere reakties door.
Of laat er eens een nachtje overheen gaan ;)

FESTER
 
Ik heb 'm.....ik heb nu de query gedraaid en als criteria in het omzetperiode veld: =200600+Month(Now())-1 gezet en dan doetiehet. Zo kan ik weer verder.

Super bedankt!
 
Mooi zo.

Nog een tip, gebruik Date() ipv Now().
In dit geval maakt dat niet uit, omdat je je datum converteert.
Maakt wel uit uit je datums met de huidige datum wilt vergelijken.
Stel, je wilt alle orders zien tot vandaag.
Now() geeft de huidige datum met tijdstempel.
Als je nu als konditie < Now() meegeeft, krijg je alle orders te zien tot nu.
Daar kunnen dus orders van vandaag inzitten, dat wil je niet dus onjuist.

Date() geeft de huidige datum met tijdstempel 00:00:00 (middernacht).
Met de funktie Date(0 kun je dus vergelijken tegen datum zonder tijdstempel.

FESTER
 
halmar76 zei:
Ik heb 'm.....ik heb nu de query gedraaid en als criteria in het omzetperiode veld: =200600+Month(Now())-1 gezet en dan doetiehet. Zo kan ik weer verder.
Super bedankt!

Beter is om dit als criteria in je omzetperiode veld te zetten:

= Val(Format(Date(),"yyyymm"))-1

FESTER
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan