Остаток на каждый день

Автор Multicvet, 15 марта 2016, 11:52:46

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

Multicvet

Здравствуйте!

Столкнулся с задачей, которую никак не могу решить.

Есть таблица с остатками на определенный день:
01.12.2015 - 100р.
02.12.2015 - 200р.
03.12.2015 - 500р.
04.12.2015 - 200р.
07.12.2015 - 300р.
08.12.2015 - 600р.
09.12.2015 - 500р.

В таблице нет 05.12.2015 и 06.12.2015. Я же хочу, что бы если в дате нулевой остаток, то в эту дату проставлялся бы остаток из предыдущей даты. Т.е.:
01.12.2015 - 100р.
02.12.2015 - 200р.
03.12.2015 - 500р.
04.12.2015 - 200р.
05.12.2015 - 200р.
06.12.2015 - 200р.

07.12.2015 - 300р.
08.12.2015 - 600р.
09.12.2015 - 500р.

Подкиньте, пожалуйста, идею, как такое реализовать?

Спасибо!

kvv


piton

Создать календарь. Прицепить к нему остатки. Отсортировать по полю дата. И ещё раз пройтись по таблице и где значение NULL заменить предыдущей записью.

LoryMax

#3
Я вот хочу создать матрицу на основе календаря, точек продаж и номенклатуры продажи. джойню через декартово произведение. в итоге когда дохожу до номенклатуры - то происходит оверлоад памяти. уже номерую номенклатуру, чтобы прогнать все по циклу частями. Не понимаю как промежуточные данные сохранять, чтобы в следующий раз не было декартово произведения на те промежуточные результаты.


                  T6:
                  load DateCalendar
                  resident T2;
                 
                  outer join (T6)
                  load OBJECT
                  Resident T4;
                 
                  //далее идет оверлоад памяти.
                  outer join (T6)
                  load ITEM
                  Resident T3;
                             

admin

Привет.
Почитайте тему по расчету остатков без декартова умножения, с использованием функции iterno().
Этот способ намного лучше, и работает быстро и память не грузит.

kvv

#5
Добрый день.
Попробуй вот так:
[quote][quote]Data:
LOAD * Inline [
DATE, QUANTITY
01.12.2015, 100
02.12.2015, 200
03.12.2015, 500
04.12.2015, 200
07.12.2015, 300
08.12.2015, 600
09.12.2015, 500
];

STORE * from Data into Data.qvd (qvd);
DROP Table Data;

Date:
LOAD Min(DATE) as MIN_DATE_N,
Max(DATE) as MAX_DATE_N
FROM Data.qvd (qvd);

LET v_MinDate = FieldValue ('MIN_DATE_N', 1);
LET v_MaxDate = FieldValue ('MAX_DATE_N', 1);

FOR d = $(v_MinDate) to $(v_MaxDate)
Calendar:
load date($(d), 'DD.MM.YYYY') as DATE
AutoGenerate(1);
next d

Left Join (Calendar)
LOAD DATE,
     QUANTITY
FROM Data.qvd (qvd);

STORE * from Calendar into Data.qvd (qvd);
DROP Table Calendar;

Data:
LOAD DATE,
     If (IsNull(QUANTITY), 0, QUANTITY) as QUANTITY
FROM Data.qvd (qvd);

STORE * from Data into Data.qvd (qvd);
//DROP Table Data;

NoConcatenate
Data_01:
LOAD DATE,
If(QUANTITY = 0, Alt(Peek('QUANTITY'), QUANTITY), QUANTITY) as QUANTITY
Resident Data
Order By DATE;

DROP Table Data;[/quote][/quote]


Больше информации по данному вопросу можно посмотреть по ссылке - https://community.qlik.com/message/1025148#1025148

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