Фильтр в подсчетах (Qlikview & Sense)

Автор Ирина, 26 мая 2015, 02:29:19

« назад - далее »

Ирина

Добрый день!
У меня есть табличка вида:
  № заказа   Товар    Возрастная группа
  22                N               Детская
  22                U               Взрослая
  24                К               Взрослая
  25                К               Взрослая
  25                О               Взрослая

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

admin

День добрый.

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

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

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

Ирина

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

admin

Точно  :), извиняюсь, сразу не обратил внимания на ТОЛЬКО.
Давайте, завтра продолжим.

kvv

#4
Добрый день!
Попробуйте вот так:
if ( ([Возрастная группа] = 'Взрослая' and [Возрастная группа] <> 'Детская'), count( Distinct {<[Возрастная группа]={"Взрослая"}, [Возрастная группа]={<>"Взрослая"} >}  [№ Заказа] ))

admin

Ну что же, продолжим  :)
Исходные данные:
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)
)

Ирина

Большое спасибо! Все очень подробно и понятно! =))
Подскажите, а как вы вывели в отдельную таблицу расчетное количество групп в заказе? У вас табличка с "1" и "2"

admin

#7
Цитата: Ирина от 29 мая  2015, 11:09:44  
Подскажите, а как вы вывели в отдельную таблицу расчетное количество групп в заказе? У вас табличка с "1" и "2"
Не понял, о какой таблице речь?
Если о табличке с 1 и 2, то это поле списка.
Цитировать
Сначала сделаем подсчет групп по заказам, используем aggr()
=aggr(count( DISTINCT [Возрастная группа]),[№ заказа])
Создайте список с этим выражением, и проверьте его в работе.

Ирина

Я поняла, спасибо! Просто не знала, что можно для списка прописывать выражение =)

admin

В списке удобно проверять результат работы функции AGGR(), не всегда правда, но чаще всего помогает.
При этом, этот список также может использоваться для фильтрации, как и измерения.

Яндекс.Метрика