
Estou usando uma consulta do Access para capturar a quantidade de itens específicos solicitados por semana no Microsoft Access. Meu conjunto de dados vai de 1º de junho de 2018 a 31 de maio de 2019. Adicionei uma coluna para extrair o número da semana de cada data de pedido correspondente e funciona bem, desde que eu comece com a primeira semana de um ano civil (primeira semana de janeiro) usando a seguinte expressão no campo de consulta:
Week No: DatePart("ww",[date],1,1)
Meu problema é que quero que a semana de 1º de junho de 2018 apareça como a primeira semana do ano e continue cronologicamente (com a semana 53 correspondendo à última semana de maio de 2019). 1º de junho de 2018 cai na semana 22 do ano civil, então modifiquei a expressão para isto:
Week No: DatePart("ww",[date],1,22)
No entanto, agora recebo um erro “#func” no campo para todas as linhas.
Existe uma maneira de editar esta expressão para que o "ano" que estou vendo siga o padrão de 1º de junho a 31 de maio e os números da semana reflitam isso?
Responder1
O finalfirstweekofyear
argumento para oDatePart
A função aceitará apenas uma das quatro enumerações:
vbUseSystem
(0) Use a configuração da API NLS.vbFirstJan1
(1) Começa com a semana em que ocorre 1º de janeiro (padrão).vbFirstFourDays
(2) Comece com a primeira semana que tenha pelo menos quatro dias no ano novo.vbFirstFullWeek
(3) Comece com a primeira semana completa do ano.
Como tal, fornecer a este argumento um valor 22
resultará em um erro.
Como o ano definido como 1º de junho de 2018 a 31 de maio de 2019 é compensado em relação ao ano civil em 151 dias, você precisará compensar seus cálculos por esse valor.
Portanto, o cálculo fica:
Week No: datepart("ww",datevalue([date])-151)
Por exemplo:
?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
Para preparar a expressão para anos futuros, você também pode querer calcular o deslocamento em tempo real (já que nem sempre pode ser 151, visto que alguns anos serão anos bissextos).
Para conseguir isso, você pode usar a seguinte expressão:
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)))