Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Декабрь 10, 2018, 10:43:42 pm

Автор Тема: Не могу совладать с Aggr.  (Прочитано 705 раз)

Оффлайн millik

  • Наставник
  • **
  • Сообщений: 81
  • Страна: by
  • Рейтинг: +35/-0
    • Просмотр профиля
Не могу совладать с Aggr.
« : Май 22, 2017, 04:43:41 pm »
Добрый день.

Что-то я не могу понять как работает Aggr. Точнее я знаю как эта функция работает, ведь не раз уже использовал, но в данной конкретной ситуации, что-то не могу разобраться.

Есть такая таблица. (Выбран весь апрель 2017)

Столбцы:
1) RowNo(Total) - мера, показыващая порядковый номер строки + так выводятся все строки на количество дней в выбранном периоде
2) Товар - тут всё понятно
3) ДатаКодОст - поле из календаря регистра для расчета остатков на лету.
4) Ост - остаток на дату =Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])5) ДниНалич - признак положительного остатка на дату =If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0)
Переменные в set analisys, чтобы было более понятно
$(eClearPeriod) - убираем все выборки по периодам, чтобы они напрямую не влияли на набор данных [Год]=,[ГодМесяц]=,[ГодКвартал]=,[ГодНеделя]=,[Месяц]=,[Квартал]=,[Неделя]=,[Дата]=,[День]=,[ДеньНедели]=
$(eDateOst) - применяем выборку из основного календаря на календарь остатков, т.к. они не связанны на прямую [ДатаКодОст]=P({1<[ДатаКод]={">=$(=Min(Aggr(Min({<$(eClearRef)>} Total [ДатаКод]),[Товар])))<=$(=Max(Aggr(Max({<$(eClearRef)>} Total [ДатаКод]),[Товар])))"}>}[ДатаКод])

$(eClearRef)- убираем все выборки по справочникам, чтобы они напрямую не влияли на набор данных [Товар]=,[Аптека]=,[Партия]=

Теперь я просто хочу свернуть эту таблицу и получить просуммированые остатки по каждым дням и количество дней наличия. Всё казалось очень просто - использовать Aggr().
1) Для остатка Sum(Aggr(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж]),[Товар],[ДатаКодОст]))2) Для дней наличия Sum(Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст]))
Но не тут то было. В полученной таблице всё по 0:


Уже пару дней бьюсь над этой проблемой не могу понять почему так. Вроде просто обернул формулы мер в Aggr(), но результат не тот что ожидал.

Оффлайн millik

  • Наставник
  • **
  • Сообщений: 81
  • Страна: by
  • Рейтинг: +35/-0
    • Просмотр профиля
Re: Не могу совладать с Aggr.
« Ответ #1 : Май 23, 2017, 03:24:00 pm »
В общем после упорнoго гугления выяснилось, что если во внутренней агрегации есть set analysis, то в большинстве случаем такой нужно указывать во внешней агрегации.

Т.е.
вместо
Sum(Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст]))нужно было указать
Sum({<$(eClearPeriod), $(eDateOst)>} Aggr(If(Sum({<$(eClearPeriod), $(eDateOst)>}[КолДвиж]*[ТипДвиж])>0,1,0),[Товар],[ДатаКодОст]))

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

Re: Не могу совладать с Aggr.
« Ответ #1 : Май 23, 2017, 03:24:00 pm »