Возникла задача отобразить исторический ABC в таблице (по годам). Есть два измерения – Клиент и Год.
Исходный загрузочный скрипт для модели:
Продажи: LOAD Клиент, Год, Продажи FROM [lib://Data/Данные.xlsx] (ooxml, embedded labels, table is Лист1);
Старая формула для ABC Анализа дала сбой. Для 1 измерения ABC Анализ рассчитывается корректно:

Формула для старого ABC Анализа:
=if( (aggr(rangesum(above( sum(Продажи), 0, rowno() )),(Клиент, (=sum(Продажи), DESCENDING )))/sum(TOTAL Продажи)<0.8),'A', if(aggr(rangesum(above( sum(Продажи), 0, rowno() )),(Клиент, (=sum(Продажи), DESCENDING )))/sum(TOTAL Продажи)<0.95,'B','C') )
Если в таблицу добавить измерение Год и вынести его в столбцы, то получаем некорректный расчет:

Добавляем в загрузочный скрипт ранжирование по Году и по Клиенту:
Продажи: LOAD AutoNumberHash128(Клиент, Год) As %КлиентГодID, Клиент, Год, Продажи FROM [lib://Data/Данные.xlsx] (ooxml, embedded labels, table is Лист1); NoConcatenate Temp: LOAD %КлиентГодID, Год, Sum(Продажи) As СуммаПродаж Resident Продажи Group By Год, %КлиентГодID; NoConcatenate ПродажиПорядок: LOAD *, RowNo() As [Rank Продажи] Resident Temp Order By Год, СуммаПродаж desc; DROP Table Temp; DROP Field Год From ПродажиПорядок;
Новая формула расчета числителя:
aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))
Новая формула расчета знаменателя:
sum(TOTAL <Год> Продажи)
Новая формула ABC Анализа с сортируемым AGGR с двумя измерениями (исторический ABC анализ по годам):
=if( (aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))/sum(TOTAL <Год> Продажи)<0.8),'A', if(aggr(rangesum(above( sum(Продажи), 0, Rank(sum(Продажи)) )),([Rank Продажи],(Клиент, (=sum(Продажи), DESCENDING ))))/sum(TOTAL <Год> Продажи)<0.95,'B','C') )
Получаем правильный вид ABC анализа:

Скачать готовый пример:
Мое мнение такое) Если уж пришлось лезть в скрипт чтобы формировать таблицу спецом под этот сценарий ABC, проще было бы и саму сегментацию добить на стороне скрипта, и избавиться от формулы с AGGR в визуале
В случае, если не нужно иметь динамический расчет ABC Анализа, то согласен на 100%. Плюс в таком варианте – можно измерения задавать через переменные и получается конструктор. Бизнес-пользователь может посмотреть на разные варианты сегментаций и возможно что-то ценное найдет.