Un indicatore per valutare il servizio fornito al cliente è dato dalla puntualità delle consegne che indica la precisione a livello temporale della logistica. Per misurare la puntualità di consegna si confrontano due date: la data di consegna confermata presa dall’ordine e la data del documento di trasporto.
Per la nostra elaborazione partiamo da una tabella spedizioni in cui inseriamo le seguenti informazioni ricavate dagli ordini e dai DDT:
CLIENTE, ORDINE, CODICE, DATA CONSEGNA, DATA BOLLA
Per prima cosa calcoliamo la differenza tra le due date:
SELECT spedizioni.ORDINE, spedizioni.CODICE, spedizioni.DACO, spedizioni.DABO, IIf([DABO]=0,IIf([DACO]>=DATE(),0,DATE()-[DACO]),[DABO]-[DACO]) AS GG, IIf([GG]<-5,"ANTICIPO",IIf([GG]<5,"PUNTUALE","RITARDO")) AS CHK FROM spedizioni WHERE (((spedizioni.DACO)<=#1/31/2008#)); |
SELECT spedizioni.ORDINE, spedizioni.CODICE, spedizioni.DACO, spedizioni.DABO, IIf([DABO]=0,IIf([DACO]>=Date(),0,Date()-[DACO]),[DABO]-[DACO]) AS GG, IIf([GG]<-5,"ANTICIPO",IIf([GG]<5,"PUNTUALE","RITARDO")) AS CHK FROM spedizioni WHERE (((spedizioni.DACO)<=#1/31/2008#));
A questo punto incrociamo la query puntualità con la tabelle delle classi di puntualità cosi definita:
ORD | Classe | inf | sup |
1 | <=-30 | -9000 | -30 |
2 | ]-30;-7] | -29 | 7 |
3 | ]-7;-4] | -6 | -4 |
4 | ]-4;0] | -3 | 0 |
5 | ]0;4] | 1 | 4 |
6 | ]4;7] | 5 | 7 |
7 | ]7;14] | 8 | 14 |
8 | ]14;30] | 15 | 30 |
9 | ]30;60] | 31 | 60 |
10 | ]60;180] | 61 | 180 |
11 | >=180 | 181 | 9000 |
SELECT Puntualità.CLIENTE, Puntualità.CODICE, classi.Classe FROM Puntualità, classi WHERE (((Puntualità.GG) BETWEEN [classi]![inf] AND [classi]![sup])); |
SELECT Puntualità.CLIENTE, Puntualità.CODICE, classi.Classe FROM Puntualità, classi WHERE (((Puntualità.GG) Between [classi]![inf] And [classi]![sup]));
Ora raggruppiamo per classie e clienti la query precedente:
SELECT classi.ORD, classi.Classe, classi.Cliente, COUNT(CP00.CODICE) AS [N RIGHE] FROM CP00 INNER JOIN classi ON CP00.Classe = classi.Classe GROUP BY classi.ORD, classi.Classe; |
SELECT classi.ORD, classi.Classe, classi.Cliente, Count(CP00.CODICE) AS [N RIGHE] FROM CP00 INNER JOIN classi ON CP00.Classe = classi.Classe GROUP BY classi.ORD, classi.Classe;
In questo modo abbiamo ottenuto una statistica per classi di puntualità e cliente, sulla base della prima query è possibile costruire una statistica per mese in questo modo con tre query a cascata (pm00, pm01, puntualità mensile):
pm00
SELECT CLng(Format([DACO],"yyyy")) AS ANNO, CLng(Format([DACO],"m")) AS MES, IIf([CHK]="ANTICIPO","PUNTUALE",[CHK]) AS CK, Puntualità.CODICE FROM Puntualità; |
SELECT CLng(Format([DACO],"yyyy")) AS ANNO, CLng(Format([DACO],"m")) AS MES, IIf([CHK]="ANTICIPO","PUNTUALE",[CHK]) AS CK, Puntualità.CODICE FROM Puntualità;
pm01
TRANSFORM COUNT(pm00.CODICE) AS ConteggioDiCODICE SELECT pm00.ANNO, ([MES]) AS MESE, COUNT(pm00.CODICE) AS TOT FROM pm00 GROUP BY pm00.ANNO, ([MES]) PIVOT pm00.CK; |
TRANSFORM Count(pm00.CODICE) AS ConteggioDiCODICE SELECT pm00.ANNO, ([MES]) AS MESE, Count(pm00.CODICE) AS TOT FROM pm00 GROUP BY pm00.ANNO, ([MES]) PIVOT pm00.CK;
Puntualità mensile
SELECT pm01.MESE, [PUNTUALE]/[TOT] AS PUN, [RITARDO]/[TOT] AS RIT FROM pm01; |
SELECT pm01.MESE, [PUNTUALE]/[TOT] AS PUN, [RITARDO]/[TOT] AS RIT FROM pm01;