Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 21, 2017, 07:25:58 am

Автор Тема: Фильтр в подсчетах (Qlikview & Sense)  (Прочитано 2012 раз)

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Фильтр в подсчетах (Qlikview & Sense)
« : Май 26, 2015, 02:29:19 pm »
Добрый день!
У меня есть табличка вида:
  № заказа   Товар    Возрастная группа
  22                N               Детская
  22                U               Взрослая
  24                К               Взрослая
  25                К               Взрослая
  25                О               Взрослая

Вопрос - как посчитать количество заказов, в которые входят товары ТОЛЬКО Взрослой возрастной группы? Т.е. в данном примере таких заказов будет 2.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #1 : Май 26, 2015, 02:39:52 pm »
День добрый.

Нам надо подсчитать, следовательно count().

Будем считать по значению поля "№заказа", а чтобы исключить двойной подсчет одного и того же заказа, применим - Distinct, следовательно count(Distinct [№ Заказа])

Нам следует ограничить подсчет множеством взрослой возрастной группы , т.е. [Возрастная группа]="Взрослая", следовательно, применяя анализ множеств запишем
count( Distinct { <[Возрастная группа]={"Взрослая"}> }  [№ Заказа] )

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #2 : Май 26, 2015, 03:44:37 pm »
Но ведь взрослая возрастная группа содержится и в заказе 22, а мне нужно чтобы считалось кол-во заказов, в которых ТОЛЬКО взрослые товары. А в заказе и взрослый и детский товар, такие заказы мне учитывать не надо.

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

Re: Фильтр в подсчетах
« Ответ #2 : Май 26, 2015, 03:44:37 pm »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #3 : Май 26, 2015, 03:50:45 pm »
Точно  :), извиняюсь, сразу не обратил внимания на ТОЛЬКО.
Давайте, завтра продолжим.

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #4 : Май 26, 2015, 03:58:36 pm »
Добрый день!
Попробуйте вот так:
if ( ([Возрастная группа] = 'Взрослая' and [Возрастная группа] <> 'Детская'), count( Distinct {<[Возрастная группа]={"Взрослая"}, [Возрастная группа]={<>"Взрослая"} >}  [№ Заказа] ))

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #5 : Май 27, 2015, 09:02:13 am »
Ну что же, продолжим  :)
Исходные данные:
LOAD * INLINE [
    № заказа, Товар, Возрастная группа
    22, N, Детская
    22, U, Взрослая
    24, K, Взрослая
    25, K, Взрослая
    25, O, Взрослая
];
Необходимо определить, сколько заказов имеют в своем составе только товары взрослой группы.
Как это можно определить? Думаю, что подойдут два условия:
1. [Возрастная группа]="Взрослая"
2. Количество групп в заказе = 1
Осталось составить выражение.
Сначала сделаем подсчет групп по заказам, используем aggr()
=aggr(count( DISTINCT [Возрастная группа]),[№ заказа])Создайте список с этим выражением, и проверьте его в работе.
Далее нам необходимо подсчитать, сколько имеется заказов с количеством групп =1.
Используем функции sum(), if()
sum(
if(aggr(count( DISTINCT [Возрастная группа]),[№ заказа])=1 ,
  1)
)
Мы получили количество заказов, в которых присутствует всего лишь одно значение группы, любое значение.
Теперь добавим условие фильтра {<[Возрастная группа]={"Взрослая"}>} и получим требуемое выражение:
sum({<[Возрастная группа]={"Взрослая"}>}
if(aggr(count( DISTINCT [Возрастная группа]),[№ заказа])=1 ,1)
)

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #6 : Май 29, 2015, 11:09:44 am »
Большое спасибо! Все очень подробно и понятно! =))
Подскажите, а как вы вывели в отдельную таблицу расчетное количество групп в заказе? У вас табличка с "1" и "2"

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

Re: Фильтр в подсчетах
« Ответ #6 : Май 29, 2015, 11:09:44 am »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #7 : Май 29, 2015, 11:11:03 am »
Подскажите, а как вы вывели в отдельную таблицу расчетное количество групп в заказе? У вас табличка с "1" и "2"
Не понял, о какой таблице речь?
Если о табличке с 1 и 2, то это поле списка.
Цитировать
Сначала сделаем подсчет групп по заказам, используем aggr()
=aggr(count( DISTINCT [Возрастная группа]),[№ заказа])
Создайте список с этим выражением, и проверьте его в работе.
 

Оффлайн Ирина

  • Наставник
  • **
  • Сообщений: 78
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #8 : Май 29, 2015, 12:24:14 pm »
Я поняла, спасибо! Просто не знала, что можно для списка прописывать выражение =)

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Фильтр в подсчетах
« Ответ #9 : Май 29, 2015, 12:29:22 pm »
В списке удобно проверять результат работы функции AGGR(), не всегда правда, но чаще всего помогает.
При этом, этот список также может использоваться для фильтрации, как и измерения.