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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Tanya от 17 марта 2015, 08:21:54

Название: Работа с неровной неделей
Отправлено: Tanya от 17 марта 2015, 08:21:54
Добрый день!

1. Существует задача, в которой необходимо сравнить продажи в разрезе Неделя-Год, и построить график данных продаж.

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

Подскажите пожалуйста, возможно ли сделать так, чтобы такие недели не разбивались? Или какие настройки использовать для графиков при отображении такой информации? Или необходимо изменить настройки календаря?

2.Также существует следующая проблема в расчете , если мы работаем с неровной неделей:
если в расчет попадает неровная неделя (в неделю попадают два месяца), клик не учитывает дни предыдущего месяца.
Подскажите, как быть в данной ситуации.
Название: Re: Работа с неровной неделей
Отправлено: admin от 18 марта 2015, 07:28:17
Добрый день.
Как формируется Неделя-Год? Можете поподробнее описать, а еще лучше с фрагментом данных.
Название: Re: Работа с неровной неделей
Отправлено: bibis от 18 марта 2015, 09:52:27
Ну я вот разбиваю месяцы на целые недели (т.к. неделя, как и у  вас является главной единицей измерения).
Месяц
=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()
Название: Re: Работа с неровной неделей
Отправлено: Tanya от 18 марта 2015, 02:22:13
Из запроса я достаю неделю следующим образом: 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 Календарь_ТМП;

Название: Re: Работа с неровной неделей
Отправлено: Tanya от 18 марта 2015, 02:24:48
bibis, а вы разбиваете неделю таким образом при загрузке данных?
Название: Re: Работа с неровной неделей
Отправлено: bibis от 18 марта 2015, 02:35:14
Нет.  Просто формирую иерархическую группу :
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')

и её уже использую в диаграммах.
Можно и при загрузке данных, не вижу проблемы в общем-то.