
Ich verwende eine Access-Abfrage, um die Menge bestimmter bestellter Artikel pro Woche in Microsoft Access zu erfassen. Mein Datensatz reicht vom 1. Juni 2018 bis zum 31. Mai 2019. Ich habe eine Spalte hinzugefügt, um die Wochennummer aus jedem entsprechenden Bestelldatum abzurufen. Dies funktioniert einwandfrei, solange ich mit der ersten Woche eines Kalenderjahres (erste Januarwoche) beginne und den folgenden Ausdruck im Abfragefeld verwende:
Week No: DatePart("ww",[date],1,1)
Mein Problem ist, dass ich die Woche vom 1. Juni 2018 als erste Woche des Jahres anzeigen und chronologisch fortsetzen möchte (wobei Woche 53 der letzten Woche im Mai 2019 entspricht). Der 1. Juni 2018 fällt in die Woche 22 des Kalenderjahres, daher habe ich den Ausdruck wie folgt geändert:
Week No: DatePart("ww",[date],1,22)
Allerdings erhalte ich jetzt für alle Zeilen im Feld einen „#func“-Fehler.
Gibt es eine Möglichkeit, diesen Ausdruck zu bearbeiten, sodass das von mir betrachtete „Jahr“ dem Muster vom 1. Juni bis 31. Mai folgt und die Wochennummern dies widerspiegeln?
Antwort1
Das endgültigefirstweekofyear
Argument für dieDatePart
Funktion akzeptiert nur eine von vier Aufzählungen:
vbUseSystem
(0) Verwenden Sie die NLS-API-Einstellung.vbFirstJan1
(1) Beginnen Sie mit der Woche, in der der 1. Januar liegt (Standard).vbFirstFourDays
(2) Beginnen Sie mit der ersten Woche im neuen Jahr, die mindestens vier Tage hat.vbFirstFullWeek
(3) Beginnen Sie mit der ersten vollen Woche des Jahres.
Daher 22
führt die Angabe des Werts für dieses Argument zu einem Fehler.
Da das Jahr, definiert als 1. Juni 2018 bis 31. Mai 2019, um 151 Tage vom Kalenderjahr verschoben ist, müssen Sie Ihre Berechnungen um diesen Betrag verschieben.
Die Berechnung sieht daher wie folgt aus:
Week No: datepart("ww",datevalue([date])-151)
Zum Beispiel:
?datepart("ww",#2018-06-01#-151)
1
?datepart("ww",#2018-07-01#-151)
5
?datepart("ww",#2019-04-01#-151)
44
?datepart("ww",#2019-05-31#-151)
53
Um den Ausdruck für zukünftige Jahre zukunftssicher zu machen, möchten Sie den Offset möglicherweise auch spontan berechnen (da er aufgrund einiger Schaltjahre möglicherweise nicht immer 151 beträgt).
Um dies zu erreichen, können Sie den folgenden Ausdruck verwenden:
Week No: datepart("ww",datevalue([date])-(dateserial(year(date())-iif(month(date())<6,1,0),6,1)-dateserial(year(date())-iif(month(date())<6,1,0),1,1)))