И снова про АВС-анализ...

Автор Ивушка, марта 13, 2019, 03:13:28 pm

« предыдущая - следующая »

Ивушка

Приветствую.
Пытаюсь реализовать таблицу с АВС-группировкой по результатом продаж.
Сразу скажу, что поискала готовые примеры и почитала по этой теме вообще. Примеры с aggr() пока не разбирала, потому что эту функцию не хотелось бы использовать, из-за больших массивов своих данных. Взяла, как показалось, пример попроще.

Итак. Создала сводную таблицу с измерением Товар и Выражением Sum([ПродСум]), отсортировала Товар по убыванию по Оси Y.
Для расчета накопительных сумм продаж попыталась воспользоваться формулой:
RangeSum(Above(Sum([ПродСум]), 0, RowNo()))
Но она не работает. Точнее, накопительную сумму-то считает, но не по убыванию продаж, потому что RowNo() наплевать на выбранную мной сортировку!
Вот что творит:

Код товара   "Сумма продаж"   "Накопительная сумма"   RowNo()   Вот так считает:
Товар 100      521047,43            925953,76                            4                  1+2+3+4
Товар 106      363806,02            1289759,78                           5                  1+2+3+4+5
Товар 115      254869,51            404906,33                            3                  1+2+3
товар 117      112562,69            112562,69                            1               
Товар 130      37474,13                 150036,82                           2                  1+2

Видно, что Сумму продаж упорядочил по убыванию, а Накопительную сумму считает в соответствии с RowNo(), который подчиняется какой-то другой сортировке (возможно, по умолчанию?).
К слову, если упорядочить Товары в алфавитном порядке, RowNo() дает нормальный порядок: 1,2,3 и т.д.

Попробовала брать не сводную таблицу с формулой, а прямую таблицу просто с накоплением по сумме продаж - тоже беда с сортировкой.

Но именно RangeSum() для АВС встречала часто в примерах, почему у меня-то не работает? Подскажите, пожалуйста. Ну или подскажите как можно реализовать иначе, желательно не сильно тормозными функциями...

Всем неравнодушным спасибо! )



millik

марта 19, 2019, 10:11:04 pm #1 Последнее редактирование: марта 19, 2019, 10:17:20 pm от millik
В агрегации лезть и не нужно.
Уже не раз рисовал ABC-анализ, поэтому с ходу подскажу своё типовое решение, которое я адаптирую под конкретные задачи.

1 колонка: Номер строки (тупо RowNo() )
2 колонка: Измерение анализа ( [Товар] )
3 колонка: Мера по которой считается нарастающий процент ( Sum([СуммаЧек]) )
4 колонка: % от мера ( Sum([СуммаЧек])/Sum(Total [СуммаЧек]) )
5 колонка: Накопленный % ( RangeSum(Above(Column(4)), Column(3)) )
6 колонка: Группа ( If(Column(4)<=$(vA)/100, 'A', If(Column(4)<=($(vB)+$(vA))/100, 'B', 'C')) )
7 колонка: Ранг в группе ( If(Column(5)=Above(Column(5)), RangeSum(Above(Column(6)), 1), 1) )

Это моя типовая заготовка таблицы, которую можно развивать дальше. Некоторые просят склеить Группу и Ранг в одно поле, кому-то не нужен накопленный процент или индивидуальный процент, кто-то просит дать возможность выбора меры или измерения и т.п.

И ещё. Есть один ВАЖНЫЙ нюанс для данного решения. Сортировка таблицы должна быть жестко зафиксирована: по убыванию результатов меры. Иначе все группы "поедут", т.к. не верно будет считаться накопленный, потому что используется функция Above().

ПС
На оптимальность решения не претендую. Возможно есть другие варианты.

admin


millik

Цитата: admin от марта 21, 2019, 07:55:50 am
Посмотрите материал от коллеги
https://qliksense.ivan-shamaev.ru/abc-advance-analysis-sortable-aggr-by-2-dimensions/


Спасибо.
Мои ещё не додумались анализировать АВС в динамике, но на будущее сохранил =)

admin

марта 21, 2019, 01:19:04 pm #4 Последнее редактирование: марта 21, 2019, 01:20:55 pm от admin
В динамике совершенно другой взгляд.
Пришел к тому, что многие расчеты перевел в скрипты и анализ в динамике.
Т.к. использование расчета по скользящим на больших данных просто нереален.
И АБС и сегментация очень интереса, особенно при анализе в долях четко отслеживается влияние каких-то событий.