Jouw datatemplate voor assetonderhoud
Jouw datatemplate voor assetonderhoud
- Aanbevolen attributen om te verzamelen
- Belangrijke onderhoudsactiviteiten om te volgen
- Technische extractierichtlijnen voor SAP PM
Attributen voor bedrijfsmiddelenonderhoud
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteitsnaam Activity | De specifieke taak of statuswijziging die heeft plaatsgevonden. | ||
| Beschrijving Vertegenwoordigt de stap die in het onderhoudsproces is uitgevoerd, zoals 'Maintenance Order Created', 'Goods Issue Posted' of 'Order Operation Confirmed'. Deze stappen worden meestal afgeleid uit de statusbeheertabellen (JEST) voor statuswijzigingen of transactietabellen (AFRU voor bevestigingen, MKPF voor materiaalbewegingen). Dit attribuut bepaalt de knooppunten in de procesmap. Waarom dit belangrijk is Dit bepaalt het 'wat' van het proces en is essentieel voor het ontdekken van de procesflow en varianten. Waar je het vindt Afgeleid van JEST (status), AFRU (bevestigingen), QMEL (meldingen) Voorbeelden Onderhoudsorder aangemaaktOrder vrijgegevenTechnisch afgerond | |||
| Bronsysteem SourceSystem | Het systeem waaruit de data afkomstig is. | ||
| Beschrijving Identificeert de specifieke SAP-client of -instance, bijvoorbeeld 'SAP_PM_PROD'. In een omgeving met meerdere ERP-systemen helpt dit attribuut records van elkaar te onderscheiden die mogelijk dezelfde ID hebben, maar bij verschillende juridische entiteiten of systeemomgevingen horen. Waarom dit belangrijk is Zorgt voor unieke data en herleidbaarheid in omgevingen met meerdere systemen. Waar je het vindt Systeemconfiguratie / extractielog Voorbeelden SAP_ECC_P01SAP_S4H_100 | |||
| Laatste data-update LastDataUpdate | Timestamp van de meest recente data-extractie. | ||
| Beschrijving Geeft aan wanneer de data voor het laatst is vernieuwd in het process mining-datamodel. Zo kunnen analisten beoordelen hoe actueel de inzichten zijn en de actualiteit van de data controleren voor dashboards die de realtime achterstand of naleving van SLA's volgen. Waarom dit belangrijk is Belangrijk voor datagovernance en het vertrouwen in de dashboards. Waar je het vindt ETL-timestamp Voorbeelden 2023-11-01T12:00:00Z | |||
| Onderhoudswerkorder MaintenanceWorkOrder | De unieke identificatie voor de onderhoudswerkorder. | ||
| Beschrijving De onderhoudswerkorder is het centrale document in SAP Plant Maintenance (tabel AUFK, veld AUFNR). Het document koppelt de onderhoudsbehoefte (Notification) aan uitvoeringsbronnen, materialen en kosten. In process mining dient dit als de Case ID, waarmee je de volledige levenscyclus van een onderhoudstaak kunt reconstrueren, van aanmaak tot technische en bedrijfsmatige voltooiing. Waarom dit belangrijk is Dit is de unieke sleutel die alle activiteiten, kosten en timestamps aan elkaar koppelt, zodat je de procesflow kunt visualiseren. Waar je het vindt SAP-tabel AUFK, veld AUFNR Voorbeelden 00004001234540012345000040098765 | |||
| Timestamp van gebeurtenis EventTimestamp | De exacte datum en tijd waarop de activiteit plaatsvond. | ||
| Beschrijving Legt het exacte moment vast waarop een gebeurtenis plaatsvond. Bij statuswijzigingen komt dit uit het tijdstip van de systeemstatusupdate; bij bewerkingen is het de bevestigingstijd. Nauwkeurige timestamps zijn belangrijk voor het berekenen van doorlooptijden en het identificeren van knelpunten tussen processtappen zoals 'Planning' en 'Execution'. Waarom dit belangrijk is Nodig om gebeurtenissen in de juiste volgorde te zetten en alle KPI's op basis van doorlooptijd te berekenen. Waar je het vindt JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Voorbeelden 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Aangemaakt door gebruiker CreatedByUser | De gebruikersnaam van de persoon die de order heeft aangemaakt. | ||
| Beschrijving Identificeert de gebruiker (ERNAM) die verantwoordelijk is voor het starten van de werkorder. Dit wordt in het generieke model gekoppeld aan 'User'. Hiermee kun je handmatige en geautomatiseerde aanmaak analyseren en de activiteit 'Maintenance Order Created' controleren. Waarom dit belangrijk is Maakt analyse en controle van gebruikersgedrag mogelijk. Waar je het vindt SAP-tabel AUFK, veld ERNAM Voorbeelden JSMITHBSERVICEDDAVIS | |||
| Equipmentnummer EquipmentNumber | Identificatie van de specifieke fysieke asset die wordt onderhouden. | ||
| Beschrijving Het equipmentnummer (EQUNR) identificeert de afzonderlijke machine of asset. Door data op dit veld te groeperen, kunnen analisten het dashboard 'Asset Maintenance Cost and Throughput' berekenen en apparatuur identificeren die vaak en duur moet worden gerepareerd. Dit ondersteunt analyse van onderhoud op basis van betrouwbaarheid. Waarom dit belangrijk is Koppelt procesprestaties aan specifieke fysieke assets. Waar je het vindt SAP-tabel AUFK, veld EQUNR Voorbeelden 10004567PUMP-001HVAC-202 | |||
| Functionele locatie FunctionalLocation | De hiërarchische locatie waar de asset is geïnstalleerd. | ||
| Beschrijving Vertegenwoordigt de plaats in de technische structuur waar de onderhoudstaak wordt uitgevoerd (TPLNR). In tegenstelling tot Equipment, dat kan worden verplaatst, is de Functional Location statisch. Dit attribuut ondersteunt het dashboard 'Technical Inspection Cycle Times' door prestatievergelijkingen tussen verschillende delen van de fabriek mogelijk te maken, bijvoorbeeld tussen de boiler room en de verpakkingslijn. Waarom dit belangrijk is Maakt ruimtelijke en hiërarchische analyse van onderhoudsprestaties mogelijk. Waar je het vindt SAP-tabel IFLOT, veld TPLNR (of via AUFK-TPLNR) Voorbeelden PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Geplande einddatum TargetFinishDate | De geplande voltooiingsdatum voor het onderhoudswerk. | ||
| Beschrijving Deze datum, meestal de Basic Finish Date (GLTRP), is de deadline voor de werkorder. De datum wordt vergeleken met de werkelijke voltooiingstimestamp om de KPI 'SLA Adherence Rate' te berekenen. Dit is de basis om te bepalen of een werkorder op tijd of te laat is. Waarom dit belangrijk is Het referentiepunt voor alle berekeningen van On-Time Delivery (OTD). Waar je het vindt SAP-tabel AFKO, veld GLTRP Voorbeelden 2023-12-012023-12-15 | |||
| Hoofdwerkplek MainWorkCenter | De primaire werkplek of ploeg die aan de uitvoering van de order is toegewezen. | ||
| Beschrijving De hoofdwerkplek (VAPLZ) vertegenwoordigt de groep technici of machines die het fysieke werk uitvoert. Dit attribuut wordt gekoppeld aan 'Team' en is belangrijk voor het analyseren van de uitvoeringsefficiëntie, zoals Mean Time to Repair per ploeg. Het helpt onderscheid te maken tussen interne arbeid en externe aannemers. Waarom dit belangrijk is Maakt prestatieanalyse op bronniveau mogelijk. Waar je het vindt SAP-tabel AFKO, veld VAPLZ (of AUFK-VAPLZ, afhankelijk van de configuratie) Voorbeelden MECH_01ELEC_TEAMEXT_CONT | |||
| Meldingsnummer NotificationNumber | De onderhoudsmelding die deze order heeft gestart. | ||
| Beschrijving Het meldingsnummer (QMNUM) koppelt de werkorder terug aan de oorspronkelijke aanvraag (Notification). Deze koppeling is nodig om de volledige doorlooptijd te berekenen, van 'Maintenance Request Received' tot voltooiing. Zonder deze koppeling mist de analyse de eerste fase van detectie en melding in de onderhoudslevenscyclus. Waarom dit belangrijk is Koppelt de uitvoeringsfase terug aan de aanvraag- en detectiefase. Waar je het vindt SAP-tabel AUFK, veld QMNUM Voorbeelden 1000050010000501 | |||
| Onderhoudsbedrijf MaintenancePlant | Het logistieke bedrijf dat verantwoordelijk is voor het onderhoud. | ||
| Beschrijving De Plant (WERKS) is de belangrijkste organisatorische eenheid binnen de logistiek. Hiermee worden data per fysieke locatie gescheiden. Dit attribuut is belangrijk voor het vergelijken van prestaties tussen locaties en wordt gekoppeld aan 'BusinessUnit' voor filtering op organisatieniveau in dashboards. Waarom dit belangrijk is Belangrijkste organisatorische filter voor het vergelijken van locaties. Waar je het vindt SAP-tabel AUFK, veld WERKS Voorbeelden 100020003000 | |||
| Onderhoudsprioriteit MaintenancePriority | Het urgentieniveau dat aan de werkorder is toegewezen. | ||
| Beschrijving Geeft de prioriteit (PRIOK) van de onderhoudstaak aan, zoals '1-Very High', '2-High' of '3-Medium'. Dit veld is de directe input voor de KPI 'Emergency Work Order Ratio'. Door de flow per prioriteit te analyseren, zie je of orders met een hoge prioriteit daadwerkelijk sneller door het systeem gaan dan regulier werk. Waarom dit belangrijk is Belangrijke factor voor SLA-analyse en het identificeren van spoedwerk. Waar je het vindt SAP-tabel AFKO, veld PRIOK (of AUFK via view) Voorbeelden 1-Noodgeval2-Hoog3-Gemiddeld4-Laag | |||
| Plannergroep ResponsiblePlannerGroup | De groep planners die verantwoordelijk is voor het verwerken van de order. | ||
| Beschrijving De plannergroep (INGRP) identificeert het specifieke team of de afdeling die verantwoordelijk is voor het plannen van het onderhoudswerk. Deze wordt gekoppeld aan 'Department' en is belangrijk voor het dashboard 'Resource Utilization and Scheduling', waarmee je ziet welke planningsteams knelpunten veroorzaken in de voorbereidingsfase. Waarom dit belangrijk is Identificeert het administratieve team dat eigenaar is van het planningsproces. Waar je het vindt SAP-tabel AUFK, veld INGRP Voorbeelden M01ELEMEC | |||
| Systeemstatus SystemStatus | De huidige technische status van de order, bijvoorbeeld REL of TECO. | ||
| Beschrijving Een samengevoegde tekenreeks of lijst met actieve systeemstatussen uit JEST die momenteel op de order van toepassing zijn. Veelvoorkomende waarden zijn CRTD (Created), REL (Released), TECO (Technically Completed) en CLSD (Closed). Hiermee kun je open en gesloten cases filteren in de 'Backlog and Work In Progress Monitor'. Waarom dit belangrijk is De belangrijkste indicator van de fase in de levenscyclus van de order. Waar je het vindt SAP-functiemodule STATUS_TEXT_EDIT of tabel JEST Voorbeelden REL CNFTECOCRTD MACM | |||
| Type onderhoudsorder MaintenanceOrderType | Categoriseert de werkorder, bijvoorbeeld Preventive of Corrective. | ||
| Beschrijving Het ordertype (AUART) in SAP PM onderscheidt de aard van het onderhoudswerk. Veelvoorkomende typen zijn PM01 (Corrective), PM02 (Preventive) en PM03 (Refurbishment). Dit attribuut is belangrijk voor de 'Emergency Work Order Impact Monitor' en voor het segmenteren van procesvarianten, omdat preventieve workflows sterk verschillen van reactieve workflows. Waarom dit belangrijk is Belangrijk voor het segmenteren van analyses naar gepland en ongepland werk. Waar je het vindt SAP-tabel AUFK, veld AUART Voorbeelden PM01PM02PM03 | |||
| Geplande arbeidsuren PlannedLaborHours | Het geschatte aantal arbeidsuren voor de order. | ||
| Beschrijving Het totale geplande werk (ARBEI) uit de orderbewerkingen. Door dit te vergelijken met de werkelijke activiteitsduur kun je in het dashboard 'Planning and Estimation Performance' de nauwkeurigheid van de onderhoudsplanning beoordelen. Waarom dit belangrijk is Basismaatstaf voor analyse van planningsnauwkeurigheid. Waar je het vindt SAP-tabel AFKO (som van het geplande werk van bewerkingen) Voorbeelden 4.08.512.0 | |||
| Is herstelwerk IsRework | Indicator die aangeeft of de order herstelwerkzaamheden bevatte. | ||
| Beschrijving Een berekende boolean die aangeeft of er een lus in het proces is opgetreden. Dit is bijvoorbeeld het geval als de activiteit 'Maintenance Task Executed' meer dan één keer plaatsvond of als de status terugging van 'Technically Completed' naar 'In Process'. Dit ondersteunt de KPI 'Maintenance Rework Rate' en helpt kwaliteitsproblemen te vinden. Waarom dit belangrijk is Ondersteunt analyse van kwaliteitscontrole rechtstreeks. Waar je het vindt Berekend uit de procesflow Voorbeelden truefalse | |||
| Is noodwerk IsEmergencyWork | Indicator die aangeeft of de werkorder een noodgeval betreft. | ||
| Beschrijving Een berekend boolean-attribuut op basis van de onderhoudsprioriteit. Als de prioriteit '1' is, of de specifieke code voor noodwerk in de configuratie, is deze indicator waar. Zo kun je de KPI 'Emergency Work Order Ratio' eenvoudig filteren en opbouwen zonder complexe logica in de dashboardlaag. Waarom dit belangrijk is Vereenvoudigt het filteren voor analyses van kritieke reactieve onderhoudswerkzaamheden. Waar je het vindt Berekend uit MaintenancePriority Voorbeelden truefalse | |||
| Totale werkelijke kosten TotalActualCost | De totale werkelijke kosten die op de werkorder zijn geboekt. | ||
| Beschrijving Geaggregeerde kosten voor arbeid, materialen en diensten uit tabel PMCO. Dit attribuut ondersteunt het dashboard 'Asset Maintenance Cost and Throughput', waarmee managers de financiële impact van onderhoudsactiviteiten kunnen zien. Het is belangrijk om te bepalen of repareren voordeliger is dan vervangen. Waarom dit belangrijk is Voegt de financiële dimensie toe aan de operationele procesdata. Waar je het vindt SAP-tabel PMCO (som van waardetype 04 - Actual) Voorbeelden 150.002500.500.00 | |||
Activiteiten voor bedrijfsmiddelenonderhoud
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Bedrijfsmatige voltooiing ingesteld | Markeert de definitieve administratieve afsluiting van de werkorder, waardoor verdere kostenboekingen worden voorkomen. Dit wordt vastgelegd via de statuswijziging naar CLSD (Closed). | ||
| Waarom dit belangrijk is Vertegenwoordigt het absolute einde van de levenscyclus van de order en is belangrijk voor data-accuraatheid en compliance van records. Waar je het vindt Tabel JCDS, status I0046 (CLSD). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar CLSD Eventtype explicit | |||
| Goederenafgifte geboekt | Legt het fysieke verbruik van reserveonderdelen of materialen voor de werkorder vast. De activiteit wordt afgeleid van materiaaldocumentkoppen die aan de order zijn gekoppeld. | ||
| Waarom dit belangrijk is Bevestigt dat onderdelen beschikbaar zijn en zijn verzameld. Dit heeft direct invloed op de analyse van de wachttijd op beschikbaarheid van onderdelen. Waar je het vindt Tabel MSEG/MKPF, bewegingstype 261 (goederenafgifte voor order). Vastleggen Vastgelegd wanneer transactie MIGO/MB1A wordt uitgevoerd Eventtype explicit | |||
| Onderhoudsorder aangemaakt | Markeert het aanmaken van het onderhoudswerkorderobject in het systeem. De activiteit wordt expliciet vastgelegd via de aanmaaktimestamp in de tabel met stamgegevens van orders. | ||
| Waarom dit belangrijk is Dit is het centrale ankerpunt van de case. Het markeert de overgang van aanvraag naar planning en uitvoering. Waar je het vindt Tabel AUFK, velden ERDAT (datum) en ERFZEIT (tijd). Vastleggen Vastgelegd wanneer transactie IW31 wordt uitgevoerd Eventtype explicit | |||
| Onderhoudsorder vrijgegeven | Geeft aan dat de planning is afgerond en de order is vrijgegeven voor uitvoering. De activiteit wordt vastgelegd door de statuswijziging naar REL in de systeemstatuslogs te volgen. | ||
| Waarom dit belangrijk is Deze mijlpaal scheidt de planningsfase van de uitvoeringsfase. Dat is belangrijk voor het meten van de doorlooptijd van planning en calculatie. Waar je het vindt Tabel JCDS (statuswijzigingsdocumenten), status I0002 (REL). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar REL Eventtype explicit | |||
| Orderbewerking bevestigd | Vertegenwoordigt de registratie van de werkelijke tijd die een technicus aan een specifieke bewerking heeft besteed. Hiermee wordt het daadwerkelijke uitvoeringswerk aan de asset vastgelegd. | ||
| Waarom dit belangrijk is Deze activiteit is de belangrijkste databron voor de berekening van Mean Time to Repair en arbeidskosten. Waar je het vindt Tabel AFRU (orderbevestigingen). Vastleggen Vastgelegd wanneer transactie IW41 wordt uitgevoerd Eventtype explicit | |||
| Technische voltooiing ingesteld | Markeert dat het onderhoudswerk fysiek en technisch is afgerond. Dit wordt vastgelegd via de statuswijziging naar TECO (Technically Completed). | ||
| Waarom dit belangrijk is Dit is het belangrijkste eindpunt voor operationele analyse. Het geeft aan dat de asset is hersteld en het onderhoud is afgerond. Waar je het vindt Tabel JCDS, status I0045 (TECO). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar TECO Eventtype explicit | |||
| Inkoopaanvraag aangemaakt | Geeft aan dat een aanvraag voor externe inkoop of diensten is aangemaakt. Hiermee wordt de interne onderhoudsorder gekoppeld aan de externe toeleveringsketen. | ||
| Waarom dit belangrijk is Belangrijk voor het analyseren van vertragingen door externe leveranciers of de inkoop van niet-voorraadartikelen. Waar je het vindt Tabel EBAN, gekoppeld via Account Assignment aan AUFK-AUFNR. Vastleggen Vastgelegd wanneer een EBAN-record wordt aangemaakt Eventtype explicit | |||
| Materiaalcomponent toegevoegd | Legt vast dat reserveonderdelen of materialen aan de componentenlijst van de werkorder zijn toegevoegd. De activiteit wordt afgeleid van het aanmaken van een reserveringsregel. | ||
| Waarom dit belangrijk is Markeert het begin van de inkoopcyclus voor benodigde onderdelen en ondersteunt het dashboard voor doorlooptijden van de inkoop van reserveonderdelen. Waar je het vindt Tabel RESB, veld BDTER (behoeftedatum) of aanmaaktimestamp. Vastleggen Vastgelegd wanneer een regelitem aan RESB wordt toegevoegd Eventtype explicit | |||
| Meetwaarde geregistreerd | Legt het invoeren van een meetdocument vast, zoals een tellerstand of conditiebeoordeling. Dit dient vaak als de gebeurtenis Technical Inspection. | ||
| Waarom dit belangrijk is Belangrijk voor Condition Based Maintenance en het volgen van de doorlooptijden van de Technical Inspection Cycle. Waar je het vindt Tabel IMRG (meetdocument), gekoppeld aan Equipment of Functional Location. Vastleggen Vastgelegd wanneer een meetdocument wordt aangemaakt Eventtype explicit | |||
| Onderhoudsmelding aangemaakt | Legt het moment vast waarop een onderhoudsmelding voor het eerst is aangemaakt. Dit is vaak de aanleiding voor een werkorder. De activiteit wordt vastgelegd via de aanmaaktimestamp in tabel QMEL en koppelt de oorspronkelijke aanvraag aan de uitvoeringsorder. | ||
| Waarom dit belangrijk is Deze activiteit markeert het begin van het volledige onderhoudsproces. Daarmee kun je de reactietijd berekenen tussen het vaststellen van een storing en het aanmaken van een order. Waar je het vindt Tabel QMEL, velden ERDAT (aanmaakdatum) en MZEIT (tijd). Gekoppeld aan de order via QMEL-AUFNR. Vastleggen Vastgelegd wanneer een record in tabel QMEL wordt aangemaakt Eventtype explicit | |||
| Onderhoudsprioriteit gewijzigd | Legt een wijziging van het prioriteitsniveau van de werkorder vast, bijvoorbeeld een opschaling naar Emergency. De activiteit is afgeleid van wijzigingsdocumenten die aan de orderstamgegevens zijn gekoppeld. | ||
| Waarom dit belangrijk is Het volgen van prioriteitswijzigingen verklaart afwijkingen in het proces en ondersteunt de monitor voor de impact van Emergency Work Orders door reactieve opschalingen zichtbaar te maken. Waar je het vindt Tabel CDPOS/CDHDR voor Object Class AUFTRAG, veld PRIOK. Vastleggen Vastgelegd in wijzigingsdocumenten (CDPOS) Eventtype explicit | |||
| Orderkosten afgerekend | Geeft aan dat de op de order verzamelde kosten zijn overgeboekt naar het controlling-object, bijvoorbeeld een kostenplaats. De activiteit wordt afgeleid van het controllingdocument. | ||
| Waarom dit belangrijk is Volgt de financiële afsluiting en ondersteunt de KPI voor de duur van de financiële afrekening. Waar je het vindt Tabel COBK (CO Object: Document Header), gekoppeld aan de order. Vastleggen Vastgelegd wanneer afrekeningstransactie KO88 wordt uitgevoerd Eventtype explicit | |||
| Technische voltooiing teruggedraaid | Legt het intrekken van de status Technical Completion vast. Dit geeft aan dat de order opnieuw is geopend en creëert een herstelwerkloop in het procesmodel. | ||
| Waarom dit belangrijk is Belangrijkste indicator voor de KPI Maintenance Rework Rate. Hiermee worden te vroeg gesloten orders of kwaliteitsproblemen zichtbaar. Waar je het vindt Tabel JCDS, status I0045 (TECO) gewijzigd naar Inactive. Vastleggen Vastgelegd wanneer de TECO-status wordt gedeactiveerd Eventtype explicit | |||
| Werkorder ingepland | Geeft aan dat bewerkingen op een specifieke capaciteit of datum zijn ingepland. Dit wordt afgeleid uit de toewijzing van de status Dispatch aan bewerkingen. | ||
| Waarom dit belangrijk is Meet de efficiëntie van de inzet van bronnen en ondersteunt het dashboard voor bronbenutting en planning. Waar je het vindt Tabel JCDS (statuswijzigingsdocumenten) voor bewerkingen (ObjType OV), status I0009 (DSPT). Vastleggen Vergelijk het statusveld voor en na de wijziging Eventtype inferred | |||
Extractiegidsen
Stappen
Bepaal de interface met de databron: Bepaal hoe je toegang krijgt tot de SAP S/4HANA SQL-interface. Dit gebeurt meestal via SAP HANA Studio, de ABAP Development Tools (ADT) in Eclipse of een DBaaS-connection string als de HANA-database beschikbaar is voor je analyselaag.
Controleer of de CDS-views beschikbaar zijn: Controleer of de standaard Core Data Services (CDS)-views actief zijn in je S/4HANA-systeem. De belangrijkste benodigde views zijn I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation en I_MeasurementDocument. Je hebt ook toegang nodig tot de tabel JCDS met de geschiedenis van systeemstatussen en tot de wijzigingsdocumenttabellen (CDHDR/CDPOS) om de volledige eventgeschiedenis te reconstrueren. Standaard-CDS-views tonen vaak alleen de huidige toestand.
Bereid de SQL-omgeving voor: Open je SQL-editor. Controleer of je gebruiker SELECT-rechten heeft op de DDL SQL-views, meestal in schema SAPABAP1 of een vergelijkbaar schema, voor de hierboven genoemde objecten.
Voer de extractiequery uit: Kopieer het meegeleverde SQL-script naar je editor. Vervang de placeholder [Your Client Number] door je specifieke SAP-client-ID, bijvoorbeeld 100. Als je op een specifieke periode filtert, pas je de EventTimestamp-filters in de WHERE-clausules aan.
Transformeer de data: De query voert de meeste transformaties uit, zoals het casten van timestamps en het omzetten van statuscodes naar leesbare tekst. Controleer tijdens de export wel of de kolom EventTimestamp de indeling ISO 8601 (YYYY-MM-DDTHH:MM:SS) heeft als je doelsysteem dit vereist.
Exporteer het resultaat: Voer de query uit en exporteer de resultaten naar een CSV- of Parquet-bestand. Gebruik UTF-8 als codering, zodat speciale tekens in gebruikersnamen of beschrijvingen goed worden verwerkt.
Controleer de kolomkoppeling: Open een deel van de export en controleer of de kolommen MaintenanceWorkOrder, Activity en EventTimestamp volledig zijn gevuld. Controleer of de kolom Activity de specifieke tekenreeksen bevat die in de vereisten staan, bijvoorbeeld Maintenance Order Created en Goods Issue Posted.
Upload naar ProcessMind: Importeer het gecontroleerde platte bestand in ProcessMind. Koppel de kolom Activity aan het veld Activity ID, MaintenanceWorkOrder aan het veld Case ID en EventTimestamp aan het veld Timestamp.
Configuratie
- Clientfilter: SAP-systemen werken met meerdere clients. Filter altijd op
MANDTofClient, bijvoorbeeld '100', om dubbele data of datalekken tussen clients te voorkomen. - Periode: Het is aan te raden om de
CreationDatevan de onderhoudsorder te filteren op de afgelopen 6 tot 12 maanden. Een query op de volledige geschiedenis vanJCDS(status) ofCDPOS(wijzigingsdocumenten) zonder datumfilters kan time-outs veroorzaken. - Taalcode: De query gebruikt standaard Engels ('E'). Als je organisatie een andere primaire taal gebruikt voor tekstbeschrijvingen, pas je het taalfilter aan.
- Systeemtoegang: Je hebt toegang nodig tot het ABAP Core Data Services-schema of de onderliggende HANA-tabellen. Toegang tot de brontabellen JCDS en CDHDR is belangrijk voor historische statusanalyse, omdat pure CDS-views vaak op momentopnamen zijn gebaseerd.
- Ordertypen: De query haalt alle ordertypen op. Je kunt
MaintenanceOrderTypefilteren, bijvoorbeeld alleen PM01 en PM02, als je specifieke onderhoudsscenario's wilt analyseren.
a Voorbeeldquery 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 = ' ' Stappen
- Controleer of directe leestoegang beschikbaar is voor AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG en de relevante tabellen voor wijzigingsdocumenten en controllingdocumenten. Controleer de exacte fysieke namen en veldkoppelingen in je SAP-database, omdat de beschikbare velden en gerepliceerde tabelstructuren per implementatie verschillen.
- Configureer de extractieverbinding, inloggegevens, startdatum en einddatum van de extractie en eventuele bedrijfsspecifieke filters. Gebruik voor de eerste controle een voortschrijdende periode van drie tot zes maanden. Breid die periode pas uit nadat de prestatie en volledigheid zijn gecontroleerd.
- Haal orderkopattributen op uit AUFK, attributen van bewerkingen uit AFVC en statusrecords uit JEST. Koppel ordergerelateerde records via het ordernummer dat in jouw SAP-schema wordt gebruikt. JEST is in veel SAP-implementaties een tabel met de huidige status. Voor historische statustijdstippen heb je daarom een bron met statushistorie of wijzigingsdocumenten nodig. Configureer [Your status history table] en de bijbehorende timestampvelden als JEST geen geschiedenis van statuswijzigingen bewaart.
- Haal het aanmaken van meldingen op uit QMEL, het aanmaken van componenten uit RESB, het aanmaken van inkoopaanvragen uit EBAN, informatie over goederenafgifte uit MSEG en MKPF, bevestigingen uit AFRU, meetwaarden uit IMRG en controllingafrekeningsrecords uit [Your controlling document table]. Haal prioriteitswijzigingen op uit [Your order change document table] en [Your change document item table]. Deze bronnen zijn nodig, omdat AUFK, AFVC en JEST samen niet alle 14 gevraagde activiteiten kunnen leveren.
- Normaliseer alle brontimestamps naar één tijdzone en één timestampdataype. Zet SAP-datum- en tijdvelden of databasetimestampvelden om naar EventTimestamp. Behoud de beschikbare precisie van de brontimestamp. Pas het geconfigureerde extractievenster toe op EventTimestamp, niet alleen op de aanmaakdatum van de order.
- Maak voor elke brongebeurtenis één eventregel. Laat ProcessMind events niet afleiden. Vul de exacte Activity-waarde uit de query in, evenals MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate en de beschikbare aanbevolen attributen. Bewaar bron-ID's als die nuttig zijn voor onderzoek naar duplicaten.
- Verwijder alleen identieke bron-events op basis van stabiele bronsleutels. Voeg afzonderlijke statuswijzigingen, bevestigingen, materiaalbewegingen, meetwaarden of afrekeningsdocumenten die op verschillende tijdstippen plaatsvonden niet samen. Als meerdere bronrecords één bedrijfsevent vertegenwoordigen, leg dan in de extractiespecificatie vast welke bron voorrang krijgt.
- Controleer of alle 14 activiteiten als expliciete rijen voorkomen, of elke rij een case-ID en timestamp heeft en of de timestamps binnen de gevraagde extractieperiode vallen. Vergelijk de aantallen met SAP-rapporten of aantallen in de brontabellen met dezelfde filters.
- Exporteer het resultaat als UTF-8 CSV of een ander door ProcessMind ondersteund eventlogformaat. Gebruik één rij per event, neem de vereiste kolommen met exact de geconfigureerde namen op, behoud ISO 8601-timestamps waar dat wordt ondersteund en upload het bestand of configureer de databaseverbinding in ProcessMind. Stel MaintenanceWorkOrder in als case-ID, Activity als activiteitskolom en EventTimestamp als timestampkolom.
Configuratie
- Brontabellen en koppelingen: AUFK levert orderkopgegevens, AFVC levert gegevens over bewerkingen en JEST levert systeemstatusgegevens. QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, bronnen voor wijzigingsdocumenten en bronnen voor controllingdocumenten zijn ook nodig om alle 14 activiteiten te genereren. Controleer vóór uitvoering de exacte veldnamen in je SAP-database.
- Vereiste uitvoerkolommen: MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem en LastDataUpdate moeten in elke eventrij aanwezig zijn.
- Aanbevolen uitvoerkolommen: Vul MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser en SystemStatus in als deze beschikbaar zijn.
- Periode: Begin met drie tot zes maanden. Gebruik een inclusieve startgrens en een exclusieve eindgrens om dubbele events tussen incrementele runs te voorkomen. Verdeel historische backfills per maand of een andere periode die door de database wordt ondersteund.
- Filters: Configureer [Company Code filter], [Order Type filter], [Maintenance Plant filter], [Notification Type filter] en [Document Type filter] volgens de rapportagescope. Gebruik geen filters die orders zonder meldingen, bewerkingen, componenten, aanvragen, bevestigingen, metingen of afrekeningsdocumenten uitsluiten.
- Statushistorie: JEST bevat meestal statuskoppelingen, maar voor historische statuswijzigingen heb je mogelijk [Your status history table] of wijzigingsdocumenten nodig. Configureer de bron met het tijdstip van de statuswijziging en de overgangsgeschiedenis.
- Prioriteitshistorie: Voor prioriteitswijzigingen heb je [Your order change document table] en [Your change document item table] nodig, met de relevante object-ID, veldnaam, oude waarde, nieuwe waarde en het tijdstip van de wijziging.
- Waarde van het bronsysteem: Vervang [Your SAP system identifier] door de vaste naam van het bronsysteem die je organisatie gebruikt.
- Laatste data-update: Vervang [Your extraction timestamp] door de timestamp die aan het begin of einde van de extractierun wordt gegenereerd. Gebruik dezelfde waarde voor alle rijen in die run.
- Prestaties: Indexeer of partitioneer koppel- en filterkolommen waar dat is toegestaan, beperk het extractievenster, selecteer alleen benodigde kolommen, verwerk grote periodes in batches en materialiseer tussentijdse bronextracten als directe koppelingen tussen schema's traag zijn.
- Vereisten vooraf: Databaseconnectiviteit, leesrechten voor alle geconfigureerde brontabellen, toegang tot de relevante gegevens voor Plant Maintenance, Materials Management, Controlling en metingen en toestemming om operationele data te extraheren. Controleer eventuele beperkingen rond replicatie of licenties van het databaseplatform.
a Voorbeeldquery 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; Klaar om te beginnen?
Gebruik deze bronnen om je onderhoudsworkflows in kaart te brengen en mogelijkheden voor kostenbesparing te vinden. Ons raamwerk zorgt voor de juiste datastructuur om volledige transparantie in je bedrijfsvoering te krijgen.
Los knelpunten in assetonderhoud vandaag nog op in SAP
Verkort je onderhoudscyclustijd vanaf vandaag met 30 procent
Geen creditcard nodig... Instellen in 5 minuten