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 <Магазин,Дата,Группа,Товар> Сумма)
Анна спасибо!
Всё дело было в составлении формулы - она решила полностью весь вопрос