Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Июль 16, 2018, 11:26:55 am

Автор Тема: Помогите с созданием оборотки с КВ (Qlikview Qlik Sense)  (Прочитано 507 раз)

Оффлайн Азат

  • Новичок
  • *
  • Сообщений: 6
  • Страна: kz
  • Рейтинг: +1/-0
    • Просмотр профиля
Есть задача:
нужно создать таблицу оборотки:

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

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

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

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1149
  • Страна: ru
  • Рейтинг: +125/-0
    • Просмотр профиля
Re: Помогите с созданием оборотки с КВ
« Ответ #1 : Март 06, 2018, 07:54:46 pm »
Привет.
Вопрос затронули серьезный, но решаемый (как минимум двумя способами).
Регистр 1с "Товары на складах" имеет еще одну "таблицу-спутник" *.Итоги
В которой по периодам сложены агрегированные итоги. Это так, к сведению.
Но коли уж делать в Qlik, то придется изучить все что обсуждалось по расчету остатков.
Поиск тут
Поиск там

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

Оффлайн Азат

  • Новичок
  • *
  • Сообщений: 6
  • Страна: kz
  • Рейтинг: +1/-0
    • Просмотр профиля
Скажу так, данные из регистра с января, за 3 месяца пермножил на даты календаря 365 дней, это грубо 60 с хвостиком. миллионов строк из календаря используется (ДАТА) из регистра (НОМЕНКЛАТУРА, СКЛАД, СЕРИЯ) т.е. 3 измерения. примерно 5 миллионов строк в месяц.

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


Оффлайн millik

  • Наставник
  • **
  • Сообщений: 78
  • Страна: by
  • Рейтинг: +33/-0
    • Просмотр профиля
Недавно опять возвращался по работе к расчету остатков. На сей раз выдумал ещё один способ расчета остатков.

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

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

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



Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1149
  • Страна: ru
  • Рейтинг: +125/-0
    • Просмотр профиля
Привет.
Все верно - расчеты на лету только для малого количества данных.
Предварительные расчеты для больших массивов.

Оффлайн Азат

  • Новичок
  • *
  • Сообщений: 6
  • Страна: kz
  • Рейтинг: +1/-0
    • Просмотр профиля
(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 за последний день месяца.

Оффлайн Азат

  • Новичок
  • *
  • Сообщений: 6
  • Страна: kz
  • Рейтинг: +1/-0
    • Просмотр профиля
8 пункт что то в смайлик превратился

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


Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1149
  • Страна: ru
  • Рейтинг: +125/-0
    • Просмотр профиля
8 пункт что то в смайлик превратился
Автопреобразование сочетания "8  )", к содержимому сообщения отношения не имеет . 8)