Подсчет остатков в Qlikview и Qlik Sense

Автор tommix, 16 марта 2015, 04:34:33

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

tommix



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

admin

Добрый день.

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

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

tommix

Чувствую что в выражении для подсчета количества месяцев должно использоваться rangecount(), но пока как не знаю. 

tommix

Пока в голову пришел такой вариант, но как его осуществить?

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

А если скриптом привести к такому виду:
[smg id=79]
И никаких сложностей с выражением.

tommix

А выложи скрипт посмотреть, пожалуйста.

admin

 :) ОК, как напишу - обязательно выложу.
Это модель.

tommix

#7
Вопрос возник с подсчетом

tommix

И еще не до конца понимаю, как через скрипт можно вывести подсчет, что бы он показывал конкретное число на сколько хватит остатков.

admin

Под рукой нет инструмента  :(
На картинке флаговое поле f5, если есть прогнозный остаток то 1, если прогнозный остаток на конец месяца меньше 0, то процент остатка на прогноз продаж.
В объектах визуализации можно просто вывести sum(f5)
В скрипте можно сделать немало, peek() & previous() помогут  при расчете остатка по периодам прогноза.

tommix

#10
Понятно, в скрипте посчитать можно через флаговое поле.

admin

#11
Вот примерчик:

//Источники
ПрогнозПродаж:
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

Здорово!  :) Блин все так просто. Спасибо.
Но возникло несколько вопросов:
1) А если у нас несколько остатков. Допустим 201501 и 201505, то тогда тот остаток который 201505, он его просто не считает. А как учесть что бы то же считал?

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

admin

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

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

tommix

Понятно, а если реализовывать, через выражение. Не подскажите куда двигаться?

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