Добрый день!
У меня есть табличка вида:
№ заказа Товар Возрастная группа
22 N Детская
22 U Взрослая
24 К Взрослая
25 К Взрослая
25 О Взрослая
Вопрос - как посчитать количество заказов, в которые входят товары ТОЛЬКО Взрослой возрастной группы? Т.е. в данном примере таких заказов будет 2.
День добрый.
Нам надо подсчитать, следовательно count().
Будем считать по значению поля "№заказа", а чтобы исключить двойной подсчет одного и того же заказа, применим - Distinct, следовательно count(Distinct [№ Заказа])
Нам следует ограничить подсчет множеством взрослой возрастной группы , т.е. [Возрастная группа]="Взрослая", следовательно, применяя анализ множеств запишем
count( Distinct { <[Возрастная группа]={"Взрослая"}> } [№ Заказа] )
Но ведь взрослая возрастная группа содержится и в заказе 22, а мне нужно чтобы считалось кол-во заказов, в которых ТОЛЬКО взрослые товары. А в заказе и взрослый и детский товар, такие заказы мне учитывать не надо.
Точно :), извиняюсь, сразу не обратил внимания на ТОЛЬКО.
Давайте, завтра продолжим.
Добрый день!
Попробуйте вот так:
if ( ([Возрастная группа] = 'Взрослая' and [Возрастная группа] <> 'Детская'), count( Distinct {<[Возрастная группа]={"Взрослая"}, [Возрастная группа]={<>"Взрослая"} >} [№ Заказа] ))
Ну что же, продолжим :)
Исходные данные:
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"
Цитата: Ирина от 29 мая 2015, 11:09:44
Подскажите, а как вы вывели в отдельную таблицу расчетное количество групп в заказе? У вас табличка с "1" и "2"
Не понял, о какой таблице речь?
Если о табличке с 1 и 2, то это поле списка.
Цитировать
Сначала сделаем подсчет групп по заказам, используем aggr()
=aggr(count( DISTINCT [Возрастная группа]),[№ заказа])
Создайте список с этим выражением, и проверьте его в работе.
Я поняла, спасибо! Просто не знала, что можно для списка прописывать выражение =)
В списке удобно проверять результат работы функции AGGR(), не всегда правда, но чаще всего помогает.
При этом, этот список также может использоваться для фильтрации, как и измерения.