Помогите с созданием оборотки с КВ (Qlikview Qlik Sense)

Автор Азат, марта 06, 2018, 04:05:36 pm

« предыдущая - следующая »

Азат

марта 06, 2018, 04:05:36 pm Последнее редактирование: марта 06, 2018, 07:59:42 pm от admin
Есть задача:
нужно создать таблицу оборотки:

НачальныйОстаток/ Приход/ Расход/ КонечныйОстаток

на основании регистра накопления "ТоварыНаСкладах".
Данные вытащил из Сервера., по виду движения определил начальный остаток, приход, расход, конечный остаток

Нужно складывать QVD помесячно. первый мес. нормально вытащил, а вот со вторым идет разрыв, т.е. начальный остаток нулевой. Кто как обходил. или подскажите решение.

admin

марта 06, 2018, 07:54:46 pm #1 Последнее редактирование: марта 06, 2018, 07:59:20 pm от admin
Привет.
Вопрос затронули серьезный, но решаемый (как минимум двумя способами).
Регистр 1с "Товары на складах" имеет еще одну "таблицу-спутник" *.Итоги
В которой по периодам сложены агрегированные итоги. Это так, к сведению.
Но коли уж делать в Qlik, то придется изучить все что обсуждалось по расчету остатков.
Поиск тут
Поиск там

О каких объемах данных идет речь? Сколько номенклатур, складов, записей в месяц?

Азат

Скажу так, данные из регистра с января, за 3 месяца пермножил на даты календаря 365 дней, это грубо 60 с хвостиком. миллионов строк из календаря используется (ДАТА) из регистра (НОМЕНКЛАТУРА, СКЛАД, СЕРИЯ) т.е. 3 измерения. примерно 5 миллионов строк в месяц.

millik

Недавно опять возвращался по работе к расчету остатков. На сей раз выдумал ещё один способ расчета остатков.

Вообще я сейчас использую 2 рабочих варианта:
1) Грузим всю таблицу движений. К таблице движений делаем таблицу с датами так называемую "AsOfDate" в которой каждая следующая дата связанна со всеми предыдущими. По итогу в самом приложении можно тупо использовать выражение Sum(КолДвиж*ТипДвиж).
Плюсы:
-простой скрипт;
-небольшая таблица в данных;
-быстро работает для простых вычислений (Приход, Расход) .
Минусы:
-Из-за расчетов "на лету", долго думает в больших выражениях с агрегациями, например, оборачиваемость.

2) Грузим таблицу движений и таблицу итогов. К ним предрасчитываем свою таблицу итогов, удаляет стандартную.
Плюсы:
-возможность задавать периодичность итогов от требований;
-возможность сохранить данные в qvd,чтобы использовать в других приложениях;
-простые расчеты в приложении почти в любых выражениях.
Минусы:
-Сложный скрипт;
-долгий расчет;
-большая выходная таблица (увеличивает вес приложения).

По 2 способу, чтобы понятнее было: Остатки на каждый день с 01.01.2017 по ~150 складам с ~4000 партиями = 250 млн строк или файл qvd в 1,7 Гб. Расчет занял порядка 15 часов на сервере (8*2,5Ггц, 100Гб)
Если уверены, что данный да прошлый период не меняются, то можно делать перерасчет, допустим, только текущего месяца.



admin

Привет.
Все верно - расчеты на лету только для малого количества данных.
Предварительные расчеты для больших массивов.

Азат

(3) Спасибо большое за подсказку, делал по 2 варианту, с промежуточными остатками.

Пересчитал за весь период, сохраняю в QVD помесячно. но перезаписываю каждый день за последние 3 месяца, так как далее там запрет стоит, так что в принципе данные не меняются.

Грубо пошагово, если кому интересно:

1) Создаю календарь.
2) Загружаю остатки за предыдущий месяц. см ниже. (8 пункт)
3) на 2 приложении (в 1 приложении записываю регистры как есть в QVD) Загружаю QVD регистра "Товары на складах".
4) отбираю календарь за текущий месяц.
5) перемножаю полученную таблицу регистров на даты календаря (просто Join). на каждый товар создаются строки на каждый день месяца.
6)По виду движения регистра выявляю 2 колонки, приход или расход
              Sum(If(ВидДвижения = 0, ВНаличии, 0)) as Приход,
              Sum(If(ВидДвижения = 1, ВНаличии, 0)) as Расход,
7)расчитываю начальный остаток и конечный остаток, на основе прихода и расхода (конечно надо отсортировать по дате.) кусок кода
if(Previous(Склад) = Склад and Previous(Номенклатура) = Номенклатура and Previous(Серия) = Серия, Peek(КонечныйОстаток), 0) as НачальныйОстаток,

RangeSum(if(Previous(Склад) = Склад and Previous(Номенклатура) = Номенклатура and Previous(Серия) = Серия, Peek(КонечныйОстаток),0), Приход,-Расход,0) as КонечныйОстаток

8) создаю QVD по товарам где сумму всех остатков не равно 0 за последний день месяца.

Азат


admin

Цитата: Азат от марта 12, 2018, 03:35:57 pm
8 пункт что то в смайлик превратился

Автопреобразование сочетания "8  )", к содержимому сообщения отношения не имеет . 8)

Рейтинг@Mail.ru Яндекс.Метрика