(https://leto25d.storage.yandex.net/rdisk/77e6582204be2f07911d1729b4316807f8a006543911899dc182eefe802b9ff7/inf/KvrrXHwHkMbw7MAhpMJST0yxI_BczMRepr_Nr-Dr_5vKtL4RycaXwv6Vs4XoLFN1QUWRw5funXEEVYjyQktIaQ==?uid=0&filename=Screenshot_1.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&tknv=v2&rtoken=7149a2ec49fb063621af20442bc85647&force_default=no)
Нужно подсчитать через сколько месяцев закончатся складские остатки (Табличка: Прогноз запасов). Подскажите в какую сторону копать?
Добрый день.
Сорри, за нерасторопность.
Тема, затронутая Вами - широка и интересна. :)
Во-первых необходимо определиться с моделью данных и таблицами.
Прогноз продаж должен выглядеть примерно так:
Поля: Продукт, Период, Количество
В таком же ключе и остатки, кстати какие именно? На начало или конец периода? Полагаю, что начальные.
Самый простой и понятный способ решения - в скрипте.
Потребуется сформировать колонку с предполагаемым остатком. Сделать несложно, по аналогии с заполнением курсами валют выходных и праздничных дней.
Для расчета количества месяцев - будем использовать выражения.
Пример постараюсь сделать в ближайшее время.
Чувствую что в выражении для подсчета количества месяцев должно использоваться rangecount(), но пока как не знаю.
Пока в голову пришел такой вариант, но как его осуществить?
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
Количество операций вычисления + С, в итоге получим количество месяцев.
А если скриптом привести к такому виду:
[smg id=79]
И никаких сложностей с выражением.
А выложи скрипт посмотреть, пожалуйста.
:) ОК, как напишу - обязательно выложу.
Это модель.
Вопрос возник с подсчетом
И еще не до конца понимаю, как через скрипт можно вывести подсчет, что бы он показывал конкретное число на сколько хватит остатков.
Под рукой нет инструмента :(
На картинке флаговое поле f5, если есть прогнозный остаток то 1, если прогнозный остаток на конец месяца меньше 0, то процент остатка на прогноз продаж.
В объектах визуализации можно просто вывести sum(f5)
В скрипте можно сделать немало, peek() & previous() помогут при расчете остатка по периодам прогноза.
Понятно, в скрипте посчитать можно через флаговое поле.
Вот примерчик:
//Источники
ПрогнозПродаж:
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;
Здорово! :) Блин все так просто. Спасибо.
Но возникло несколько вопросов:
1) А если у нас несколько остатков. Допустим 201501 и 201505, то тогда тот остаток который 201505, он его просто не считает. А как учесть что бы то же считал?
2) А как посчитать на каждую дату остаток, что бы можно было посмотреть сколько остатков останется на каждый день?
Что значит несколько остатков?
Мы делаем прогноз, следовательно следует опираться на какой-то рубеж до которого прогноз уже не прогноз, а факт, и после которого факт перестает быть фактом и становится прогнозом.
Принимаем какой-нибудь период за этот рубеж и формируем таблицу текущих остатков на эту дату.
Следовательно прогнозы до этой даты уже не прогнозы, если нам не требуется анализировать совпадение прогнозов, но и в этом случае прогноз становится уже прогнозом прошлого периода.
Расчет остатков по датам, как и по периодам, с той лишь разницей, что нам потребуется растянуть остатки на каждую календарную дату, даже если не было фактов движения.
То есть надо брать календарь, и на каждую дату считать остатки.
Понятно, а если реализовывать, через выражение. Не подскажите куда двигаться?
Документация и эксперименты :)
Возьмем помощь зала (http://community.qlik.com/message/734423#734423) ;)
Спасибо, пошел ставить эксперименты.
Посмотрите эту тему, по составлению выражения. (http://qlikview-forum.ru/qvf/index.php/topic,491.0.html)
Евгений, еще не подскажите как
if(peek(Товар)<>Товар, [ОстатокФакт]-[Прогноз продаж], // если новая группа записей по товару
peek([Остаток31])-[Прогноз продаж]) as [Остаток31], // считаем прогноз остатка по прогнозу продаж
if(if(peek(Товар)<>Товар,[ОстатокФакт]-[Прогноз продаж],peek([Остаток31])-[Прогноз продаж])>=0,1,
if(peek([Остаток31])>0,peek([Остаток31])/[Прогноз продаж],0) ) as ФлагОстатка
Вывести в цикле? Как я понимаю, из-за peek он и не выводиться.
Поподробнее, в каком цикле?
Что бы рассчитать прогноз остатка в каждом месяце, как я понимаю нужно использовать цикл (For...Next).
Что бы получилось следующее:
(https://leto13f.storage.yandex.net/rdisk/ec9ce369f5b8a353cf839055dc6bdb81fc5e8a2cea0f378b831789da06d2abba/inf/YoLzeBwAElG5L5SPAmexZh9N5pYDumMT31q820JB2Vn6gq536aWRK4CDLN9iOApaRz5ZeHo7MzmDa79QVMoT8A==?uid=0&filename=Screenshot_1.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&tknv=v2&rtoken=120fc57984f441dbe06f00024d216c25&force_default=no)
Т.е. исходные данные прогнозные полностью?
Остатки будущего периода тоже прогнозируем?
Цикл не нужен, просто добавьте периоды с прогнозными остатками в таблицу "текущие остатки" и посмотрите как сработает скрипт. И станет понятно, что надо будет поправить.
Т.е. исходные данные прогнозные полностью? - Да.
Остатки будущего периода тоже прогнозируем? - Да.
Самостоятельно не получилось сделать периоды с прогнозными остатками в таблицу "текущие остатки" и посмотрите как сработает скрипт, не подскажите как?