Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

обсуждение дней года

Коллеги. сегодня столкнулся с такой штукой:

2016 год был высокосным и соответственно длинна года на 1 день больше.

и теперь есть строить таблицу вида:

ДеньГодаДата
5928.02.2016
6029.02.2016
6101.03.2016

за 2016 год все хорошо.

но вот такая же за 2017:

ДеньГодаДата
5928.02.2017
6101.03.2017

60 день в 2017 году пропущен....

ДеньГода считается просто DayNumberOfYear(ДокументДата)

и соответсвенно когда строишь график сравнения, то 60 день падает на 100%

может кто сталкивался с этим? можно что то придумать?

Причем если грузить данные только за 2017, все равно 60 дня нет

3 Replies
Eugeny_Ilyin
Creator II
Creator II

Привет.
Действительно, функция странноватая
Если принимать во внимание что она возвращает результат на 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'))

Not applicable
Author

Привет.

Раньше тоже сталкивался с данным вопросом.

Но если разобраться, то все нормально. 29 февраля (60-ий день) не с чем сравнивать, так как в прошлом году не было такого дня.

Нужно решить с каким другим днем нужно сравнивать 29 февраля. Может быть с 28 февраля, или может быть с 1 марта, или может быть вообще не нужно сравнивать.

millik89
Contributor II
Contributor II

В описании к функции четко написано:

https://help.qlik.com/ru-RU/sense/3.2/Subsystems/Hub/Content/Scripting/DateAndTimeFunctions/daynumbe...

Синтаксис: DayNumberOfYear(timestamp[,start_month])

Return data type: целое число

В этой функции год всегда включает 366 дней.

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