Здравствуйте!
Столкнулся с задачей, которую никак не могу решить.
Есть таблица с остатками на определенный день:
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р.
Подкиньте, пожалуйста, идею, как такое реализовать?
Спасибо!
Добрый день.
Можно посмотреть вот здесь - http://qlikview-forum.ru/qvf/index.php/topic,963.0.html. (http://qlikview-forum.ru/qvf/index.php/topic,963.0.html.)
Создать календарь. Прицепить к нему остатки. Отсортировать по полю дата. И ещё раз пройтись по таблице и где значение NULL заменить предыдущей записью.
Я вот хочу создать матрицу на основе календаря, точек продаж и номенклатуры продажи. джойню через декартово произведение. в итоге когда дохожу до номенклатуры - то происходит оверлоад памяти. уже номерую номенклатуру, чтобы прогнать все по циклу частями. Не понимаю как промежуточные данные сохранять, чтобы в следующий раз не было декартово произведения на те промежуточные результаты.
T6:
load DateCalendar
resident T2;
outer join (T6)
load OBJECT
Resident T4;
//далее идет оверлоад памяти.
outer join (T6)
load ITEM
Resident T3;
Привет.
Почитайте тему по расчету остатков без декартова умножения (http://qlikview-forum.ru/qvf/index.php/topic,820.msg1877.html#msg1877), с использованием функции iterno().
Этот способ намного лучше, и работает быстро и память не грузит.
Добрый день.
Попробуй вот так:
[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