Добрый день, форумчане)
У меня появился вопрос. Смотрите ;)
Имеются данные:
Код Регион Продукт Дата [Цена в Магазине 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, но не понял, как тут это применить.
Заранее большое спасибо
Добрый.
Дам вам направление.
В коде ниже, сделано всё, кроме проверка на 5%, так как в приведённой вами таблице, нет таких результатов.
Sum(IF(aggr(AVG(ЦенавМагазине1)/Min(ЦенаВдругих)-1,Код)>0.9,1,0))
Проверял на примерме, 60/32 = 0,875 и 63/33 = 0,90
т.е. проверял больше 0,9.
Всё считает
Спасибо огромное за ответ, агрегироваться начало правильно. Но у меня появился вопрос небольшой: Не должны ли мы эту сумму делить на число магазинов, участвующих в агрегировании? Или же получается, что всё это сделала за нас функция 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.
Всё считает
Не совсем понял вопроса.
Всё зависит от того, какую цель вы преследуете.
Как работает
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?