Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Коллеги. сегодня столкнулся с такой штукой:
2016 год был высокосным и соответственно длинна года на 1 день больше.
и теперь есть строить таблицу вида:
ДеньГода | Дата |
---|---|
59 | 28.02.2016 |
60 | 29.02.2016 |
61 | 01.03.2016 |
за 2016 год все хорошо.
но вот такая же за 2017:
ДеньГода | Дата |
---|---|
59 | 28.02.2017 |
61 | 01.03.2017 |
60 день в 2017 году пропущен....
ДеньГода считается просто DayNumberOfYear(ДокументДата)
и соответсвенно когда строишь график сравнения, то 60 день падает на 100%
может кто сталкивался с этим? можно что то придумать?
Причем если грузить данные только за 2017, все равно 60 дня нет
Привет.
Действительно, функция странноватая
Если принимать во внимание что она возвращает результат на DayNumberOfYear('31.02.2017'), то не стоит ее использовать.
Я формирую порядковые дни производственного календаря в скрипте при формировании календаря, думаю, что это самый надежный вариант.
...
left join (Calendar) load DateId, if(month(DateId)=month(peek(DateId)) , peek(РабочийДень)+1,0+Cal_WorkDay_RU) as РабочийДень resident Calendar where Cal_WorkDay_RU=1;
left join (Calendar) load DateId, if(year(DateId)=year(peek(DateId)) , peek(РабочийДеньГода)+1,0+Cal_WorkDay_RU) as РабочийДеньГода resident Calendar where Cal_WorkDay_RU=1;
В Вашем случае в календаре можно просто добавить поле
...
date(DateId)-YearStart(date(DateId))+1 as ДеньГода
Или использовать вариант с переменной:
set vDNOY=date($1)-YearStart(date($1))+1;
и в выражении
=$(vDNOY('01.03.2017'))
Привет.
Раньше тоже сталкивался с данным вопросом.
Но если разобраться, то все нормально. 29 февраля (60-ий день) не с чем сравнивать, так как в прошлом году не было такого дня.
Нужно решить с каким другим днем нужно сравнивать 29 февраля. Может быть с 28 февраля, или может быть с 1 марта, или может быть вообще не нужно сравнивать.
В описании к функции четко написано:
Синтаксис: DayNumberOfYear(timestamp[,start_month])
Return data type: целое число
В этой функции год всегда включает 366 дней.
Если вам нужна своя нумерация дней, то как подсказали выше, лучше рассчитывать новое измерение в скрипте.