Alterando a semana inicial do ano no Microsoft Access

Alterando a semana inicial do ano no Microsoft Access

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 finalfirstweekofyearargumento para oDatePartA 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 22resultará 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)))

informação relacionada