Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 21, 2017, 03:53:25 am

Автор Тема: Работа с неровной неделей  (Прочитано 1475 раз)

Оффлайн Tanya

  • Новичок
  • *
  • Сообщений: 3
  • Рейтинг: +0/-0
    • Просмотр профиля
Работа с неровной неделей
« : Март 17, 2015, 08:21:54 pm »
Добрый день!
 
1. Существует задача, в которой необходимо сравнить продажи в разрезе Неделя-Год, и построить график данных продаж.

Т.к. неделя может относиться к разным годам и месяцам ( например 1-ая неделя 2015 года включает в себя даты декабря 2014 года), столкнулись с такой проблемой, что при выводе графика и сортировке периода по возрастанию эти недели разбиваются (что логично). При этом получаются "провалы" на графике.

Подскажите пожалуйста, возможно ли сделать так, чтобы такие недели не разбивались? Или какие настройки использовать для графиков при отображении такой информации? Или необходимо изменить настройки календаря?
 
2.Также существует следующая проблема в расчете , если мы работаем с неровной неделей:
если в расчет попадает неровная неделя (в неделю попадают два месяца), клик не учитывает дни предыдущего месяца.
Подскажите, как быть в данной ситуации.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Работа с неровной неделей
« Ответ #1 : Март 18, 2015, 07:28:17 am »
Добрый день.
Как формируется Неделя-Год? Можете поподробнее описать, а еще лучше с фрагментом данных.

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Работа с неровной неделей
« Ответ #2 : Март 18, 2015, 09:52:27 am »
Ну я вот разбиваю месяцы на целые недели (т.к. неделя, как и у  вас является главной единицей измерения).
Месяц
=if(WeekDay( MonthStart(Floor(NACH_VREM)))>3,
               Month(WeekStart(floor(NACH_VREM))),
               Month(AddMonths(WeekStart((floor(NACH_VREM))),-1))
               )

Где NACH_VREM - ваша дата (у меня формат timestamp, если просто date- можно убрать floor() ).

Таким образом  в месяце получается всегда 28 или 35 дней, и недели всегда входят в него целиком. Неделя разбитая по 2м месяцам принимается относящейся к тому месяцу, куда входит четверг.

Для Года аналогично работает просто функция
week()

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Работа с неровной неделей
« Ответ #2 : Март 18, 2015, 09:52:27 am »

Оффлайн Tanya

  • Новичок
  • *
  • Сообщений: 3
  • Рейтинг: +0/-0
    • Просмотр профиля
Re: Работа с неровной неделей
« Ответ #3 : Март 18, 2015, 02:22:13 pm »
Из запроса я достаю неделю следующим образом: to_char(inv.dt_inv,'iw') as НеделяЗатем создаю календарь, с которым запрос связан по полю ДАТА,
 
 
minDate=num('01.01.2013');
maxDate=num(today(1));

Календарь_ТМП:
load
date($(minDate)+Rowno()-1) as Дата_ТМП
AutoGenerate $(maxDate)-$(minDate)+1;

Календарь:
load
Дата_ТМП as ДАТА,
Дата_ТМП as ДАТА1,
year(Дата_ТМП) as Год,
Day(Дата_ТМП) as День,
Week(Дата_ТМП) as Неделя,
Month(Дата_ТМП) as Месяц,
WeekDay(Дата_ТМП)as День_недели,
dual(month(Дата_ТМП) & '-' & year(Дата_ТМП),
year(Дата_ТМП) & num(month(Дата_ТМП), '00')) as MonthYear,
'Q' & ceil(month(Дата_ТМП)/3) as Квартал,
Date(monthstart(Дата_ТМП), 'MMM-YYYY') AS [Месяц-Год],
Week(Дата_ТМП)& '-' &Day(Дата_ТМП)& '-' &Month(Дата_ТМП)& '-' &year(Дата_ТМП) as [Неделя-День-Месяц-Год],
Week(Дата_ТМП)& '-' &Date(Дата_ТМП,'MM')& '-' &year(Дата_ТМП) as [Неделя-Месяц-Год],
Week(Дата_ТМП)& '-' &year(Дата_ТМП) as [Неделя-Год],
dual('Q' & ceil(month(Дата_ТМП)/3) & '-' & year(Дата_ТМП),
year(Дата_ТМП) & ceil(month(Дата_ТМП)/3)) as QtrYear
Resident Календарь_ТМП
Order by Дата_ТМП asc;

drop Table Календарь_ТМП;

Оффлайн Tanya

  • Новичок
  • *
  • Сообщений: 3
  • Рейтинг: +0/-0
    • Просмотр профиля
Re: Работа с неровной неделей
« Ответ #4 : Март 18, 2015, 02:24:48 pm »
bibis, а вы разбиваете неделю таким образом при загрузке данных?

Оффлайн bibis

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +31/-0
    • Просмотр профиля
Re: Работа с неровной неделей
« Ответ #5 : Март 18, 2015, 02:35:14 pm »
Нет.  Просто формирую иерархическую группу :
if(WeekDay( MonthStart(Floor(NACH_VREM)))>3,

Month(floor(NACH_VREM)),Month(AddMonths(floor(NACH_VREM),-1))
)

week(NACH_VREM)
date(floor(NACH_VREM), 'DD/MM')
и её уже использую в диаграммах.
Можно и при загрузке данных, не вижу проблемы в общем-то.