L’analisi ABC di Pareto, da molti rinominata 80/20, rappresenta un importante strumento manageriale volto all’individuazione di fattori denominati critici.
Il famoso economista vissuto nei primi anni del ‘900, enunciava che, da un qualsiasi universo di fattori si può isolare una piccola quantità di essi in grado di determinare evidenti effetti sulle performace generali, distinguendo altresì, un gran numero di fattori, che hanno una scarsa influenza sul complesso delle performace generali.
Questo procedimento, di semplice realizzazione, viene utilizzato anche in ambito logistico, come strumento volto alla classificazione dello stock; un numero limitato di referenze, infatti, incidono più che abbondantemente sul valore complessivo della giancenza totale. Ecco un esempio di report generato secondo questa classificazione.
Report ABC Pareto
Cod. |
Valore dello stock – euro |
% Valore |
% CUMULATA Valore |
% Articoli |
Classificazione |
A1 |
68.000 |
68,0% |
68,0% |
10% |
A |
A2 |
12.000 |
12,0% |
80,0% |
20% |
A |
A3 |
5.000 |
5,0% |
85,0% |
30% |
B |
A4 |
4.000 |
4,0% |
89,0% |
40% |
B |
A5 |
2.000 |
2,0% |
91,0% |
50% |
C |
A6 |
2.000 |
2,0% |
93,0% |
60% |
C |
A7 |
2.000 |
2,0% |
95,0% |
70% |
C |
A8 |
2.000 |
2,0% |
97,0% |
80% |
C |
A9 |
1.500 |
1,5% |
98,5% |
90% |
C |
A10 |
1.500 |
1,5% |
100,0% |
100% |
C |
Nella tabella sono state create 3 classificazioni:
- classificazione A : referenze che rappresentano l’80% del valore complessivo dello stock;
- classificazione B: referenze che rappresentano il 10 % (dall’ 80% al 90%) del valore complessivo dello stock;
- classificazione C: referenze che rappresentano il 10% (dal 90% al 100%) del valore complessivo dello stock.
E’ interessante è notare che il 20% percento del numero di referenze (2 referenze su 10) rappresantano l’80% del valore complessivo; ecco cosa deriva il nome classificazione 80-20.
Seppur oggi presenti moltissimi strumenti informatici più evoluti, ho pensato interssante sottoporre all’attenzione un esempio di codice SQL, ottimizzato per Oracle Application Express, che permette di calcolare l’analisi automaticamente. Questo codice, certamente, può essere ottimizzato, ma rappresenta una discreta base di partenza per chi non vuole dedicare l’ 80% del suo tempo a ‘bonificare’ dati e cimintarsi con i soliti ordinamenti e formule di excel a discapito del 20% del tempo utilizzato per riflettere, come accade nella maggior parte dei casi.
Il primo step consiste nel creare una tabella che raccolaga i dati base quali lsta delle refenze e valore complessivo delle quantità in stock.
CREATE TABLE STOCK (
ARTICLE VARCHAR2(30),
TOTAL_VALUE NUMBER(9,2)
);
Il secondo step consiste nel popolare di dati la tabella.
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A1',30000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A2',8000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A3',5000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A4',2500.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A5',1600.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A6',2000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A7',2000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A8',2000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A9',1500.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A10',1500.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A4',1500.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A5',400.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A1',28000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A1',10000.00);
INSERT INTO STOCK_VALUE (ARTICLE, TOTAL_VALUE ) VALUES ('A2',4000.00);
Step 3 effettuare la query di analisi dei dati:
SELECT
ARTICLE,
SUM(TOTAL_VALUE),
COUNT(*) OVER (ORDER BY SUM(TOTAL_VALUE) DESC, ARTICLE DESC ROWS UNBOUNDED PRECEDING) AS "COUNTER",
TO_CHAR(COUNT(*) OVER (ORDER BY SUM(TOTAL_VALUE) DESC, ARTICLE DESC ROWS UNBOUNDED PRECEDING) / COUNT(*) OVER (),'09.999999') AS "% COUNTER",
SUM(TOTAL_VALUE) AS QTY,
TO_CHAR(SUM(TOTAL_VALUE) / (SUM(SUM(TOTAL_VALUE)) OVER()),'09.999999') AS "% QTY",
SUM(SUM(TOTAL_VALUE)) OVER (ORDER BY SUM(TOTAL_VALUE) DESC, ARTICLE DESC ROWS UNBOUNDED PRECEDING) AS "CUMULATE QTY",
TO_CHAR( SUM(SUM(TOTAL_VALUE)) OVER (ORDER BY SUM(TOTAL_VALUE) DESC, ARTICLE DESC ROWS UNBOUNDED PRECEDING)/ SUM(SUM(TOTAL_VALUE)) OVER(),'09.999999') AS "% CUM QTY",
DECODE(
TRUNC(((SUM(SUM(TOTAL_VALUE)) OVER (ORDER BY SUM(TOTAL_VALUE) DESC, ARTICLE DESC ROWS UNBOUNDED PRECEDING)/ SUM(SUM(TOTAL_VALUE)) OVER())+0.099999999999999)*10),
9,'B',
10,'C',
'A') AS "CLASS"
FROM
( SELECT ARTICLE, TOTAL_VALUE FROM STOCK_VALUE)
GROUP BY ARTICLE
ORDER BY "COUNTER" ASC
Ecco l’output della nostra query:
ARTICLE SUM(TOTAL_VALUE) COUNTER % COUNTER QTY % QTY CUMULATE QTY % CUM QTY CLASS
------------------------------ ---------------------- ---------------------- ---------- ---------------------- ---------- ---------------------- ---------- -----
A1 68000 1 00.100000 68000 00.680000 68000 00.680000 A
A2 12000 2 00.200000 12000 00.120000 80000 00.800000 A
A3 5000 3 00.300000 5000 00.050000 85000 00.850000 B
A4 4000 4 00.400000 4000 00.040000 89000 00.890000 B
A8 2000 5 00.500000 2000 00.020000 91000 00.910000 C
A7 2000 6 00.600000 2000 00.020000 93000 00.930000 C
A6 2000 7 00.700000 2000 00.020000 95000 00.950000 C
A5 2000 8 00.800000 2000 00.020000 97000 00.970000 C
A9 1500 9 00.900000 1500 00.015000 98500 00.985000 C
A10 1500 10 01.000000 1500 00.015000 100000 01.000000 C
10 rows selected
Devi effettuare l'accesso per postare un commento.