Возникла задача отобразить исторический 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%. Плюс в таком варианте – можно измерения задавать через переменные и получается конструктор. Бизнес-пользователь может посмотреть на разные варианты сегментаций и возможно что-то ценное найдет.