Возникла задача отобразить исторический ABC в таблице (по годам). Есть два измерения – Клиент и Год.

Исходный загрузочный скрипт для модели:

Продажи:
LOAD 
     Клиент, 
     Год, 
     Продажи
FROM [lib://Data/Данные.xlsx]
(ooxml, embedded labels, table is Лист1);

Старая формула для ABC Анализа дала сбой. Для 1 измерения ABC Анализ рассчитывается корректно:

Старый подход в ABC Анализе с использованием сортируемого AGGR

Формула для старого 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')
)

Если в таблицу добавить измерение Год и вынести его в столбцы, то получаем некорректный расчет:

Старая формула с 2 измерениями не работает

Добавляем в загрузочный скрипт ранжирование по Году и по Клиенту:

Продажи:
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 анализа:


Скачать готовый пример:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *