Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Привет всем,
Уже не первый день бьюсь с решением одной простой/непростой задачи, а именно расчёт суммы, по полю к которому эта сумма не относится в динамической таблице QlikView.
Итак, есть набор данных, приведу код(автогенерация), его может любой повторить
let vDateStart = num(MakeDate(2017,9,1));
Продажи:
LOAD
num(rand() * 500,'# ##0,00') as Сумма
, date(daystart($(vDateStart) + (30 * rand()))) as Дата
, ceil(rand() * 20) as Количество
, 'Магазин' & ceil(rand()*5) as Магазин
, 'Товар' & ceil(rand()*30) as Товар
, 'Группа' & ceil(rand()*3) as Группа
, 1 as ТипДвижения
Autogenerate 10000;
Списания:
LOAD
num(rand() * 100,'# ##0,00') as Сумма
, date(daystart($(vDateStart) + (30 * rand()))) as Дата
, ceil(rand() * 5) as Количество
, 'Магазин' & ceil(rand()*5) as Магазин
, 'Товар' & ceil(rand()*30) as Товар
, 'Группа' & ceil(rand()*3) as Группа
, 'Операция' & ceil(rand()*5) as Операция
, 2 as ТипДвижения
Autogenerate 500;
Join(Продажи)
LOAD * resident Списания;
drop table Списания;
NoConcatenate
Продажи2:
Load
*
, Year(Дата) & '-' & Month(Дата) as МесяцГод
resident Продажи;
Drop table Продажи;
В итоге нам нужна динамическая таблица (не буду описывать как она делается), но в ней должны быть измерения: периоды(дата, неделя, месяц и всё остальное), товары (в том числе их родители: группа, направление, категория), магазины (и регионы и города), тип списания.
Суть в том, что если мы отображаем в таблице "тип списания", то у нас на каждой строчке - должна быть одинаковая сумма продаж.
Конечно, списания проходят не каждый день, а продажи - чаще ежедневны.
На скриншоте, показываю две сводные таблицы (pivot table), в верхней - нет операций и сумма считается, в нижней - есть операции и сумма не отображается.
Нужно как я уже выше писал - при отображении типов списаний - писать суммы продаж, не взирая на типы.
Причём, например, если у нас в таблице будут измерения: месяц, категория, тип операции - нужно считать сумму продаж в том числе на каждую категорию, и так же писать одну и ту же сумму на каждой строке с типом операции.
P.S. перепробовал уже много вариантов решения - не одно ни привело к успеху, в частности : джоины, конкатенейты, расчёты через переменные, разбивание на отдельные таблицы, переименовывания полей и т.д.
Вот пока этот текст писал, подумал, и кажется остался один вариант через альтернативные состояния, и период через переменные - но кажется я этот вариант тоже уже делал...
Станислав,
было бы проще разбираться, если бы также выложили файл .qvw для примера и картинку желаемого результата.
Я понимаю, что вы почти все перепробовали, но почему не устраивает самый простой вариант?
На скрине pivot table в нижнем левом углу у вас видимо стоит галочка Supress When Value is Null для измерения Операция.
Если эту опцию выключить (или в таблице Продажи в скрипте завести поле Операция со значением "Операция продажи"), по крайней мере все суммы по продажам будет видно.
Если они нужны одинаковыми внутри измерения Операция:
sum({<ТипДвижения= {1}>} Total <Магазин,Дата,Группа,Товар> Сумма)
Здравствуйте. Вы пробовали соединить две таблицы фактов и параллельно использовать мастер календарь?
Что бы отличать данные таблиц, создайте в каждой из таблиц поле "Тип данных", в котором укажите тип: продажи и списания.
Ну и надо будет в set analysis сделать разделение.
Сразу описал в первом сообщение - пробовал и в скрипте это описано. И через Set analysis тоже пробовал.
Добрый день. Приложите qvw файл с диаграммами, покажите, как вы рассчитываете суммы в выражениях.
Во вложении
Попробуйте, вот так, добавив нулевое поле "Операция" в таблицу продаж, и сконкатенировав обе таблицы.
Наверно вы немного не поняли,
ТипДвижения - используется для отделения таблиц Списаний и Продаж, если значение = 1 то это сумма продаж, если 2 - то это сумма списаний.
Тип движения мне не нужно указывать в таблице и отбора по нему не будет.
Давайте по другому опишу, что есть и что нужно сделать.
В таком случае, наверное, имеет смысл плясать от полей таблицы списаний, левым соединением потом присоединяя к ней таблицу продаж.
Есть возможность скрипт загрузки доработать таким образом, как в примере?
В диаграмме - примерный вид.
При таком варианте, и я его тоже пробовал - не подходит, т.к. итоговые строки нужны.
И собственно при одной продаже в 175,258 руб, на итоге увидим 351 руб - что не верно.
И таблица, динамическая, подчеркиваю.
Мы никогда не можем знать сколько у нас строк в таблице, это зависит от пользователей..
Ну смотрите, поскольку мы уже по факту таблицу продаж присоединили левым соединением к таблице списаний, то наверное можно смело в функциях расчета суммы продаж указывать префикс DISTINCT, поскольку в рамках выводимых измерений 100% данная сумма продаж и количество продаж повторяться не будут, поскольку они у нас уже предварительно в скрипте по этим измерениям сгруппированы.
Пример с фильтром во вложении.