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