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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Hikitosik от 04 декабря 2019, 02:24:08

Название: Диаграмма с вычисляемыми значениями
Отправлено: Hikitosik от 04 декабря 2019, 02:24:08
Добрый день, форумчане)
У меня появился вопрос. Смотрите ;)

   Имеются данные:
   Код  Регион  Продукт  Дата  [Цена в Магазине 1]  [Название Другого] [Цена в других]
   1      МО      Молоко     21         60                           Дикси                          42     
   1      МО      Молоко     21         60                           Пятёрочка                      32     
   1      МО      Молоко     21         60                           АВ                             142     
   1      МО      Молоко     21         60                           Билла                          47   
   2      МО      Молоко     24         63                           Дикси                          33     
   2      МО      Молоко     24         63                           Пятёрочка                      36     
   2      МО      Молоко     24         63                           АВ                             742     
   2      МО      Молоко     24         63                           Билла                          87   

Мне необходимо сделать диаграмму, которая будет выглядеть так:

Регион  Продукт  Дата  [Лучше на 5% (кол-во)]  [Лучше на 10% (кол-во)]

Другими словами имеется цепочка данных (вот это имеется в виду Код->Регион->Продукт->Дата->[Цена в Магазине 1] (они уникальны для одного "КОДА")), в котором указаны разные магазины с ценниками.Получается, что в столбце [Лучше на 5% (кол-во)] нужно получить количество наших кодов, в строчках которого выполняется неравенство: -0.05<[Цена в Магазине 1]/min([Цена в других])-1<0  (имеется в виду минимум из [Цена в других] по одному коду)

В дополнению к этому требуется, чтобы значения [Лучше на 5% (кол-во)] менялись в зависимости от выбора Магазинов в поле их выборки.

Подскажите, как сделать, пожалуйста. Попробовал много раз своими трудами - не получилось. Далее прочитал про Aggr и TOTAL, но не понял, как тут это применить.

Заранее большое спасибо
Название: Re: Диаграмма с вычисляемыми значениями
Отправлено: Uunit от 04 декабря 2019, 04:57:05
Добрый.
Дам вам направление.
В коде ниже, сделано всё, кроме проверка на 5%, так как в приведённой вами таблице, нет таких результатов.
Sum(IF(aggr(AVG(ЦенавМагазине1)/Min(ЦенаВдругих)-1,Код)>0.9,1,0))
Проверял на примерме, 60/32 = 0,875 и 63/33 = 0,90
т.е. проверял больше 0,9.
Всё считает
Название: Re: Диаграмма с вычисляемыми значениями
Отправлено: Hikitosik от 04 декабря 2019, 05:32:47
Спасибо огромное за ответ, агрегироваться начало правильно. Но у меня появился вопрос небольшой: Не должны ли мы эту сумму делить на число магазинов, участвующих в агрегировании? Или же получается, что всё это сделала за нас функция aggr?

Цитата: Uunit от 04 декабря  2019, 04:57:05  Sum(IF(aggr(AVG(ЦенавМагазине1)/Min(ЦенаВдругих)-1,Код)>0.9,1,0))
Проверял на примерме, 60/32 = 0,875 и 63/33 = 0,90
т.е. проверял больше 0,9.
Всё считает
Название: Re: Диаграмма с вычисляемыми значениями
Отправлено: Uunit от 05 декабря 2019, 09:10:55
Не совсем понял вопроса.
Всё зависит от того, какую цель вы преследуете.

Как работает
aggr(ЦенавМагазине1/Min(ЦенаВдругих)-1,Код)Представьте что перед вами Excel, и таблица что вы прислали выше.

Мы агрегируем с "Код", значит расчёты производим для данного измерения.
1) Вы берёте и фильтруете таблицу по столбцу Код, оставляя только Код 1
2) Определяете цену в магазине ЦенавМагазине1, это 60
3) Определяем наименьшее значение по столбцу ЦенаВдругих, это 32
4) Считаем, 60/32-1 = 0,875

Проделываем этот же самое со следующим кодом и т.д.

В итоге пример выша создаёт нам таблицу

Код  Результат
1       0,875
2       0,909


Следующий шаг:
Заключаем выше описанную функцию в IF(n>0.9 , 1 , 0)
Тогда вместо таблице выше получаем следующее:
Код  Результат
1       0
2       1

Следующий шаг,
Заключаем полученную формулу, Sum()
Тогда он складывает все значения по столбцу "Результат"
т.е. в данном случае это 1.
Sum(IF(aggr(ЦенавМагазине1/Min(ЦенаВдругих)-1,Код)>0.9,1,0))Учитывая цель которую вы описывали изначально, вам нужно менять IF(n>0.9 , 1 , 0)
т.е. менять условие n>0.9 на то что вам нужно.

Цитата: Hikitosik от 04 декабря  2019, 05:32:47  Спасибо огромное за ответ, агрегироваться начало правильно. Но у меня появился вопрос небольшой: Не должны ли мы эту сумму делить на число магазинов, участвующих в агрегировании? Или же получается, что всё это сделала за нас функция aggr?