Работа с неровной неделей

Автор Tanya, 17 марта 2015, 08:21:54

« назад - далее »

Tanya

Добрый день!

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

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

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

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

admin

Добрый день.
Как формируется Неделя-Год? Можете поподробнее описать, а еще лучше с фрагментом данных.

bibis

Ну я вот разбиваю месяцы на целые недели (т.к. неделя, как и у  вас является главной единицей измерения).
Месяц
=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()

Tanya

Из запроса я достаю неделю следующим образом: 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

bibis, а вы разбиваете неделю таким образом при загрузке данных?

bibis

Нет.  Просто формирую иерархическую группу :
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')

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

Яндекс.Метрика