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

Автор Тема: Сумма продаж на дату с начала года (Qlikview, Qlik Sense)  (Прочитано 868 раз)

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Добрый день, коллеги!
Я новичок в освоении qlik, завалился кучей информации и не много "поплыл".
Не могу разобраться, как мне кажется, с элементарным вопросом.
Извиняюсь, если данная тема была на форуме, я не нашел решения.

Как посчитать сумму продаж на определенную дату с начала года?
Насколько я понимаю, нужно использовать функцию InYearToDate.
Кажется, конструкция выглядит так :  sum(if (InYearToDate (OrderDate, BaseDate, 0), TotalSales)), но я не совсем понял что вписать вместо BaseDate... какую дату? нужна ли переменная ?

Заранее спасибо!

Оффлайн Andrey S

  • Новичок
  • *
  • Сообщений: 20
  • Страна: ru
  • Рейтинг: +9/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #1 : Апрель 10, 2017, 12:15:21 pm »
День добрый!

Хорошо бы увидеть модель данных, -  в частности интересует, как устроен календарь.
Полагаю, что в любом случае лучше будет использовать Set Analysis.
Рекомендую почитать статейку о том, как можно  выстраивать и использовать время в модели. Вложил.

Также, подход к решению задачи будет зависеть от того, какой конкретный отчет требуется получить.
На вкладке "Выражения" свойств диаграмы есть опция рассчитывать выражение накопительно. В ряде случаев этого может быть вполне достаточно.

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #2 : Апрель 10, 2017, 12:36:49 pm »
Спасибо за информацию! Ознакомлюсь!

Ниже скрипт календаря :

// Определение дат начала и окончания диапазона
TempMinMaxDates:
LOAD   
       Min(OrderDate) as MinDate,
       Max(OrderDate) as MaxDate
RESIDENT Orders;
 
LET varMinDate = Num(FieldValue('MinDate', 1));
LET varMaxDate = Num(FieldValue('MaxDate', 1));
 
Drop Table TempMinMaxDates;
 
// Формирование последовательности дат в диапазоне
TempCalendar:
LOAD
       date ($(varMinDate) + rowno() - 1)      as TempDate
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;
 
// Формирование календаря с иерархией периодов
Calendar:
LOAD         
       [TempDate] as OrderDate,
       Day([TempDate]) as [День],
       Week([TempDate]) as [Неделя],
       WeekName([TempDate]) as [НеделяГод],
       WeekDay([TempDate]) as [День Недели],
       Month([TempDate]) as [Месяц],
       MonthName([TempDate]) as [МесяцГод],
       Dual('КВ'&Text(Div(Month([TempDate]),4)+1),Div(Month([TempDate]),4)+1)    as [Квартал],
       QuarterName([TempDate]) as [КварталГод],
       Year([TempDate]) as [Год]
       

       

Resident TempCalendar ORDER By TempDate ASC;


DROP Table TempCalendar;

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

Re: Сумма продаж на дату с начала года
« Ответ #2 : Апрель 10, 2017, 12:36:49 pm »

Оффлайн Prive

  • Новичок
  • *
  • Сообщений: 43
  • Страна: ru
  • Рейтинг: +20/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #3 : Апрель 10, 2017, 12:43:36 pm »
В вложении файл qvw, продажи подсчитаны в чарте с начала года, используя функцию InYearToDate  + с помощью Set Analysis. Способ с if-ами не самый удачный. (в плане скорости работы)
Покажите на данном файле , что Вам необходимо получить в итоге.

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #4 : Апрель 10, 2017, 05:08:13 pm »
Спасибо!
Но - если эта дата не "today", а дата из истории - к примеру мне нужно сравнить продажи с начала  года на дату 01.06.2007, для дальнейшего сравнения с другими периодами.

Вроде получилось :
Sum({<Год=, Месяц=, Квартал=, Неделя=, День=, DateNum={">=$(=Num(YearStart(Max(DateNum))))<=$(=Max(DateNum))"}>} Price   )
Поправьте, если что то сделано неверно.





Оффлайн Prive

  • Новичок
  • *
  • Сообщений: 43
  • Страна: ru
  • Рейтинг: +20/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #5 : Апрель 11, 2017, 10:35:55 am »
...
Вроде получилось :
Sum({<Год=, Месяц=, Квартал=, Неделя=, День=, DateNum={">=$(=Num(YearStart(Max(DateNum))))<=$(=Max(DateNum))"}>} Price   )
Поправьте, если что то сделано неверно.

А как пользователь будет выбирать DateNum?  Или есть ещё связанные поля с DateNum? (МесяцГод и т.д.)
Можете также использовать альтернативные состояния для решения данной задачи.
http://help.qlik.com/ru-RU/qlikview/12.1/Subsystems/Client/Content/Alternate%20States.htm
Т.е. Вы создадите аналогичные фильтры по датам, но выберете в настройках иное альтернативное состояние(например, "alt1"). Далее в экспрешене будете его использовать : Sum({alt1}...Price)

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #6 : Апрель 11, 2017, 03:36:00 pm »
Да, при выборе Orderdate все становится печально.
Я пришел к выводу что нужно делать флаги в скрипте загрузки для YTD и LYTD.
Осталось разобраться как верно это сделать :)

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

Re: Сумма продаж на дату с начала года
« Ответ #6 : Апрель 11, 2017, 03:36:00 pm »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #7 : Апрель 11, 2017, 03:48:42 pm »
Привет,
фрагмент в помощь:
if(InYear(date(DateId), '$(vQueryTime)', 0),1,0) as Cal_Full_TY,
if(InYearToDate (date(DateId), '$(vQueryTime)', 0),1,0) as Cal_YTD_TY,
if(InYearToDate (date(DateId), '$(vQueryTime)', -1),1,0) as Cal_YTD_LY,
if(InMonth (date(DateId), '$(vQueryTime)', 0),1,0) as Cal_MTD_TY,
if(InMonth (date(DateId), '$(vQueryTime)', -12),1,0) as Cal_MTD_LY,
if(num(weekday(DateId))=6,1,0) as EOW_Flag,
if(num(weekday(DateId))=0,1,0) as BOW_Flag,
if(num(DateId)=num(floor(monthend(DateId))),1,0) as EOM_Flag,
if(num(DateId)=num(floor(monthstart(DateId))),1,0) as BOM_Flag,
if(num(DateId)=num(floor(QuarterStart(DateId))),1,0) as BOQ_Flag,
if(num(DateId)=num(floor(QuarterEnd(DateId))),1,0) as EOQ_Flag

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #8 : Апрель 11, 2017, 04:16:18 pm »
Коллеги, я использую Qlik sense - примерно неделю, проще застрелиться, чем освоить столько новой информации :)
Добавил в календарь
if(InYear(date(TempDate), '$(vQueryTime)', 0),1,0) as Cal_Full_TY,
if(InYearToDate (date(TempDate), '$(vQueryTime)', 0),1,0) as Cal_YTD_TY,
if(InYearToDate (date(TempDate), '$(vQueryTime)', -1),1,0) as Cal_YTD_LY

Пытаюсь посчитать  Sum( {$<Cal_Full_TY={1}>} Price ) Но безуспешно.
Ушел разбираться как использовать флаги в выражениях...

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #9 : Апрель 12, 2017, 07:04:47 am »
Для начала проверьте наличие флага в календаре и корректность его значений.

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года
« Ответ #10 : Апрель 12, 2017, 08:49:53 pm »
Коллеги,
Флаги вроде на месте. При создании фильтра по ним, выдают 0 или 1, и считают конечную сумму за год (YTD) или предыдущий год (LYTD) полностью, но при выборе любой даты поля OrderDate, выдают либо 0 либо сумму продаж за один день, а по заданию требуется сумма продаж c начала года по выбранную дату, для дальнейшего сравнения периодов и вывода результата в KPI.
Код календаря по флагам, использовал и предложенный Вами выше, результат не корректный...
               inyeartodate(TempDate, $(varMaxDate), 0) * -1 AS CurYTDFlag,
               inyeartodate(TempDate, $(varMaxDate), -1) * -1 AS LastYTDFlag,
Выражение - Sum( {$<CurYTDFlag={1}>} Price)
Я в смятении :(


Оффлайн Prive

  • Новичок
  • *
  • Сообщений: 43
  • Страна: ru
  • Рейтинг: +20/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года (Qlikview, Qlik Sense)
« Ответ #11 : Апрель 17, 2017, 11:48:06 am »
Сможете выложить пример?  Так тяжело разбираться, не видя скрипта, модели данных.

Оффлайн ienjou

  • Новичок
  • *
  • Сообщений: 7
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Re: Сумма продаж на дату с начала года (Qlikview, Qlik Sense)
« Ответ #12 : Апрель 17, 2017, 07:08:06 pm »
Все получилось через использование правильных переменных!
Спасибо!