Skip to main content
Announcements
Accelerate Your Success: Fuel your data and AI journey with the right services, delivered by our experts. Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Календарь финансового года

Появилась необходимость считать недели в календаре с первого февраля.

При том, логика обратна системной в том, что по умолчанию неделя начавшаяся в предыдущем году заканчивается в следующем (например, если 31/12 - Понедельник 52й недели, то 06/01 - Воскресенье так же 52й недели), а требуется первой неделей года сделать ту, в которой находится 01/02.

Данная задача была решена, но считаю, что решение крайне неэффективно, возможно, есть встроенная функция или более рациональный способ, ведь финансовые календари встречаются часто.

Вот найденное решение:

if(daynumberofyear(Temp.TempDate)<daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01')),

    dual(

         ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & (Year(Temp.TempDate)-1),

         (Year(Temp.TempDate)-1)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)

        )

    ,

   

     dual(

         ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5) & ' week ' & Year(Temp.TempDate),

         Year(Temp.TempDate)*100+ceil((Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-(MakeDate(Year(Temp.TempDate+365-daynumberofyear(WeekStart(year(Temp.TempDate)&'-02-01'))-mod(Temp.TempDate-2,7)+3), 1, (mod(Temp.TempDate-2,7)+1) )-10))/7-0.5)

        )

    ) as [Week and Year],

1 Solution

Accepted Solutions
Not applicable
Author

2 Replies
Not applicable
Author

Ладно, чувствую, что активность в этой группе оставляет желать лучшего.

Так что, тема пусть весит, может кому пригодится это решение.

Not applicable
Author

ап