Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Декабрь 18, 2017, 07:44:10 pm

Автор Тема: Остаток на каждый день  (Прочитано 1430 раз)

Оффлайн Multicvet

  • Новичок
  • *
  • Сообщений: 27
  • Рейтинг: +2/-0
    • Просмотр профиля
    • Автоматизация в бизнесе и в жизни
Остаток на каждый день
« : Март 15, 2016, 11:52:46 am »
Здравствуйте!

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

Есть таблица с остатками на определенный день:
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

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Остаток на каждый день
« Ответ #1 : Март 15, 2016, 12:18:22 pm »
Добрый день.
Можно посмотреть вот здесь - http://qlikview-forum.ru/qvf/index.php/topic,963.0.html.

Оффлайн piton

  • Новичок
  • *
  • Сообщений: 22
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Остаток на каждый день
« Ответ #2 : Март 22, 2016, 09:52:03 am »
Создать календарь. Прицепить к нему остатки. Отсортировать по полю дата. И ещё раз пройтись по таблице и где значение NULL заменить предыдущей записью.

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

Re: Остаток на каждый день
« Ответ #2 : Март 22, 2016, 09:52:03 am »

Оффлайн LoryMax

  • Наставник
  • **
  • Сообщений: 66
  • Страна: ru
  • Рейтинг: +9/-0
    • Просмотр профиля
Re: Остаток на каждый день
« Ответ #3 : Апрель 26, 2016, 02:31:14 pm »
Я вот хочу создать матрицу на основе календаря, точек продаж и номенклатуры продажи. джойню через декартово произведение. в итоге когда дохожу до номенклатуры - то происходит оверлоад памяти. уже номерую номенклатуру, чтобы прогнать все по циклу частями. Не понимаю как промежуточные данные сохранять, чтобы в следующий раз не было декартово произведения на те промежуточные результаты.

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

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Остаток на каждый день
« Ответ #4 : Апрель 26, 2016, 06:17:55 pm »
Привет.
Почитайте тему по расчету остатков без декартова умножения, с использованием функции iterno().
Этот способ намного лучше, и работает быстро и память не грузит.

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Остаток на каждый день
« Ответ #5 : Апрель 27, 2016, 11:26:00 am »
Добрый день.
Попробуй вот так:
[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