ABC-анализ методом двух касательных
#АнатомияФункций – приёмы
Всем привет!
Чуть не поругались с Игорем на тему, какой метод определения границ групп в АВС-анализе является «правильным», по этому поводу восстанавливаю справедливость и привожу вариант для динамических границ, а именно, метод двух касательных:
(таблица,группа,столбцы)=>
[ g=(x)=>[a=Record.ToList(Record.SelectFields(x,столбцы)),
b=Record.Field(dict,Record.Field(x,группа)),
c=List.Transform(List.Zip({a,b}),(x)=>if x{0}>=x{1}{0} then "A" else if x{0}>=x{1}{1} then "B" else "C")][c],
f=(x)=>(y)=>[a=List.Buffer(Table.Column(y,x)),
b=List.Average(a),
c={b,List.Average(List.Select(a,(x)=>x<b))}][c],
gr = Table.Group(таблица,группа,List.Transform(столбцы,(x)=>{x,f(x)})),
dict = Record.FromList(Table.ToList(gr,List.Skip),Table.Column(gr,группа)),
add = Table.AddColumn(таблица,"tmp",g),
nms = List.Transform(столбцы,(x)=>"ABC_"&x),
to = Table.SplitColumn(add,"tmp",(x)=>x,nms)][to]
Ну а что тут к чему и почему так мало кода… смотрим в видосе.
Для подписчиков с исходниками –
Sponsr
Рутуб
Дзен
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik