3 Replies Latest reply: Mar 21, 2017 3:07 AM by Aleksandr Melnikov RSS

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

    Владислав Коробов

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

      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 дня нет

        • Re: обсуждение дней года
          Eugeny Ilyin

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

            Привет.

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

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

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

            • Re: обсуждение дней года
              Aleksandr Melnikov

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

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

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

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

               

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

               

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