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

Автор Тема: Подсчет остатков в Qlikview и Qlik Sense  (Прочитано 5814 раз)

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Подсчет остатков в Qlikview и Qlik Sense
« : Март 16, 2015, 04:34:33 pm »


Нужно подсчитать через сколько месяцев закончатся складские остатки (Табличка: Прогноз запасов). Подскажите  в какую сторону копать?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #1 : Март 17, 2015, 08:45:51 am »
Добрый день.

Сорри, за нерасторопность.
Тема, затронутая Вами - широка и интересна. :)
Во-первых необходимо определиться с моделью данных и таблицами.
Прогноз продаж должен выглядеть примерно так:
Поля: Продукт, Период, Количество

В таком же ключе и остатки, кстати какие именно? На начало или конец периода? Полагаю, что начальные.
Самый простой и понятный способ решения - в скрипте.
Потребуется сформировать колонку с предполагаемым остатком. Сделать несложно, по аналогии с заполнением курсами валют выходных и праздничных дней.
Для расчета количества месяцев - будем использовать выражения.
Пример постараюсь сделать в ближайшее время.

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #2 : Март 17, 2015, 02:30:34 pm »
Чувствую что в выражении для подсчета количества месяцев должно использоваться rangecount(), но пока как не знаю. 

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

Re: Подсчет остатков
« Ответ #2 : Март 17, 2015, 02:30:34 pm »

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #3 : Март 17, 2015, 03:36:21 pm »
Пока в голову пришел такой вариант, но как его осуществить?

A - Остатки
B - Прогноз продаж

Если А>B, то
Если А1>B1, то A-B=A2
Если А2>B2, то A2-B2=A3
...
Если Аn>Bn, то An-Bn=An

Потом через rangecount подсчитать количество операций вычитания и разобраться с хвостиком.

Если  0>А/B<1, то An/B=C

Количество операций вычисления + С, в итоге получим количество месяцев. 

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #4 : Март 17, 2015, 03:55:21 pm »
А если скриптом привести к такому виду:
(Извините, но вы не имеете доступа к галерее)
И никаких сложностей с выражением.

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #5 : Март 17, 2015, 04:10:20 pm »
А выложи скрипт посмотреть, пожалуйста.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #6 : Март 17, 2015, 05:05:17 pm »
 :) ОК, как напишу - обязательно выложу.
Это модель.

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

Re: Подсчет остатков
« Ответ #6 : Март 17, 2015, 05:05:17 pm »

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #7 : Март 17, 2015, 05:17:02 pm »
Вопрос возник с подсчетом

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #8 : Март 17, 2015, 05:49:11 pm »
И еще не до конца понимаю, как через скрипт можно вывести подсчет, что бы он показывал конкретное число на сколько хватит остатков.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #9 : Март 17, 2015, 06:54:25 pm »
Под рукой нет инструмента  :(
На картинке флаговое поле f5, если есть прогнозный остаток то 1, если прогнозный остаток на конец месяца меньше 0, то процент остатка на прогноз продаж.
В объектах визуализации можно просто вывести sum(f5)
В скрипте можно сделать немало, peek() & previous() помогут  при расчете остатка по периодам прогноза.

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #10 : Март 18, 2015, 09:10:24 am »
Понятно, в скрипте посчитать можно через флаговое поле.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #11 : Март 18, 2015, 10:53:50 am »
Вот примерчик:
//Источники
ПрогнозПродаж:
LOAD * INLINE [
    Товар, Период, Прогноз продаж
    Продукт 1, 201501, 10
    Продукт 1, 201502, 20
    Продукт 1, 201503, 0
    Продукт 1, 201504, 0
    Продукт 1, 201505, 5
    Продукт 1, 201506, 0
    Продукт 1, 201507, 10
    Продукт 2, 201501, 5
    Продукт 2, 201502, 7
    Продукт 2, 201503, 0
    Продукт 2, 201504, 10
    Продукт 2, 201505, 15
    Продукт 2, 201506, 2
    Продукт 2, 201507, 0
    Продукт 2, 201508, 4
];
ТекущийОстаток:
join LOAD * INLINE [
    Товар, Период, ОстатокФакт
    Продукт 1, 201501, 37
    Продукт 2, 201501, 37
];
//Избавляемся от NULL для расчетов
ПрогнозПродаж0:
NoConcatenate
LOAD Товар, Период, [Прогноз продаж],
if(len(ОстатокФакт)=0,0,ОстатокФакт) as ОстатокФакт
resident ПрогнозПродаж;
DROP Table ПрогнозПродаж;


Прогноз:
NoConcatenate
LOAD *,

if(peek(Товар)<>Товар, [ОстатокФакт]-[Прогноз продаж], // если новая группа записей по товару
peek([Остаток31])-[Прогноз продаж]) as [Остаток31], // считаем прогноз остатка по прогнозу продаж
if(if(peek(Товар)<>Товар,[ОстатокФакт]-[Прогноз продаж],peek([Остаток31])-[Прогноз продаж])>=0,1,
if(peek([Остаток31])>0,peek([Остаток31])/[Прогноз продаж],0) ) as ФлагОстатка
Resident ПрогнозПродаж0
Order by Товар, Период;

DROP Table ПрогнозПродаж0;

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #12 : Март 18, 2015, 11:55:21 am »
Здорово!  :) Блин все так просто. Спасибо.
Но возникло несколько вопросов:
1) А если у нас несколько остатков. Допустим 201501 и 201505, то тогда тот остаток который 201505, он его просто не считает. А как учесть что бы то же считал?

2) А как посчитать на каждую дату остаток, что бы можно было посмотреть сколько остатков останется на каждый день?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1215
  • Страна: ru
  • Рейтинг: +129/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #13 : Март 18, 2015, 12:19:17 pm »
Что значит несколько остатков?
Мы делаем прогноз, следовательно следует опираться на какой-то рубеж до которого прогноз уже не прогноз, а факт, и после которого факт перестает быть фактом и становится прогнозом.
Принимаем какой-нибудь период за этот рубеж и формируем таблицу текущих остатков на эту дату.
Следовательно прогнозы до этой даты уже не прогнозы, если нам не требуется анализировать совпадение прогнозов, но и в этом случае прогноз становится уже прогнозом прошлого периода.

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

Оффлайн tommix

  • Гуру
  • ***
  • Сообщений: 127
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Подсчет остатков
« Ответ #14 : Март 18, 2015, 01:10:36 pm »
Понятно, а если реализовывать, через выражение. Не подскажите куда двигаться?

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

Re: Подсчет остатков
« Ответ #14 : Март 18, 2015, 01:10:36 pm »