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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Евгений от 31 июля 2015, 04:10:34

Название: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 31 июля 2015, 04:10:34
Добрый день! Есть такая проблема:

Дано:

  Продукт   Выручка 
продукт1    500     
продукт2    300     
продукт3    400   

Вопрос:  как получить (путем вычисления выражения в текст. объекте) количество продуктов, у которых суммарная накопленная доля по выручке, например,  будет меньше 70 % ... ?  т.е. в данном случае ответ будет 2 шт.
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: admin от 31 июля 2015, 04:23:05
Привет,
решение похожей задачи (http://qlikview-forum.ru/qvf/index.php/topic,413.msg600.html#msg600)
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 31 июля 2015, 05:11:20
Скорее нет, чем да.

Вот как я понимаю... вот так можно каждый в отдельности продукт проверить по долям...
=sum(if(
Aggr( above ( Sum(Выручка)/Sum( total Выручка ), product_name)
<
sum(total Aggr(Sum(Выручка)/Sum( total Выручка), product_name)) * 0.7
, 1 , 0))


А как же накопление учесть... ???
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: bibis от 31 июля 2015, 05:40:56
Можно развёрнутее - что нужно найти?
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 31 июля 2015, 07:03:59
Цитата: bibis от 31 июля  2015, 05:40:56  
Можно развёрнутее - что нужно найти?

1. хотелось бы отсортировать по долям (убывание)
2. считать количество продуктов, пока сумма накопленных долей не достигнет 70%
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: DmitryK от 03 августа 2015, 12:01:48
Добрый день!

Я бы предложил на рассмотрение ABC анализ. Вот только с сортировкой немного помучиться надо будет.

По ограничению данных...в расчете % от выручке проставьте условие, если Выражение >0.7, тогда NULL(). Далее скрываем NULL() значения.

P.s.: Пример ABC - анализа во вложении.
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 03 августа 2015, 12:47:24
Цитата: DmitryK от 03 августа  2015, 12:01:48  

Я бы предложил на рассмотрение ABC анализ. Вот только с сортировкой немного помучиться надо будет.

По ограничению данных...в расчете % от выручке проставьте условие, если Выражение >0.7, тогда NULL(). Далее скрываем NULL() значения.

P.s.: Пример ABC - анализа во вложении.

Добрый день!  Но все равно не ясно вот что... (Зайду с другой стороны):

Есть табличка типа:
  Продукт   Выручка  Доля  Накопл.  Кол-во, где < 0.7
продукт1    500     42%     42%            1
продукт2    300     25%      67%           1
продукт3    400     33%    100%           0

Последний столбик - ставлю единицу по условию:

if(
rangesum( 
Sum(Выручка )/Sum( total Выручка ),
above(
Sum(Выручка /Sum( total Выручка ) , 1 , RowNo()
)
)
< 0.7
, 1, 0 )


Видно, что сумма единиц и есть кол-во искомых товаров. Таблица делает все четко и правильно.

Но вот две проблемы:
1. Как же вывести в ТЕКСТОВЫЙ ОБЪЕКТ данное вычисление?! (ответ должен быть = 2 без учета сортировки)
2. И как же тогда учесть сортировку по долям ?! ( тогда ответ = 1 )

Спасибо огромное за внимание к моему вопросу!
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: kvv от 03 августа 2015, 01:03:14
Всем привет!
Евгений, есть уточняющий вопрос.
В данном примере 3 строки, в связи с этим вопрос.

В целом, одинаковая SQL-выборка в каждый момент времени может давать разную последовательность строк.
То есть, может быть "Продукт1 ---> Продукт2 ---> Продукт3", а может быть "Продукт1 ---> Продукт3 ---> Продукт2".
И это, в примере, только 3 строки. "В жизни" строк намного больше. И получается, что накопительная сумма может быть разная и число продуктов тоже может быть разное. Как быть в данной ситуации?
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: DmitryK от 03 августа 2015, 01:29:08
В моем примере, чтобы вывести значения, например, меньше 90% я в текстовом поле прописываю:

=sum(aggr(if(RANGESUM(ABOVE(SUM(SALE)/SUM(TOTAL SALE),1,RowNo()),SUM(SALE)/SUM(TOTAL SALE))<0.9,1,0),ITEM))

При этом у вас не настроена сортировка в таблице по выражению "Выручка". Вам ведь необходимо находить от мин. к макс.
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 03 августа 2015, 03:21:26
Цитата: DmitryK от 03 августа  2015, 01:29:08  
В моем примере, чтобы вывести значения, например, меньше 90% я в текстовом поле прописываю:

=sum(aggr(if(RANGESUM(ABOVE(SUM(SALE)/SUM(TOTAL SALE),1,RowNo()),SUM(SALE)/SUM(TOTAL SALE))<0.9,1,0),ITEM))

При этом у вас не настроена сортировка в таблице по выражению "Выручка". Вам ведь необходимо находить от мин. к макс.

Ну Вы представляете! Если использовать русский язык (Манго, Яблоко и т.д.) - то не работает ,а если product1, product2 - то работает.... что же в этом выражении такого, что оно русский не переваривает??? 
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: DmitryK от 03 августа 2015, 04:21:03
Только что перегрузил у себя, поменяв наименования в скрипте. Все ок!
См. вложение.

Но вообще, удивительные вещи творятся в стране, Товарищи! :-)
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: Евгений от 03 августа 2015, 04:29:14
Цитата: DmitryK от 03 августа  2015, 04:21:03  
Только что перегрузил у себя, поменяв наименования в скрипте. Все ок!
См. вложение.

Но вообще, удивительные вещи творятся в стране, Товарищи! :-)

Так странно... Жаль только не отсортировать по долям... Но все равно - ОГРОМНОЕ ВАМ СПАСИБО!
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: DmitryK от 03 августа 2015, 05:52:39
Не за что)
Название: Re: Подсчет кол-ва в зависимости от накопленной доли (QV)
Отправлено: admin от 03 августа 2015, 06:02:31
Цитата: Евгений от 03 августа  2015, 03:21:26  
Цитата: DmitryK от 03 августа  2015, 01:29:08  
В моем примере, чтобы вывести значения, например, меньше 90% я в текстовом поле прописываю:

=sum(aggr(if(RANGESUM(ABOVE(SUM(SALE)/SUM(TOTAL SALE),1,RowNo()),SUM(SALE)/SUM(TOTAL SALE))<0.9,1,0),ITEM))

При этом у вас не настроена сортировка в таблице по выражению "Выручка". Вам ведь необходимо находить от мин. к макс.

Ну Вы представляете! Если использовать русский язык (Манго, Яблоко и т.д.) - то не работает ,а если product1, product2 - то работает.... что же в этом выражении такого, что оно русский не переваривает???
Забавно.
А сколько языков установлено в системе?