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

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Ивушка от 06 марта 2019, 11:08:59

Название: Средний чек с определенным товаром
Отправлено: Ивушка от 06 марта 2019, 11:08:59
Доброго дня!
Наверняка моя задача тривиальна, но не могу найти решение не просторах инета, а у самой не хватает опыта.
Задача такая.
Есть чеки с товарами, по ним считаются продажи, средний чек и среднее кол-во товаров (без повторений) в чеке. Если в выборке не указан товар, средний чек считается хорошо: [Продажи]/[Кол-во чеков]. Если отобрать какой-либо товар, то [Средний чек]=[Продажи только этого товара]/[Кол-во чеков с этим товаром]. Но это неверный подсчет! Логика должна быть такая: отобрать все чеки, содержащие выбранный товар, со всеми товарами в чеке и считать: [Общие продажи по отобранным чекам]/[Кол-во чеков с товаром]. Такая же проблема с подсчетом среднего кол-ва товаров в чеке.
На примере:

Чек 1:
Водка - 1 шт - 300 р
Пиво - 2 шт - 200 р
Сигареты - 1 шт - 100 р

Чек 2:
Пиво - 1 шт - 100 р

Чек 3:
Водка - 2 шт - 600 р

Отбираем товар "Пиво". QlikView выхватывает эту позицию и выдает:
Средний чек = (200+100)/2=150 р
Среднее кол-во товаров в чеке = (1+1)/2=1

Но должен отобрать полностью два чека с товаром "Пиво" и считать по ним, т.е.:
Средний чек = (300+200+100+100)/2=350 р
Среднее кол-во товаров в чеке = (3+1)/2=2

Как заставить его это сделать? ))
Ориентируюсь по ключевым полям "Код чека", "Товар", "Сумма по строке чека".
Если сбросить измерение по товару, то сбрасывает его совсем и берет вообще все чеки:

=sum({ <Товар=, [Дата] ={'>=$(vDat21)<=$(vDat22)'} >} [Сумма по строке чека])/
count( DISTINCT {<[Дата] ={'>=$(vDat21)<=$(vDat22)'}>} [Код чека])

но нужно ведь оставить чеки, отобранные по измерению "товар"! (в количестве чеков измерение не сбрасываю, так и должно считаться - кол-во чеков с товаром). Как тут применить коды чеков, отобранных по товару, соображения не хватает.
Такая же беда с подсчетом товаров в чеке - при выборе товара оставляет только его. Исходная формула у меня такая (агрегирование, чтобы посчитать сперва кол-во в каждом чеке товаров без повторения):

=sum(aggr(count( DISTINCT
{< [Дата] ={'>=$(vDat21)<=$(vDat22)'}>} [Товар]), [Код чека])
)/count( DISTINCT {<[Дата] ={'>=$(vDat21)<=$(vDat22)'}>} [Код чека])


Помогите пожалуйста!
Название: Re: Средний чек с определенным товаром
Отправлено: millik от 06 марта 2019, 04:15:43
Начали вы правильно. Нужно сбросить отбор по товаром, а для того, чтобы остались только чеки, которые попадают в выборку, нужно так же переопределить множество чеков.
По итогу нужно сделать так:
{<[Товар]=,[Код чека]=P([Код чека])>}
Название: Re: Средний чек с определенным товаром
Отправлено: admin от 06 марта 2019, 08:28:21
Да, здесь необходимо использовать работу с множествами p().
Название: Re: Средний чек с определенным товаром
Отправлено: Ивушка от 07 марта 2019, 12:20:48
Всем спасибо за подсказки, с функцией Р() все получилось!
Название: Re: Средний чек с определенным товаром
Отправлено: Marina78 от 28 февраля 2020, 01:33:35
Добрый день!

а можно Вас попросить выложить окончательные формулы - мне не все понятно(((