Не могу совладать с Aggr.

Автор millik, 22 мая 2017, 04:43:41

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

millik

Добрый день.

Что-то я не могу понять как работает 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

В общем после упорнoго гугления выяснилось, что если во внутренней агрегации есть set analysis, то в большинстве случаем такой нужно указывать во внешней агрегации.

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

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