Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Суммирование значений факта в коридоре Avg+/-3*Stdev

Всем привет!

Столкнулся со следующей задачей - необходимо получить сумму всех продаж (факт Нетто), которые отличаются от среднего значения продажи не более чем на 3 сигмы, отличающиеся необходимо включить в сумму обрезав/дополнив до соответствующей границы коридора.

Отдельные поля со средним значением (avg), сигмой (stdev), верхней (avg+3stdev) и нижней (avg-3stdev) границами коридора, минимальным (min) и максимальным (max) значениями продажи считаются "на ура" для кода клиента и кода материала. А вот попытка в одном поле получить сумму по условию коридора продажи (с проверкой на попадание суммируемого значения в коридор) - не увенчиваются успехом. Либо Клик ругается на границу интервала в условии, либо просто ее игнорирует.

Следующая запись отображает коммент "Error in Expression":

=sum(if(Нетто > avg(Нетто)+3*Stdev(Нетто),

            avg(Нетто)+3*Stdev(Нетто),

            if(Нетто < avg(Нетто)-3*Stdev(Нетто),

               avg(Нетто)-3*Stdev(Нетто),

               Нетто

               )

           )

       )

Добавление идентификатора total решает проблему ошибки в выражении, но не решает исходной задачи:

=sum(if(Нетто > avg(total Нетто)+3*Stdev(total Нетто),

            avg(total Нетто)+3*Stdev(total Нетто),

            if(Нетто < avg(total Нетто)-3*Stdev(total Нетто),

               avg(total Нетто)-3*Stdev(total Нетто),

               Нетто

               )

           )

       )

Решение работает лишь для зафиксированного в selection клиента и материала (то есть для одной строки таблицы). При отсутствии выделения в каждой строке таблицы (для клиента и материала) отображаются полные суммы продаж.

Заранее благодарен за идеи.

С уважением,

Роман.

12 Replies
Not applicable
Author

Егор,

нужно для каждой строки таблицы (то есть пары клиент/материал) получить свои границы (avg+/-3*stdev) и для каждой же пары учитывать при суммировании именно эти (свои) границы.

Переписка выше описывает решение только для нахождения единых границ по всей совокупности данных. То есть к каждой паре применяются единые (общие) границы, а нужны - частные.

С уважением,

Роман.

Not applicable
Author

Нет, я как раз думаю, что границы рассчитываются на каждую строку отдельно aggr(nodistinct avg(Sales)+3*Stdev(Sales),ClientID,ProductCode) из за ClientID,ProductCode. У вас уже было время проверить мое последнее предоженное решение?

Not applicable
Author

Егор,

большое спасибо за помощь!

Вариант с nodistinct действительно оказался верным. Теперь остается только прикрутить его к боевой модели (там несколько больше фактов ).

С уважением,

Роман.