Il template dei dati per la manutenzione degli asset
Il template dei dati per la manutenzione degli asset
- Attributi consigliati da raccogliere
- Attività di manutenzione critiche da monitorare
- Indicazioni tecniche per l’estrazione da SAP PM
Attributi della manutenzione degli asset
| Nome | Descrizione | ||
|---|---|---|---|
| Nome dell’attività Activity | L’attività specifica o la modifica di stato che si è verificata. | ||
| Descrizione Rappresenta la fase svolta nel processo di manutenzione, ad esempio «Ordine di manutenzione creato», «Uscita merci registrata» o «Operazione dell’ordine confermata». In genere, gli eventi derivano dalle tabelle di gestione degli stati (JEST) per le modifiche di stato oppure dalle tabelle delle transazioni (AFRU per le conferme, MKPF per i movimenti di materiale). Questo attributo determina i nodi della mappa del processo. Perché è importante Definisce il «che cosa» del processo ed è essenziale per individuare il flusso e le varianti del processo. Dove reperirli Ricavato da JEST (stati), AFRU (conferme), QMEL (notifiche) Esempi Ordine di manutenzione creatoOrdine rilasciatoCompletato tecnicamente | |||
| Ordine di lavoro di manutenzione MaintenanceWorkOrder | Identificativo univoco dell’ordine di lavoro di manutenzione. | ||
| Descrizione L’ordine di lavoro di manutenzione è il documento centrale di SAP Plant Maintenance (tabella AUFK, campo AUFNR). Collega il fabbisogno di manutenzione (notifica) alle risorse, ai materiali e ai costi necessari per l’esecuzione. Nell’analisi di Process Mining funge da ID del caso e consente di ricostruire l’intero ciclo di vita dell’intervento, dalla creazione al completamento tecnico e gestionale. Perché è importante È la chiave univoca che collega tutte le attività, i costi e i timestamp, consentendo di visualizzare il flusso del processo. Dove reperirli Tabella SAP AUFK, campo AUFNR Esempi 00004001234540012345000040098765 | |||
| Sistema di origine SourceSystem | Il sistema da cui provengono i dati. | ||
| Descrizione Identifica il client o l’istanza SAP specifici, ad esempio «SAP_PM_PROD». In un’architettura con più sistemi ERP, questo attributo consente di distinguere i record che potrebbero avere lo stesso ID ma appartenere a entità giuridiche o ambienti di sistema diversi. Perché è importante Garantisce l’univocità e la tracciabilità dei dati negli ambienti con più sistemi. Dove reperirli Configurazione del sistema / registro di estrazione Esempi SAP_ECC_P01SAP_S4H_100 | |||
| Timestamp dell’evento EventTimestamp | La data e l’ora esatte in cui si è verificata l’attività. | ||
| Descrizione Registra il momento preciso in cui si è verificato un evento. Per le modifiche di stato, il dato proviene dall’ora di aggiornamento dello stato di sistema; per le operazioni, dall’ora della conferma. Timestamp accurati sono fondamentali per calcolare i tempi di ciclo e di attraversamento e individuare i colli di bottiglia tra le fasi del processo, come la pianificazione e l’esecuzione. Perché è importante È necessario per ordinare correttamente gli eventi e calcolare tutti i KPI basati sulla durata. Dove reperirli JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Esempi 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Timestamp dell’estrazione dei dati più recente. | ||
| Descrizione Indica quando sono stati aggiornati l’ultima volta i dati nel modello di Process Mining. Aiuta gli analisti a valutare quanto siano aggiornate le informazioni e a verificare l’attualità dei dati nelle Dashboard che monitorano gli arretrati in tempo reale o il rispetto degli SLA. Perché è importante È fondamentale per la governance dei dati e per garantire l’affidabilità delle Dashboard. Dove reperirli Timestamp ETL Esempi 2023-11-01T12:00:00Z | |||
| Centro di lavoro principale MainWorkCenter | Il centro di lavoro o la squadra principale assegnati all’esecuzione dell’ordine. | ||
| Descrizione Il centro di lavoro principale (VAPLZ) rappresenta il gruppo di tecnici o di macchine che esegue il lavoro. Questo attributo è associato a «Team» ed è fondamentale per analizzare l’efficienza dell’esecuzione, ad esempio il tempo medio di riparazione per squadra. Aiuta a distinguere il lavoro del personale interno da quello degli appaltatori esterni. Perché è importante Consente di analizzare le prestazioni a livello di risorsa. Dove reperirli Tabella SAP AFKO, campo VAPLZ (oppure AUFK-VAPLZ, a seconda della configurazione) Esempi MECH_01ELEC_TEAMEXT_CONT | |||
| Data di fine prevista TargetFinishDate | La data prevista per il completamento degli interventi di manutenzione. | ||
| Descrizione Questa data, in genere la data di fine di base (Basic Finish Date - GLTRP), rappresenta la scadenza dell’ordine di lavoro. Viene confrontata con la data e l’ora effettive di completamento per calcolare il KPI «Tasso di rispetto degli SLA». Costituisce il riferimento per stabilire se un ordine di lavoro è stato completato nei tempi previsti o in ritardo. Perché è importante Il riferimento per tutti i calcoli della puntualità delle consegne (OTD). Dove reperirli Tabella SAP AFKO, campo GLTRP Esempi 2023-12-012023-12-15 | |||
| Gruppo di pianificazione ResponsiblePlannerGroup | Il gruppo di pianificatori responsabile della gestione dell’ordine. | ||
| Descrizione Il gruppo di pianificazione (INGRP) identifica il team o il reparto responsabile della pianificazione degli interventi di manutenzione. È associato a «Department» ed è fondamentale per la Dashboard sull’utilizzo e la pianificazione delle risorse, che consente di individuare i team di pianificazione che costituiscono colli di bottiglia nella fase preparatoria. Perché è importante Identifica il team amministrativo responsabile del processo di pianificazione. Dove reperirli Tabella SAP AUFK, campo INGRP Esempi M01ELEMEC | |||
| Numero dell’apparecchiatura EquipmentNumber | Identificativo dell’asset fisico specifico sottoposto a manutenzione. | ||
| Descrizione Il numero dell’apparecchiatura (EQUNR) identifica la singola macchina o il singolo asset. Aggregando i dati in base a questo campo, gli analisti possono creare la Dashboard sui costi e sul volume degli interventi di manutenzione degli asset e individuare le apparecchiature problematiche che richiedono riparazioni frequenti e costose. Consente inoltre di analizzare la manutenzione in ottica di affidabilità. Perché è importante Collega le prestazioni del processo a specifici asset fisici. Dove reperirli Tabella SAP AUFK, campo EQUNR Esempi 10004567PUMP-001HVAC-202 | |||
| Numero della notifica NotificationNumber | La notifica di manutenzione che ha generato questo ordine. | ||
| Descrizione Il numero della notifica (QMNUM) collega l’ordine di lavoro alla richiesta iniziale. Questo collegamento è necessario per calcolare il tempo di attraversamento complessivo, dalla ricezione della richiesta di manutenzione al completamento. Senza di esso, l’analisi non include la fase iniziale di rilevamento e segnalazione nel ciclo di vita della manutenzione. Perché è importante Ricollega la fase di esecuzione alla fase di richiesta o rilevamento. Dove reperirli Tabella SAP AUFK, campo QMNUM Esempi 1000050010000501 | |||
| Priorità di manutenzione MaintenancePriority | Il livello di urgenza assegnato all’ordine di lavoro. | ||
| Descrizione Indica la priorità (PRIOK) dell’intervento di manutenzione, ad esempio «1-Molto alta», «2-Alta» o «3-Media». Questo campo alimenta direttamente il KPI sul rapporto degli ordini di lavoro di emergenza. Analizzare il flusso in base alla priorità aiuta a verificare se gli ordini ad alta priorità vengono effettivamente gestiti più rapidamente rispetto agli interventi ordinari. Perché è importante È un fattore chiave per l’analisi degli SLA e l’individuazione degli interventi di emergenza. Dove reperirli Tabella SAP AFKO, campo PRIOK (oppure AUFK tramite vista) Esempi 1-Emergenza2-Alta3-Media4-Bassa | |||
| Sede tecnica FunctionalLocation | La posizione gerarchica in cui è installato l’asset. | ||
| Descrizione Rappresenta il punto della struttura tecnica in cui viene eseguito l’intervento di manutenzione (TPLNR). A differenza dell’apparecchiatura, che può essere spostata, la sede tecnica è fissa. Questo attributo alimenta la Dashboard sui tempi di ciclo delle ispezioni tecniche e consente di confrontare le prestazioni tra diverse aree dello stabilimento, ad esempio la sala caldaie e la linea di confezionamento. Perché è importante Consente di analizzare le prestazioni della manutenzione in base alla posizione e alla gerarchia. Dove reperirli Tabella SAP IFLOT, campo TPLNR (oppure AUFK-TPLNR) Esempi PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Stabilimento di manutenzione MaintenancePlant | Lo stabilimento logistico responsabile della manutenzione. | ||
| Descrizione Lo stabilimento (WERKS) è la principale unità organizzativa della logistica e consente di separare i dati in base alla sede fisica. Questo attributo è essenziale per confrontare le prestazioni tra sedi diverse ed è associato a «BusinessUnit» per consentire filtri organizzativi di alto livello nelle Dashboard. Perché è importante È il principale filtro organizzativo per confrontare le prestazioni delle sedi. Dove reperirli Tabella SAP AUFK, campo WERKS Esempi 100020003000 | |||
| Stato di sistema SystemStatus | Lo stato tecnico attuale dell’ordine (ad es. REL, TECO). | ||
| Descrizione Stringa concatenata o elenco degli stati di sistema attivi (da JEST) applicati all’ordine. Tra i valori più comuni figurano CRTD (Creato), REL (Rilasciato), TECO (Completato tecnicamente) e CLSD (Chiuso). Consente di distinguere i casi aperti da quelli chiusi nel monitor «Arretrato e lavori in corso». Perché è importante Il principale indicatore della fase del ciclo di vita dell’ordine. Dove reperirli Modulo funzione SAP STATUS_TEXT_EDIT o tabella JEST Esempi REL CNFTECOCRTD MACM | |||
| Tipo di ordine di manutenzione MaintenanceOrderType | Classifica l’ordine di lavoro, ad esempio come preventivo o correttivo. | ||
| Descrizione Il tipo di ordine (AUART) in SAP PM distingue la natura dell’intervento di manutenzione. Tra i tipi più comuni figurano PM01 (correttivo), PM02 (preventivo) e PM03 (revisione). Questo attributo è essenziale per il monitoraggio dell’impatto degli ordini di lavoro di emergenza e per segmentare le varianti del processo, poiché i flussi di lavoro preventivi differiscono notevolmente da quelli reattivi. Perché è importante È fondamentale per segmentare l’analisi tra interventi pianificati e non pianificati. Dove reperirli Tabella SAP AUFK, campo AUART Esempi PM01PM02PM03 | |||
| Utente che ha creato l’ordine CreatedByUser | Il nome utente della persona che ha creato l’ordine. | ||
| Descrizione Identifica l’utente (ERNAM) che ha avviato l’ordine di lavoro. Nel modello generico corrisponde a «Utente». Consente di analizzare la creazione manuale rispetto a quella automatizzata e supporta la verifica dell’attività «Ordine di manutenzione creato». Perché è importante Consente di analizzare il comportamento degli utenti e di svolgere verifiche. Dove reperirli Tabella SAP AUFK, campo ERNAM Esempi JSMITHBSERVICEDDAVIS | |||
| Costo effettivo totale TotalActualCost | Il costo effettivo totale registrato sull’ordine di lavoro. | ||
| Descrizione Costi aggregati di manodopera, materiali e servizi (dalla tabella PMCO). Questo attributo alimenta la Dashboard «Costi e produttività della manutenzione degli asset», che consente ai responsabili di valutare l’impatto economico delle attività di manutenzione. È essenziale per stabilire se conviene riparare o sostituire gli asset. Perché è importante Aggiunge la dimensione economica ai dati operativi del processo. Dove reperirli Tabella SAP PMCO (somma del tipo di valore 04 - effettivo) Esempi 150.002500.500.00 | |||
| È un intervento di emergenza IsEmergencyWork | Indicatore che segnala se l’ordine di lavoro è un’emergenza. | ||
| Descrizione Attributo booleano calcolato in base alla priorità di manutenzione. Se la priorità è «1» (o corrisponde al codice di emergenza configurato), l’indicatore è impostato su vero. In questo modo è più semplice filtrare i dati e calcolare il KPI «Percentuale di ordini di lavoro di emergenza», senza ricorrere a logiche complesse nella Dashboard. Perché è importante Semplifica i filtri per l’analisi degli interventi reattivi critici. Dove reperirli Calcolato da MaintenancePriority Esempi truefalse | |||
| È una rilavorazione IsRework | Indicatore che segnala se l’ordine ha comportato attività di rilavorazione. | ||
| Descrizione Valore booleano calcolato che identifica la presenza di un ciclo nel processo, ad esempio quando l’attività «Intervento di manutenzione eseguito» si verifica più di una volta o lo stato passa da «Completato tecnicamente» a «In corso». Supporta il KPI «Tasso di rilavorazione della manutenzione» e aiuta a individuare problemi di qualità. Perché è importante Supporta direttamente l’analisi del controllo qualità. Dove reperirli Calcolato dal flusso del processo Esempi truefalse | |||
| Ore di manodopera pianificate PlannedLaborHours | Le ore di manodopera stimate per l’ordine. | ||
| Descrizione Il totale del lavoro pianificato (ARBEI) per le operazioni dell’ordine. Il confronto con la durata effettiva dell’attività consente di valutare l’accuratezza della pianificazione della manutenzione nella Dashboard «Prestazioni di pianificazione e stima». Perché è importante Metrica di base per analizzare l’accuratezza della pianificazione. Dove reperirli Tabella SAP AFKO (somma del lavoro pianificato per operazione) Esempi 4.08.512.0 | |||
Attività di manutenzione degli asset
| Attività | Descrizione | ||
|---|---|---|---|
| Completamento gestionale impostato | Segna la chiusura amministrativa definitiva dell’ordine di lavoro e impedisce ulteriori registrazioni di costi. L’evento viene rilevato dalla modifica dello stato a CLSD (chiuso). | ||
| Perché è importante Rappresenta la conclusione definitiva del ciclo di vita dell’ordine ed è fondamentale per l’accuratezza dei dati e la conformità dei registri. Dove reperirli Tabella JCDS, stato I0046 (CLSD). Acquisizione Registrata quando lo stato passa a CLSD in JCDS Tipo di evento explicit | |||
| Completamento tecnico impostato | Segna la conclusione fisica e tecnica del lavoro di manutenzione. L’evento viene rilevato dalla modifica dello stato a TECO (completato tecnicamente). | ||
| Perché è importante È la tappa finale più importante per l’analisi operativa: indica che l’asset è stato ripristinato e la manutenzione è terminata. Dove reperirli Tabella JCDS, stato I0045 (TECO). Acquisizione Registrata quando lo stato passa a TECO in JCDS Tipo di evento explicit | |||
| Operazione dell’ordine confermata | Rappresenta la registrazione del tempo effettivamente impiegato da un tecnico per una specifica operazione. Registra il lavoro svolto sull’asset. | ||
| Perché è importante Questa attività è la principale fonte di dati per il calcolo del tempo medio di riparazione e dei costi di manodopera. Dove reperirli Tabella AFRU (conferme dell’ordine). Acquisizione Registrata all’esecuzione della transazione IW41 Tipo di evento explicit | |||
| Ordine di manutenzione creato | Segna la generazione dell’oggetto ordine di lavoro di manutenzione nel sistema. Rilevata esplicitamente dal timestamp di creazione della tabella dei dati anagrafici degli ordini. | ||
| Perché è importante È l’evento di riferimento centrale del caso e segna il passaggio dalla richiesta alla pianificazione e all’esecuzione. Dove reperirli Tabella AUFK, campi ERDAT (data) ed ERFZEIT (ora). Acquisizione Registrata all’esecuzione della transazione IW31 Tipo di evento explicit | |||
| Ordine di manutenzione rilasciato | Indica che la pianificazione è completa e che l’ordine è stato rilasciato per l’esecuzione. L’evento viene rilevato monitorando la modifica dello stato a REL nei registri degli stati di sistema. | ||
| Perché è importante Questa tappa separa la fase di pianificazione da quella di esecuzione ed è fondamentale per misurare i tempi di attraversamento della pianificazione e della stima. Dove reperirli Tabella JCDS (documenti di modifica dello stato), stato I0002 (REL). Acquisizione Registrata quando lo stato passa a REL in JCDS Tipo di evento explicit | |||
| Uscita merci registrata | Registra il consumo effettivo di ricambi o materiali imputato all’ordine di lavoro. L’evento viene rilevato dalle intestazioni dei documenti materiale collegate all’ordine. | ||
| Perché è importante Conferma che i ricambi sono disponibili e sono stati prelevati, incidendo direttamente sull’analisi dei tempi di attesa per la disponibilità dei ricambi. Dove reperirli Tabelle MSEG/MKPF, tipo movimento 261 (uscita merci per ordine). Acquisizione Registrata all’esecuzione della transazione MIGO/MB1A Tipo di evento explicit | |||
| Completamento tecnico annullato | Registra la revoca dello stato di completamento tecnico, indicando che l’ordine è stato riaperto. Questo genera un ciclo di rilavorazione nel modello di processo. | ||
| Perché è importante È l’indicatore principale del KPI relativo al tasso di rilavorazione della manutenzione e mette in evidenza chiusure premature o problemi di qualità. Dove reperirli Tabella JCDS, modifica dello stato I0045 (TECO) a inattivo. Acquisizione Registrata quando lo stato TECO viene disattivato Tipo di evento explicit | |||
| Componente materiale aggiunto | Registra l’aggiunta di ricambi o materiali all’elenco dei componenti dell’ordine di lavoro. L’evento viene rilevato dalla creazione di una riga di prenotazione. | ||
| Perché è importante Segna l’inizio del ciclo di approvvigionamento dei ricambi necessari e alimenta la Dashboard sui tempi di approvvigionamento dei ricambi. Dove reperirli Tabella RESB, campo BDTER (data di fabbisogno) o timestamp di creazione. Acquisizione Registrata quando viene aggiunta una riga alla tabella RESB Tipo di evento explicit | |||
| Costi dell’ordine liquidati | Indica che i costi imputati all’ordine sono stati trasferiti all’oggetto di controllo di gestione, ad esempio al centro di costo. L’evento viene rilevato dal documento di controllo di gestione. | ||
| Perché è importante Monitora la chiusura finanziaria e alimenta il KPI sulla durata della liquidazione finanziaria. Dove reperirli Tabella COBK (oggetto CO: intestazione documento), collegata all’ordine. Acquisizione Registrata all’esecuzione della transazione di liquidazione KO88 Tipo di evento explicit | |||
| Lettura di misurazione registrata | Registra l’inserimento di un documento di misurazione, ad esempio la lettura di un contatore o una valutazione delle condizioni. Spesso corrisponde all’evento di ispezione tecnica. | ||
| Perché è importante È essenziale per la manutenzione basata sulle condizioni e per monitorare i tempi di ciclo delle ispezioni tecniche. Dove reperirli Tabella IMRG (documento di misurazione), collegata all’apparecchiatura o alla sede tecnica. Acquisizione Registrata alla creazione del documento di misurazione Tipo di evento explicit | |||
| Notifica di manutenzione creata | Registra la creazione iniziale di una notifica di manutenzione, che spesso dà origine a un ordine di lavoro. Rilevata dal timestamp di creazione della tabella QMEL, questa attività collega la richiesta iniziale all’ordine di esecuzione. | ||
| Perché è importante Questa attività segna l’inizio del processo di manutenzione end-to-end e consente di calcolare i tempi di risposta tra il rilevamento del guasto e la generazione dell’ordine. Dove reperirli Tabella QMEL, campi ERDAT (data di creazione) e MZEIT (ora). Collegata all’ordine tramite QMEL-AUFNR. Acquisizione Registrata alla creazione del record nella tabella QMEL Tipo di evento explicit | |||
| Ordine di lavoro pianificato | Indica la pianificazione specifica delle operazioni in base alla capacità o alla data. L’evento è dedotto dall’assegnazione dello stato Dispatch alle operazioni. | ||
| Perché è importante Misura l’efficienza dell’allocazione delle risorse e alimenta la Dashboard sull’utilizzo e la pianificazione delle risorse. Dove reperirli Tabella JCDS (documenti di modifica dello stato) per le operazioni (tipo oggetto OV), stato I0009 (DSPT). Acquisizione Confrontare il campo dello stato prima e dopo la modifica Tipo di evento inferred | |||
| Priorità di manutenzione modificata | Registra una modifica al livello di priorità dell’ordine di lavoro, ad esempio il passaggio alla priorità di emergenza. L’evento è ricavato dai documenti di modifica associati ai dati anagrafici dell’ordine. | ||
| Perché è importante Il monitoraggio delle variazioni di priorità aiuta a spiegare le deviazioni del processo e alimenta il monitoraggio dell’impatto degli ordini di lavoro di emergenza, individuando le escalation reattive. Dove reperirli Tabelle CDPOS/CDHDR per la classe oggetto AUFTRAG, campo PRIOK. Acquisizione Registrata nei documenti di modifica (CDPOS) Tipo di evento explicit | |||
| Richiesta di acquisto creata | Indica che è stata generata una richiesta di approvvigionamento esterno o di servizi. Collega l’ordine di manutenzione interno alla catena di fornitura esterna. | ||
| Perché è importante È fondamentale per analizzare i ritardi causati dai fornitori esterni o dall’approvvigionamento di materiali non a magazzino. Dove reperirli Tabella EBAN, collegata tramite l’assegnazione contabile a AUFK-AUFNR. Acquisizione Registrata alla creazione del record EBAN Tipo di evento explicit | |||
Guide all’estrazione
Passaggi
Individuare l’interfaccia di origine dei dati: stabilisca come accedere all’interfaccia SQL di SAP S/4HANA. In genere si utilizza SAP HANA Studio, ABAP Development Tools (ADT) in Eclipse oppure una stringa di connessione DBaaS, se il database HANA è esposto al livello di analisi.
Verificare la disponibilità delle viste CDS: controlli che le viste standard Core Data Services (CDS) siano attive nel sistema S/4HANA. Le viste principali necessarie sono I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. Per ricostruire l’intera cronologia degli eventi, occorre inoltre accedere alla tabella della cronologia degli stati di sistema JCDS e alle tabelle dei documenti di modifica (CDHDR/CDPOS), poiché le viste CDS standard mostrano spesso solo lo stato attuale.
Preparare l’ambiente SQL: apra l’editor SQL e verifichi che l’utente disponga delle autorizzazioni SELECT sulle viste SQL DDL, in genere nello schema SAPABAP1 o simile, per gli elementi indicati sopra.
Eseguire la query di estrazione: copi lo script SQL fornito nell’editor. Sostituisca il segnaposto [Your Client Number] con l’ID specifico del client SAP, ad esempio 100. Se applica un filtro per un intervallo di date, aggiorni i filtri EventTimestamp nelle clausole WHERE.
Trasformare i dati: la query gestisce la maggior parte delle trasformazioni, come la conversione dei timestamp e la mappatura dei codici di stato in testo leggibile. Se il sistema di destinazione lo richiede, verifichi che durante l’esportazione la colonna EventTimestamp sia nel formato ISO 8601 (YYYY-MM-DDTHH:MM:SS).
Esportare il risultato: esegua la query ed esporti i risultati in un file CSV o Parquet. Imposti la codifica UTF-8 per gestire correttamente i caratteri speciali nei nomi utente e nelle descrizioni.
Convalidare la mappatura delle colonne: apra un campione del file esportato e verifichi che le colonne MaintenanceWorkOrder, Activity ed EventTimestamp siano compilate. Controlli che la colonna Activity contenga le stringhe specifiche indicate nei requisiti, ad esempio Maintenance Order Created e Goods Issue Posted.
Caricare i dati in ProcessMind: importi in ProcessMind il file convalidato. Mappi la colonna Activity al campo Activity ID, MaintenanceWorkOrder al campo Case ID ed EventTimestamp al campo Timestamp.
Configurazione
- Filtro per client: i sistemi SAP possono avere più client. Applichi sempre un filtro su
MANDToClient(ad esempio, '100') per evitare duplicati o la commistione di dati tra client. - Intervallo di date: si consiglia di filtrare la
CreationDatedell’ordine di manutenzione, limitandola agli ultimi 6-12 mesi. Interrogare l’intera cronologia diJCDS(stati) oCDPOS(documenti di modifica) senza filtri temporali può causare timeout. - Chiave della lingua: per impostazione predefinita, la query usa l’inglese ('E'). Se l’organizzazione utilizza un’altra lingua principale per le descrizioni, modifichi il filtro della lingua.
- Accesso al sistema: è necessario accedere allo schema ABAP Core Data Services o alle tabelle HANA sottostanti. Per analizzare la cronologia degli stati è fondamentale poter consultare le tabelle JCDS e CDHDR, poiché le viste CDS pure si basano spesso su istantanee.
- Tipi di ordine: la query estrae tutti i tipi di ordine. Se desidera analizzare solo specifici scenari di manutenzione, può filtrare
MaintenanceOrderType, ad esempio includendo solo PM01 e PM02.
a Query di esempio sql
/* Activity 1: Maintenance Notification Created */
SELECT
CAST(N.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(N.CreationDate, ' '), N.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
N.MaintenanceOrderType,
N.MaintenancePriority,
N.Equipment AS EquipmentNumber,
N.FunctionalLocation,
N.MaintenancePlant,
N.MaintenancePlannerGroup AS ResponsiblePlannerGroup,
N.MainWorkCenter,
N.MaintenanceNotification AS NotificationNumber,
CAST(NULL AS DATE) AS TargetFinishDate,
N.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceNotification N
JOIN I_MaintenanceOrder O ON N.MaintenanceOrder = O.MaintenanceOrder
WHERE N.MaintenanceOrder IS NOT NULL AND N.MaintenanceOrder <> ''
UNION ALL
/* Activity 2: Maintenance Order Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Created' AS Activity,
O.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrder O
UNION ALL
/* Activity 3: Maintenance Priority Changed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Priority Changed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(H.UDATE, ' '), H.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
H.USERNAME AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM CDHDR H
JOIN CDPOS P ON H.OBJECTCLAS = P.OBJECTCLAS AND H.OBJECTID = P.OBJECTID AND H.CHANGENR = P.CHANGENR
JOIN I_MaintenanceOrder O ON O.MaintenanceOrder = H.OBJECTID
WHERE H.OBJECTCLAS = 'ORDER'
AND P.TABNAME = 'AFKO'
AND P.FNAME = 'PRIOK'
UNION ALL
/* Activity 4: Maintenance Order Released */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Maintenance Order Released' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0002' /* REL Status */
AND J.INACT = ' '
UNION ALL
/* Activity 5: Material Component Added */
SELECT
CAST(C.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Material Component Added' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(C.CreationDate, ' '), COALESCE(C.CreationTime, '000000')), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
O.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintenanceOrderComponent C
JOIN I_MaintenanceOrder O ON C.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 6: Purchase Requisition Created */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Purchase Requisition Created' AS Activity,
PR.CreationDate AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
PR.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_PurchasingDocumentItem PR
JOIN I_MaintenanceOrder O ON PR.ServiceMaintenanceOrder = O.MaintenanceOrder
WHERE PR.PurchasingDocumentCategory = 'B' /* Requisition */
UNION ALL
/* Activity 7: Goods Issue Posted */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Goods Issue Posted' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(MD.CreationDate, ' '), MD.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
MD.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaterialDocumentItem MD
JOIN I_MaintenanceOrder O ON MD.MaintenanceOrder = O.MaintenanceOrder
WHERE MD.GoodsMovementType = '261'
UNION ALL
/* Activity 8: Work Order Scheduled (Operation Dispatched) */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Work Order Scheduled' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrderOperation OP ON J.OBJNR = OP.MaintenanceOrderOperationInternalID
JOIN I_MaintenanceOrder O ON OP.MaintenanceOrder = O.MaintenanceOrder
WHERE J.STAT = 'I0019' /* DSP Dispatched Status */
AND J.INACT = ' '
UNION ALL
/* Activity 9: Order Operation Confirmed */
SELECT
CAST(CNF.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Operation Confirmed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(CNF.CreationDate, ' '), CNF.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
CNF.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MaintOrderConfirmation CNF
JOIN I_MaintenanceOrder O ON CNF.MaintenanceOrder = O.MaintenanceOrder
WHERE CNF.IsReversed = ' '
UNION ALL
/* Activity 10: Measurement Reading Recorded */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Measurement Reading Recorded' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(M.CreationDate, ' '), M.CreationTime), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
M.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_MeasurementDocument M
JOIN I_MaintenanceOrder O ON M.MaintenanceOrder = O.MaintenanceOrder
UNION ALL
/* Activity 11: Technical Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = ' '
UNION ALL
/* Activity 12: Technical Completion Reversed */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Technical Completion Reversed' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0045' /* TECO Status */
AND J.INACT = 'X' /* Inactive indicates it was removed/reversed */
AND J.CHIND = 'U' /* Update indicator */
UNION ALL
/* Activity 13: Order Cost Settled */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Order Cost Settled' AS Activity,
JE.CreationDateTime AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
JE.CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM I_ActualPlanJrnlEntryItem JE
JOIN I_MaintenanceOrder O ON JE.OrderID = O.MaintenanceOrder
WHERE JE.BusinessTransactionType = 'KOAO' /* Settlement */
UNION ALL
/* Activity 14: Business Completion Set */
SELECT
CAST(O.MaintenanceOrder AS VARCHAR(20)) AS MaintenanceWorkOrder,
'Business Completion Set' AS Activity,
TO_TIMESTAMP(CONCAT(CONCAT(J.UDATE, ' '), J.UTIME), 'YYYYMMDD HH24MISS') AS EventTimestamp,
'SAP S/4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
O.MaintenanceOrderType,
O.MaintenancePriority,
O.Equipment AS EquipmentNumber,
O.FunctionalLocation,
O.MaintenancePlant,
O.ResponsiblePlannerGroup,
O.MainWorkCenter,
O.MaintenanceNotification AS NotificationNumber,
O.BasicEndDateTime AS TargetFinishDate,
J.USNAM AS CreatedByUser,
O.SystemStatusName AS SystemStatus
FROM JCDS J
JOIN I_MaintenanceOrder O ON J.OBJNR = CONCAT('OR', O.MaintenanceOrder)
WHERE J.STAT = 'I0046' /* CLSD Status */
AND J.INACT = ' ' Passaggi
- Verifichi che sia disponibile l’accesso diretto in lettura alle tabelle AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU e IMRG, nonché alle tabelle applicabili dei documenti di modifica e di controlling. Controlli i nomi fisici esatti e la mappatura dei campi nel database SAP, poiché la disponibilità dei campi e la struttura delle tabelle replicate variano in base alla distribuzione.
- Configuri la connessione di estrazione, le credenziali, la data iniziale e finale dell’estrazione e gli eventuali filtri specifici per l’azienda. Per la convalida iniziale utilizzi un periodo mobile da tre a sei mesi; lo estenda dopo aver verificato prestazioni e completezza.
- Estragga gli attributi dell’intestazione dell’ordine da AUFK, gli attributi delle operazioni da AFVC e i record degli stati da JEST. Colleghi i record relativi agli ordini tramite il numero d’ordine utilizzato nello schema SAP. In molte implementazioni SAP, JEST contiene solo gli stati attuali; per recuperare i timestamp storici degli stati occorre quindi una fonte con la cronologia degli stati o i documenti di modifica. Se JEST non conserva la cronologia delle modifiche di stato, configuri [Your status history table] e i relativi campi timestamp.
- Estragga la creazione delle notifiche da QMEL, la creazione dei componenti da RESB, la creazione delle richieste d’acquisto da EBAN, le informazioni sui prelievi merci da MSEG e MKPF, le conferme da AFRU, le letture delle misurazioni da IMRG e i record di liquidazione del controlling da [Your controlling document table]. Estragga le modifiche di priorità da [Your order change document table] e [Your change document item table]. Queste fonti sono necessarie perché AUFK, AFVC e JEST, da sole, non forniscono tutte le 14 attività richieste.
- Normalizzi tutti i timestamp di origine in un unico fuso orario e in un solo tipo di dato timestamp. Converta i campi data e ora SAP o i campi timestamp del database in EventTimestamp, mantenendo la precisione disponibile nel sistema. Applichi l’intervallo di estrazione configurato a EventTimestamp, non solo alla data di creazione dell’ordine.
- Crei una riga di evento per ogni occorrenza nelle fonti. Non faccia affidamento su ProcessMind per dedurre gli eventi. Assegni il valore Activity esatto specificato nella query, compili MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate e gli attributi consigliati disponibili, mantenendo gli identificativi di origine utili per individuare eventuali duplicati.
- Elimini i duplicati solo quando gli eventi di origine sono identici e dispongono di chiavi di origine stabili. Non accorpi modifiche di stato, conferme, movimenti di materiale, letture delle misurazioni o documenti di liquidazione distinti, avvenuti in momenti diversi. Se più record di origine rappresentano un unico evento aziendale, documenti nella specifica di estrazione quale fonte ha la precedenza.
- Verifichi che tutti i 14 valori Activity siano presenti come righe esplicite, che ogni riga abbia un identificativo del caso e un timestamp e che i timestamp rientrino nel periodo di estrazione richiesto. Confronti i conteggi con i report SAP o con i conteggi delle tabelle di origine applicando gli stessi filtri.
- Esporti il risultato in un file CSV UTF-8 o in un altro formato di Event Log supportato da ProcessMind. Utilizzi una riga per evento, includa le colonne obbligatorie con i nomi configurati esatti, mantenga i timestamp ISO 8601 se supportati e carichi il file in ProcessMind oppure configuri la connessione al database. Imposti MaintenanceWorkOrder come identificativo del caso, Activity come colonna delle attività ed EventTimestamp come colonna dei timestamp.
Configurazione
- Tabelle di origine e mappature: AUFK fornisce i dati dell’intestazione dell’ordine, AFVC i dati delle operazioni e JEST i dati degli stati di sistema. Per generare tutte le 14 attività sono necessarie anche QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, le fonti dei documenti di modifica e quelle dei documenti di controlling. Prima dell’esecuzione, verifichi i nomi esatti dei campi nel database SAP.
- Colonne obbligatorie: ogni riga di evento deve contenere MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem e LastDataUpdate.
- Colonne consigliate: compili MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser e SystemStatus, quando disponibili.
- Intervallo di date: inizi con un periodo da tre a sei mesi. Utilizzi un limite iniziale incluso e un limite finale escluso per evitare duplicati tra esecuzioni incrementali. Per i caricamenti storici, suddivida l’estrazione per mese o secondo un altro intervallo supportato dal database.
- Filtri: configuri [Company Code filter], [Order Type filter], [Maintenance Plant filter], [Notification Type filter] e [Document Type filter] in base all’ambito dei report. Non applichi filtri che escludano ordini privi di notifiche, operazioni, componenti, richieste d’acquisto, conferme, misurazioni o documenti di liquidazione.
- Cronologia degli stati: JEST contiene comunemente le assegnazioni degli stati, ma per recuperare le modifiche storiche potrebbe essere necessario utilizzare [Your status history table] o i documenti di modifica. Configuri la fonte che contiene i timestamp delle modifiche di stato e la cronologia delle transizioni.
- Cronologia delle priorità: per recuperare le modifiche di priorità sono necessari [Your order change document table] e [Your change document item table], con l’identificativo dell’oggetto pertinente, il nome del campo, il valore precedente e quello nuovo e il timestamp della modifica.
- Valore del sistema di origine: sostituisca [Your SAP system identifier] con il nome stabile del sistema di origine utilizzato dall’organizzazione.
- Ultimo aggiornamento dei dati: sostituisca [Your extraction timestamp] con il timestamp generato all’inizio o alla fine dell’esecuzione di estrazione e utilizzi lo stesso valore per tutte le righe di quell’esecuzione.
- Prestazioni: indicizzi o partizioni le colonne usate per join e filtri, se consentito; limiti l’intervallo di estrazione; selezioni solo le colonne necessarie; elabori i periodi più lunghi in batch e materializzi le estrazioni intermedie delle fonti se i join diretti tra schemi sono lenti.
- Prerequisiti: connettività al database, autorizzazioni di lettura per tutte le tabelle di origine configurate, accesso ai dati pertinenti di Plant Maintenance, Materials Management, Controlling e misurazione, nonché approvazione per estrarre i dati operativi. Verifichi eventuali vincoli di replica o licenza della piattaforma di database.
a Query di esempio sql
WITH
params AS (
SELECT
CAST('[Start date and time]' AS TIMESTAMP) AS start_ts,
CAST('[End date and time]' AS TIMESTAMP) AS end_ts,
CAST('[Your SAP system identifier]' AS VARCHAR(100)) AS source_system,
CAST('[Your extraction timestamp]' AS TIMESTAMP) AS last_data_update
),
order_base AS (
SELECT
a.[Order number field] AS MaintenanceWorkOrder,
a.[Order type field] AS MaintenanceOrderType,
a.[Priority field] AS MaintenancePriority,
a.[Equipment field] AS EquipmentNumber,
a.[Functional location field] AS FunctionalLocation,
a.[Maintenance plant field] AS MaintenancePlant,
a.[Planner group field] AS ResponsiblePlannerGroup,
a.[Main work center field] AS MainWorkCenter,
a.[Notification number field] AS NotificationNumber,
a.[Target finish date field] AS TargetFinishDate,
a.[Created by field] AS CreatedByUser,
a.[System status field] AS SystemStatus,
a.[Creation date field] AS OrderCreationDate,
a.[Creation time field] AS OrderCreationTime
FROM AUFK a
WHERE a.[Order number field] IS NOT NULL
AND a.[Company code field] = '[Your company code filter]'
),
base_events AS (
SELECT
o.MaintenanceWorkOrder,
'Maintenance Notification Created' AS Activity,
CAST(q.[Notification creation timestamp field] AS TIMESTAMP) AS EventTimestamp,
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN QMEL q ON q.[Notification number field] = o.NotificationNumber
CROSS JOIN params p
WHERE q.[Notification creation timestamp field] >= p.start_ts
AND q.[Notification creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Order Created',
CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o CROSS JOIN params p
WHERE CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP) >= p.start_ts
AND CAST(o.OrderCreationDate || ' ' || o.OrderCreationTime AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Priority Changed',
CAST(c.[Change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, c.[New priority value field], o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN [Your order change document table] h ON h.[Order object identifier field] = o.MaintenanceWorkOrder
JOIN [Your change document item table] c ON c.[Change document number field] = h.[Change document number field]
CROSS JOIN params p
WHERE c.[Changed field name field] = '[Your priority field name]'
AND CAST(c.[Change timestamp field] AS TIMESTAMP) >= p.start_ts
AND CAST(c.[Change timestamp field] AS TIMESTAMP) < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Maintenance Order Released',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'REL'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'REL'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Material Component Added',
CAST(r.[Reservation creation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN RESB r ON r.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE r.[Reservation line creation timestamp field] >= p.start_ts
AND r.[Reservation line creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Purchase Requisition Created',
CAST(e.[Purchase requisition creation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN EBAN e ON e.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE e.[Purchase requisition creation timestamp field] >= p.start_ts
AND e.[Purchase requisition creation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Goods Issue Posted',
CAST(m.[Material document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN MSEG m ON m.[Order number field] = o.MaintenanceWorkOrder
JOIN MKPF k ON k.[Material document number field] = m.[Material document number field]
AND k.[Material document year field] = m.[Material document year field]
CROSS JOIN params p
WHERE m.[Movement type field] IN ('201', '261')
AND k.[Material document timestamp field] >= p.start_ts
AND k.[Material document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Work Order Scheduled',
CAST(v.[Dispatch status timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN AFVC v ON v.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE v.[Dispatch status field] = '[Your dispatch status value]'
AND v.[Dispatch status timestamp field] >= p.start_ts
AND v.[Dispatch status timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Order Operation Confirmed',
CAST(f.[Confirmation timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN AFRU f ON f.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE f.[Confirmation timestamp field] >= p.start_ts
AND f.[Confirmation timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Measurement Reading Recorded',
CAST(i.[Measurement document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN IMRG i ON i.[Equipment field] = o.EquipmentNumber
CROSS JOIN params p
WHERE i.[Measurement document timestamp field] >= p.start_ts
AND i.[Measurement document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Technical Completion Set',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'TECO'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'TECO'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Technical Completion Reversed',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, s.[Resulting system status field]
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Previous status code field] = 'TECO'
AND s.[Status code field] <> 'TECO'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Order Cost Settled',
CAST(c.[Controlling document timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, o.SystemStatus
FROM order_base o
JOIN [Your controlling document table] c ON c.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE c.[Controlling document timestamp field] >= p.start_ts
AND c.[Controlling document timestamp field] < p.end_ts
UNION ALL
SELECT o.MaintenanceWorkOrder, 'Business Completion Set',
CAST(s.[Status change timestamp field] AS TIMESTAMP),
o.MaintenanceOrderType, o.MaintenancePriority, o.EquipmentNumber,
o.FunctionalLocation, o.MaintenancePlant, o.ResponsiblePlannerGroup,
o.MainWorkCenter, o.NotificationNumber, o.TargetFinishDate,
o.CreatedByUser, 'CLSD'
FROM order_base o
JOIN [Your status history table] s ON s.[Order number field] = o.MaintenanceWorkOrder
CROSS JOIN params p
WHERE s.[Status code field] = 'CLSD'
AND s.[Status change timestamp field] >= p.start_ts
AND s.[Status change timestamp field] < p.end_ts
)
SELECT
e.MaintenanceWorkOrder,
e.Activity,
e.EventTimestamp,
p.source_system AS SourceSystem,
p.last_data_update AS LastDataUpdate,
e.MaintenanceOrderType,
e.MaintenancePriority,
e.EquipmentNumber,
e.FunctionalLocation,
e.MaintenancePlant,
e.ResponsiblePlannerGroup,
e.MainWorkCenter,
e.NotificationNumber,
e.TargetFinishDate,
e.CreatedByUser,
e.SystemStatus
FROM base_events e
CROSS JOIN params p
WHERE e.MaintenanceWorkOrder IS NOT NULL
AND e.EventTimestamp IS NOT NULL
AND e.EventTimestamp >= p.start_ts
AND e.EventTimestamp < p.end_ts
ORDER BY e.MaintenanceWorkOrder, e.EventTimestamp, e.Activity; È pronto a iniziare?
Utilizzi queste risorse per iniziare a mappare i flussi di lavoro di manutenzione e individuare opportunità di risparmio. La nostra struttura Le consente di disporre dei dati nel formato corretto per ottenere piena visibilità sulle attività operative.
Elimini oggi i colli di bottiglia nella manutenzione degli asset in SAP
Riduca del 30% il tempo di ciclo della manutenzione, a partire da oggi
Non è richiesta la carta di credito. Configurazione in 5 minuti