13 Replies Latest reply: Nov 1, 2017 8:56 PM by Stanislav Chernov RSS

    Две таблицы фактов - списания и продажи - вопрос по формуле в таблице

    Stanislav Chernov

      Привет всем,

      Уже не первый день бьюсь с решением одной простой/непростой задачи, а именно расчёт суммы, по полю к которому эта сумма не относится в динамической таблице 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. перепробовал уже много вариантов решения - не одно ни привело к успеху, в частности : джоины, конкатенейты, расчёты через переменные, разбивание на отдельные таблицы, переименовывания полей и т.д.

      Вот пока этот текст писал, подумал, и кажется остался один вариант через альтернативные состояния, и период через переменные - но кажется я этот вариант тоже уже делал...