
Я использую запрос Access для сбора количества определенных товаров, заказанных по неделям в Microsoft Access. Мой набор данных охватывает период с 1 июня 2018 г. по 31 мая 2019 г. Я добавил столбец для извлечения номера недели из каждой соответствующей даты заказа, и он отлично работает, если начать с первой недели календарного года (первой недели января), используя следующее выражение в поле запроса:
Week No: DatePart("ww",[date],1,1)
Моя проблема в том, что я хочу, чтобы неделя 1 июня 2018 года отображалась как первая неделя года и продолжалась в хронологическом порядке (неделя 53 соответствует последней неделе мая 2019 года). 1 июня 2018 года попадает в 22-ю неделю календарного года, поэтому я изменил выражение следующим образом:
Week No: DatePart("ww",[date],1,22)
Однако теперь я получаю ошибку «#func» в поле для всех строк.
Есть ли способ отредактировать это выражение так, чтобы «год», который я рассматриваю, следовал шаблону 1 июня - 31 мая, и номера недель отражали это?
решение1
Финалfirstweekofyear
аргумент в пользуDatePart
Функция будет принимать только одно из четырех перечислений:
vbUseSystem
(0) Используйте настройку API NLS.vbFirstJan1
(1) Начать с недели, на которую приходится 1 января (по умолчанию).vbFirstFourDays
(2) Начните с первой недели нового года, которая содержит не менее четырех дней.vbFirstFullWeek
(3) Начните с первой полной недели года.
Таким образом, предоставление этому аргументу значения 22
приведет к ошибке.
Поскольку год, определенный как период с 1 июня 2018 года по 31 мая 2019 года, смещен относительно календарного года на 151 день, вам необходимо сместить свои расчеты на эту сумму.
Таким образом, расчет становится следующим:
Week No: datepart("ww",datevalue([date])-151)
Например:
?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
Чтобы выражение можно было использовать в будущих годах, вы также можете рассчитать смещение «на лету» (поскольку оно не всегда может быть равно 151, поскольку некоторые годы будут високосными).
Чтобы добиться этого, можно использовать следующее выражение:
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)))