Datatemplate voor assetonderhoud
Datatemplate voor assetonderhoud
- Aanbevolen attributen om te verzamelen
- Belangrijke onderhoudsactiviteiten om bij te houden
- Technische extractie-instructies voor SAP PM
Attributen voor assetonderhoud
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteitsnaam Activity | De specifieke taak of statuswijziging die heeft plaatsgevonden. | ||
| Beschrijving Geeft de uitgevoerde stap in het onderhoudsproces weer, zoals ‘Onderhoudsorder aangemaakt’, ‘Goederenafgifte geboekt’ of ‘Orderbewerking bevestigd’. Statuswijzigingen worden doorgaans afgeleid van de statusbeheertabellen (JEST), en andere activiteiten van transactietabellen (AFRU voor bevestigingen, MKPF voor materiaalbewegingen). Dit attribuut bepaalt de knooppunten op de proceskaart. Waarom dit belangrijk is Dit beschrijft wat er in het proces gebeurt en is nodig om de processtroom en varianten te ontdekken. Waar vind je dit? Afgeleid van JEST (status), AFRU (bevestigingen), QMEL (meldingen) Voorbeelden Onderhoudsorder aangemaaktOrder vrijgegevenTechnisch afgerond | |||
| Bronsysteem SourceSystem | Het systeem waar de data vandaan komt. | ||
| Beschrijving Identificeert de specifieke SAP-client of -instantie, bijvoorbeeld ‘SAP_PM_PROD’. In een omgeving met meerdere ERP-systemen helpt dit attribuut records te onderscheiden die dezelfde ID kunnen 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 vind je dit? Systeemconfiguratie / extractielog Voorbeelden SAP_ECC_P01SAP_S4H_100 | |||
| Gebeurtenistimestamp EventTimestamp | De exacte datum en tijd waarop de activiteit plaatsvond. | ||
| Beschrijving Legt het exacte moment van een gebeurtenis vast. Bij statuswijzigingen komt dit van het tijdstip waarop de systeemstatus is bijgewerkt; bij bewerkingen is het de bevestigingstijd. Nauwkeurige timestamps zijn nodig om doorlooptijden te berekenen en bottlenecks tussen processtappen zoals ‘Planning’ en ‘Uitvoering’ te vinden. Waarom dit belangrijk is Nodig om gebeurtenissen in de juiste volgorde te zetten en alle KPI’s op basis van tijdsduur te berekenen. Waar vind je dit? JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Voorbeelden 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Laatste data-update LastDataUpdate | Timestamp van de meest recente data-extractie. | ||
| Beschrijving Geeft aan wanneer de data in het process mining-datamodel voor het laatst is bijgewerkt. Analisten zien zo hoe actueel de inzichten zijn en kunnen controleren of de data recent genoeg is voor dashboards die de realtime achterstand of naleving van SLA’s volgen. Waarom dit belangrijk is Belangrijk voor datagovernance en het vertrouwen in dashboards. Waar vind je dit? ETL-timestamp Voorbeelden 2023-11-01T12:00:00Z | |||
| Onderhoudswerkorder MaintenanceWorkOrder | De unieke identificatiecode van de onderhoudswerkorder. | ||
| Beschrijving De onderhoudswerkorder is het centrale document in SAP Plant Maintenance (tabel AUFK, veld AUFNR). De order koppelt de onderhoudsbehoefte (melding) aan de middelen, materialen en kosten voor de uitvoering. In process mining is dit de Case-ID. Daarmee kun je de volledige levenscyclus van een onderhoudsklus reconstrueren, van aanmaak tot technische en bedrijfsmatige afronding. Waarom dit belangrijk is Dit is de unieke sleutel die alle activiteiten, kosten en timestamps met elkaar verbindt en zo de processtroom zichtbaar maakt. Waar vind je dit? SAP-tabel AUFK, veld AUFNR Voorbeelden 00004001234540012345000040098765 | |||
| Apparatuurnummer EquipmentNumber | Identificatiecode van het fysieke bedrijfsmiddel waaraan onderhoud wordt uitgevoerd. | ||
| Beschrijving Het apparatuurnummer (EQUNR) identificeert een specifieke machine of een specifiek bedrijfsmiddel. Door data op dit veld te groeperen, kunnen analisten het dashboard ‘Onderhoudskosten en doorvoer van bedrijfsmiddelen’ gebruiken om apparatuur te vinden die vaak en duur gerepareerd moet worden. Zo kun je de betrouwbaarheid van bedrijfsmiddelen analyseren. Waarom dit belangrijk is Koppelt procesprestaties aan specifieke fysieke bedrijfsmiddelen. Waar vind je dit? SAP-tabel AUFK, veld EQUNR Voorbeelden 10004567PUMP-001HVAC-202 | |||
| Functionele locatie FunctionalLocation | De hiërarchische locatie waar het bedrijfsmiddel is geïnstalleerd. | ||
| Beschrijving Geeft de plek in de technische structuur aan waar de onderhoudstaak wordt uitgevoerd (TPLNR). Apparatuur kan worden verplaatst, maar een functionele locatie blijft op dezelfde plek. Met dit attribuut kun je in het dashboard voor doorlooptijden van technische inspecties prestaties vergelijken tussen verschillende delen van de fabriek, zoals de ketelruimte en de verpakkingslijn. Waarom dit belangrijk is Maakt ruimtelijke en hiërarchische analyses van onderhoudsprestaties mogelijk. Waar vind je dit? SAP-tabel IFLOT, veld TPLNR (of via AUFK-TPLNR) Voorbeelden PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Gebruiker die de order heeft aangemaakt CreatedByUser | De gebruikersnaam van degene die de order heeft aangemaakt. | ||
| Beschrijving Identificeert de gebruiker (ERNAM) die de werkorder heeft aangemaakt. In het generieke model wordt dit gekoppeld aan ‘Gebruiker’. Hiermee kun je handmatige en geautomatiseerde aanmaak vergelijken en de activiteit ‘Onderhoudsorder aangemaakt’ controleren. Waarom dit belangrijk is Maakt analyse van gebruikersgedrag en controles mogelijk. Waar vind je dit? SAP-tabel AUFK, veld ERNAM Voorbeelden JSMITHBSERVICEDDAVIS | |||
| Geplande einddatum TargetFinishDate | De geplande datum waarop de onderhoudswerkzaamheden klaar moeten zijn. | ||
| Beschrijving Deze datum (meestal de geplande einddatum - GLTRP) is de deadline voor de werkorder. Je vergelijkt deze met de werkelijke voltooiingstimestamp om de KPI ‘SLA-nalevingspercentage’ te berekenen. De datum bepaalt of een werkorder op tijd of te laat is. Waarom dit belangrijk is Het uitgangspunt voor alle berekeningen van tijdige levering (OTD). Waar vind je dit? SAP-tabel AFKO, veld GLTRP Voorbeelden 2023-12-012023-12-15 | |||
| Hoofdwerkplek MainWorkCenter | De belangrijkste werkplek of ploeg die de order uitvoert. | ||
| Beschrijving De hoofdwerkplek (VAPLZ) staat voor de groep technici of machines die het werk uitvoert. Dit attribuut wordt gekoppeld aan ‘Team’ en is belangrijk om de efficiëntie van de uitvoering te analyseren, bijvoorbeeld de gemiddelde reparatietijd per ploeg. Ook kun je hiermee interne medewerkers onderscheiden van externe aannemers. Waarom dit belangrijk is Maakt analyse van prestaties per middel mogelijk. Waar vind je dit? SAP-tabel AFKO, veld VAPLZ (of AUFK-VAPLZ, afhankelijk van de configuratie) Voorbeelden MECH_01ELEC_TEAMEXT_CONT | |||
| Meldingsnummer NotificationNumber | De onderhoudsmelding die aanleiding gaf tot deze order. | ||
| Beschrijving Het meldingsnummer (QMNUM) koppelt de werkorder aan de oorspronkelijke aanvraag (melding). Deze koppeling is nodig om de volledige doorlooptijd te berekenen, vanaf de ontvangst van de onderhoudsaanvraag tot de afronding. Zonder deze koppeling ontbreekt de eerste fase, waarin het onderhoudsprobleem wordt vastgesteld en gemeld. Waarom dit belangrijk is Verbindt de uitvoeringsfase weer met de fase waarin de aanvraag of melding is gedaan. Waar vind je dit? SAP-tabel AUFK, veld QMNUM Voorbeelden 1000050010000501 | |||
| Onderhoudsbedrijf MaintenancePlant | Het logistieke bedrijf dat verantwoordelijk is voor het onderhoud. | ||
| Beschrijving Het bedrijf (WERKS) is de belangrijkste organisatorische eenheid binnen de logistiek. Hiermee worden data per fysieke locatie gescheiden. Dit attribuut is nodig om prestaties tussen locaties te vergelijken en wordt gekoppeld aan ‘BusinessUnit’, zodat je dashboards op organisatieniveau kunt filteren. Waarom dit belangrijk is Belangrijkste organisatorische filter om locaties te vergelijken. Waar vind je dit? SAP-tabel AUFK, veld WERKS Voorbeelden 100020003000 | |||
| Onderhoudsordertype MaintenanceOrderType | Deelt de werkorder in categorieën in, bijvoorbeeld preventief of correctief. | ||
| Beschrijving Het ordertype (AUART) in SAP PM geeft aan om wat voor onderhoudswerk het gaat. Veelvoorkomende typen zijn PM01 (correctief), PM02 (preventief) en PM03 (revisie). Dit attribuut is nodig voor de monitor voor de impact van spoedwerkorders en om procesvarianten te onderscheiden. Preventieve workflows verschillen namelijk sterk van reactieve workflows. Waarom dit belangrijk is Belangrijk om geplande en ongeplande werkzaamheden apart te analyseren. Waar vind je dit? SAP-tabel AUFK, veld AUART Voorbeelden PM01PM02PM03 | |||
| Onderhoudsprioriteit MaintenancePriority | De urgentie die aan de werkorder is toegekend. | ||
| Beschrijving Geeft de prioriteit (PRIOK) van de onderhoudstaak aan, bijvoorbeeld ‘1-Zeer hoog’, ‘2-Hoog’ of ‘3-Gemiddeld’. Dit veld is de directe invoer voor de KPI ‘Aandeel spoedwerkorders’. Door de processtroom per prioriteit te analyseren, zie je of orders met hoge prioriteit daadwerkelijk sneller door het systeem gaan dan regulier werk. Waarom dit belangrijk is Belangrijk voor SLA-analyse en het herkennen van spoedwerk. Waar vind je dit? SAP-tabel AFKO, veld PRIOK (of AUFK via een view) Voorbeelden 1-Spoed2-Hoog3-Gemiddeld4-Laag | |||
| Plannergroep ResponsiblePlannerGroup | De groep planners die verantwoordelijk is voor de verwerking van de order. | ||
| Beschrijving De plannergroep (INGRP) identificeert het team of de afdeling die verantwoordelijk is voor de planning van het onderhoudswerk. Deze wordt gekoppeld aan ‘Afdeling’ en is nodig voor het dashboard voor resourcegebruik en planning. Zo zie je welke planningsteams in de voorbereidingsfase een bottleneck vormen. Waarom dit belangrijk is Identificeert het administratieve team dat verantwoordelijk is voor de planning. Waar vind je dit? SAP-tabel AUFK, veld INGRP Voorbeelden M01ELEMEC | |||
| Systeemstatus SystemStatus | De huidige technische status van de order (bijvoorbeeld REL, TECO). | ||
| Beschrijving Een samengevoegde tekenreeks of lijst met actieve systeemstatussen (uit JEST) die momenteel op de order van toepassing zijn. Veelvoorkomende waarden zijn CRTD (aangemaakt), REL (vrijgegeven), TECO (technisch voltooid) en CLSD (gesloten). Hiermee kun je open en gesloten cases filteren in de ‘Monitor voor achterstand en werk in uitvoering’. Waarom dit belangrijk is De belangrijkste indicator voor de fase in de levenscyclus van de order. Waar vind je dit? SAP-functiemodule STATUS_TEXT_EDIT of tabel JEST Voorbeelden REL CNFTECOCRTD MACM | |||
| Geplande arbeidsuren PlannedLaborHours | Het geschatte aantal arbeidsuren voor de order. | ||
| Beschrijving De totale geplande hoeveelheid werk (ARBEI) voor de orderbewerkingen. Door dit te vergelijken met de werkelijke activiteitsduur kun je in het dashboard ‘Prestaties van planning en schattingen’ beoordelen hoe nauwkeurig het onderhoud is gepland. Waarom dit belangrijk is Basismetriek voor analyse van de planningsnauwkeurigheid. Waar vind je dit? SAP-tabel AFKO (som van geplande hoeveelheid werk voor bewerkingen) Voorbeelden 4.08.512.0 | |||
| Is herstelwerk IsRework | Geeft aan of er herstelwerkzaamheden aan de order zijn uitgevoerd. | ||
| Beschrijving Een berekend booleaans veld dat aangeeft of er een proceslus is opgetreden. Dat is het geval als de activiteit ‘Onderhoudstaak uitgevoerd’ meer dan één keer plaatsvond of als de status veranderde van ‘Technisch voltooid’ naar ‘In uitvoering’. Dit ondersteunt de KPI ‘Percentage herstelwerk bij onderhoud’ en helpt kwaliteitsproblemen op te sporen. Waarom dit belangrijk is Ondersteunt rechtstreeks de analyse van kwaliteitscontrole. Waar vind je dit? Berekend op basis van de processtroom Voorbeelden truefalse | |||
| Is spoedwerk IsEmergencyWork | Geeft aan of de werkorder spoed heeft. | ||
| Beschrijving Een booleaans attribuut dat wordt berekend op basis van de onderhoudsprioriteit. Als de prioriteit ‘1’ is (of de specifieke code voor spoed in de configuratie), is deze vlag waar. Zo kun je eenvoudig filteren en de KPI ‘Aandeel spoedwerkorders’ opbouwen zonder ingewikkelde logica in de dashboardlaag. Waarom dit belangrijk is Maakt filteren voor analyse van kritisch correctief onderhoud eenvoudiger. Waar vind je dit? Berekend op basis van MaintenancePriority Voorbeelden truefalse | |||
| Totale werkelijke kosten TotalActualCost | De totale werkelijke kosten die op de werkorder zijn geboekt. | ||
| Beschrijving Opgetelde kosten voor arbeid, materialen en diensten (uit tabel PMCO). Dit attribuut ondersteunt het dashboard ‘Onderhoudskosten en doorvoer van assets’. Managers zien hiermee wat onderhoudswerkzaamheden financieel betekenen. Het is essentieel om te bepalen of reparatie of vervanging van assets kosteneffectiever is. Waarom dit belangrijk is Voegt een financiële dimensie toe aan de operationele procesdata. Waar vind je dit? SAP-tabel PMCO (som van waardetype 04 - werkelijk) Voorbeelden 150.002500.500.00 | |||
Activiteiten voor assetonderhoud
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Bedrijfsmatig afgesloten | Markeert de definitieve administratieve afsluiting van de werkorder, zodat er geen kosten meer kunnen worden geboekt. De activiteit wordt vastgesteld aan de hand van de statuswijziging naar CLSD (gesloten). | ||
| Waarom dit belangrijk is Dit markeert het definitieve einde van de levenscyclus van de order. Het is belangrijk voor de datanauwkeurigheid en naleving van bewaarplichten. Waar vind je dit? Tabel JCDS, status I0046 (CLSD). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar CLSD Gebeurtenistype 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 rechtstreeks invloed op de analyse van wachttijd door de beschikbaarheid van onderdelen. Waar vind je dit? Tabellen MSEG/MKPF, bewegingstype 261 (goederenafgifte voor order). Vastleggen Vastgelegd wanneer transactie MIGO/MB1A wordt uitgevoerd Gebeurtenistype explicit | |||
| Onderhoudsorder aangemaakt | Markeert het aanmaken van de onderhoudswerkorder in het systeem. De activiteit wordt rechtstreeks afgeleid van de aanmaaktimestamp in de tabel met stamgegevens van orders. | ||
| Waarom dit belangrijk is Dit is de centrale gebeurtenis voor de case. De aanvraag gaat hiermee over in de planning en uitvoering. Waar vind je dit? Tabel AUFK, velden ERDAT (datum) en ERFZEIT (tijd). Vastleggen Vastgelegd wanneer transactie IW31 wordt uitgevoerd Gebeurtenistype explicit | |||
| Onderhoudsorder vrijgegeven | Geeft aan dat de planning is afgerond en de order is vrijgegeven voor uitvoering. De activiteit wordt vastgesteld aan de hand van de statuswijziging naar REL in de systeemstatuslogs. | ||
| Waarom dit belangrijk is Deze mijlpaal markeert de overgang van de planningsfase naar de uitvoeringsfase. Dat is belangrijk om de doorlooptijd van planning en calculatie te meten. Waar vind je dit? Tabel JCDS (statuswijzigingsdocumenten), status I0002 (REL). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar REL Gebeurtenistype explicit | |||
| Orderbewerking bevestigd | Legt vast hoeveel tijd een technicus aan een specifieke bewerking heeft besteed. Zo wordt het daadwerkelijke werk aan het bedrijfsmiddel geregistreerd. | ||
| Waarom dit belangrijk is Deze activiteit is de belangrijkste databron voor de berekening van de gemiddelde reparatietijd en arbeidskosten. Waar vind je dit? Tabel AFRU (orderbevestigingen). Vastleggen Vastgelegd wanneer transactie IW41 wordt uitgevoerd Gebeurtenistype explicit | |||
| Technisch afgerond | Markeert dat het onderhoudswerk fysiek en technisch is afgerond. De activiteit wordt vastgesteld aan de hand van de statuswijziging naar TECO (technisch afgerond). | ||
| Waarom dit belangrijk is Dit is het belangrijkste eindpunt voor de operationele analyse: het bedrijfsmiddel is hersteld en het onderhoud is afgerond. Waar vind je dit? Tabel JCDS, status I0045 (TECO). Vastleggen Vastgelegd wanneer de status in JCDS wordt gewijzigd naar TECO Gebeurtenistype 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 om vertragingen door externe leveranciers of de inkoop van niet-voorraadartikelen te analyseren. Waar vind je dit? Tabel EBAN, gekoppeld via de rekeningtoewijzing aan AUFK-AUFNR. Vastleggen Vastgelegd wanneer een record in EBAN wordt aangemaakt Gebeurtenistype explicit | |||
| Materiaalcomponent toegevoegd | Legt vast wanneer reserveonderdelen of materialen aan de componentenlijst van de werkorder worden 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 vind je dit? Tabel RESB, veld BDTER (behoeftedatum) of aanmaaktimestamp. Vastleggen Vastgelegd wanneer een regel aan RESB wordt toegevoegd Gebeurtenistype explicit | |||
| Meetwaarde geregistreerd | Legt vast dat een meetdocument is ingevoerd, bijvoorbeeld een tellerstand of conditiebeoordeling. Dit is vaak de gebeurtenis voor een technische inspectie. | ||
| Waarom dit belangrijk is Essentieel voor conditiegestuurd onderhoud en het bijhouden van doorlooptijden van technische inspecties. Waar vind je dit? Tabel IMRG (meetdocument), gekoppeld aan apparatuur of een functionele locatie. Vastleggen Vastgelegd wanneer een meetdocument wordt aangemaakt Gebeurtenistype explicit | |||
| Onderhoudsmelding aangemaakt | Legt vast wanneer een onderhoudsmelding voor het eerst wordt aangemaakt. Deze melding is vaak de aanleiding voor een werkorder. De activiteit wordt afgeleid van 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. Zo kun je de reactietijd berekenen tussen het vaststellen van een storing en het aanmaken van een order. Waar vind je dit? 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 Gebeurtenistype explicit | |||
| Onderhoudsprioriteit gewijzigd | Legt een wijziging van de prioriteit van de werkorder vast, bijvoorbeeld een verhoging naar Spoed. De activiteit wordt afgeleid van wijzigingsdocumenten bij de stamgegevens van de order. | ||
| Waarom dit belangrijk is Door prioriteitswijzigingen bij te houden, worden procesafwijkingen zichtbaar. Ook ondersteunt dit de monitor voor de impact van spoedwerkorders, doordat reactieve prioriteitsverhogingen aan het licht komen. Waar vind je dit? Tabellen CDPOS/CDHDR voor objectklasse AUFTRAG, veld PRIOK. Vastleggen Vastgelegd in wijzigingsdocumenten (CDPOS) Gebeurtenistype 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 Houdt de financiële afsluiting bij en ondersteunt de KPI voor de duur van de financiële afrekening. Waar vind je dit? Tabel COBK (CO-object: documentkop), gekoppeld aan de order. Vastleggen Vastgelegd wanneer afrekentransactie KO88 wordt uitgevoerd Gebeurtenistype explicit | |||
| Technische afronding teruggedraaid | Legt vast dat de status Technisch afgerond is ingetrokken, wat aangeeft dat de order is heropend. Hierdoor ontstaat een herstelwerkcyclus in het procesmodel. | ||
| Waarom dit belangrijk is Belangrijkste indicator voor de KPI herstelwerkpercentage onderhoud. De indicator maakt voortijdige afsluitingen en kwaliteitsproblemen zichtbaar. Waar vind je dit? Tabel JCDS, status I0045 (TECO) gewijzigd naar Inactief. Vastleggen Vastgelegd wanneer de TECO-status wordt gedeactiveerd Gebeurtenistype explicit | |||
| Werkorder ingepland | Geeft aan dat werkzaamheden op een specifieke capaciteit of datum zijn ingepland. Dit wordt afgeleid van de toewijzing van de status Dispatch aan werkzaamheden. | ||
| Waarom dit belangrijk is Meet hoe efficiënt middelen worden toegewezen en ondersteunt het dashboard voor resourcegebruik en planning. Waar vind je dit? Tabel JCDS (statuswijzigingsdocumenten) voor werkzaamheden (ObjType OV), status I0009 (DSPT). Vastleggen Vergelijk het statusveld voor en na de wijziging Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
Bepaal hoe je de databron benadert: Bepaal hoe je toegang krijgt tot de SQL-interface van SAP S/4HANA. Dit doe je meestal via SAP HANA Studio, de ABAP Development Tools (ADT) in Eclipse of een DBaaS-verbindingsreeks als de HANA-database beschikbaar is voor je analyselaag.
Controleer of de CDS-views beschikbaar zijn: Controleer of de standaard Core Data Services-views actief zijn in je S/4HANA-systeem. Je hebt in elk geval de volgende views nodig: I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation en I_MeasurementDocument. Je hebt ook toegang nodig tot de tabel met systeemstatushistorie JCDS en de wijzigingsdocumenttabellen (CDHDR/CDPOS) om de volledige eventgeschiedenis samen te stellen. Standaard-CDS-views tonen vaak alleen de huidige status.
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 tijdelijke aanduiding [Your Client Number] door je SAP-client-ID (bijvoorbeeld 100). Pas de EventTimestamp-filters in de WHERE-clausules aan als je een specifieke periode wilt gebruiken.
Transformeer de data: De query voert de meeste transformaties uit, zoals het omzetten van timestamps en het vertalen van statuscodes naar leesbare tekst. Controleer wel of de kolom EventTimestamp tijdens het exporteren de ISO 8601-notatie (YYYY-MM-DDTHH:MM:SS) heeft als het doelsysteem dat vereist.
Exporteer het resultaat: Voer de query uit en exporteer de resultaten naar een CSV- of Parquet-bestand. Gebruik UTF-8-codering voor speciale tekens in gebruikersnamen en beschrijvingen.
Controleer de kolomtoewijzing: Open een deel van het exportbestand en controleer of de kolommen MaintenanceWorkOrder, Activity en EventTimestamp volledig zijn ingevuld. Controleer of de kolom Activity de specifieke waarden uit de vereisten bevat, zoals Maintenance Order Created en Goods Issue Posted.
Upload naar ProcessMind: Importeer het gecontroleerde 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 kunnen meerdere clients bevatten. Filter altijd op
MANDTofClient(bijvoorbeeld '100') om dubbele data of datalekken tussen clients te voorkomen. - Datumbereik: Filter bij voorkeur op de
CreationDatevan de onderhoudsorder en neem de laatste 6 tot 12 maanden mee. Een query op de volledige historie vanJCDS(status) ofCDPOS(wijzigingsdocumenten) zonder datumfilter kan een time-out veroorzaken. - Taalcode: De query gebruikt standaard Engels ('E'). Pas het taalfilter aan als je organisatie een andere hoofdtaal gebruikt voor tekstbeschrijvingen.
- Systeemtoegang: Je hebt toegang nodig tot het ABAP Core Data Services-schema of de onderliggende HANA-tabellen. Voor analyse van historische statussen is toegang tot de brontabellen JCDS en CDHDR essentieel, omdat CDS-views vaak alleen momentopnamen bevatten.
- Ordertypen: De query haalt alle ordertypen op. Je kunt
MaintenanceOrderTypefilteren (bijvoorbeeld alleen PM01 en PM02) als je specifieke onderhoudsscenario’s wilt analyseren.
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 je directe leestoegang hebt tot AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG en de relevante tabellen voor wijzigingsdocumenten en controllingdocumenten. Controleer de exacte fysieke namen en veldtoewijzingen in je SAP-database, want de beschikbare velden en gerepliceerde tabelstructuren verschillen per implementatie.
- Stel de extractieverbinding, inloggegevens, begin- en einddatum van de extractie en eventuele filters voor specifieke bedrijven in. Gebruik voor de eerste controle een voortschrijdende periode van drie tot zes maanden. Vergroot de periode zodra de prestatie- en volledigheidscontroles zijn geslaagd.
- Haal orderkopattributen op uit AUFK, bewerkingsattributen uit AFVC en statusrecords uit JEST. Koppel ordergerelateerde records via het ordernummer dat in je SAP-schema wordt gebruikt. In veel SAP-implementaties bevat JEST alleen de huidige status. Voor historische statustimestamps heb je daarom een bron met statusgeschiedenis of wijzigingsdocumenten nodig. Configureer [Your status history table] en de timestampvelden ervan als JEST geen statuswijzigingen bijhoudt.
- Haal het aanmaken van meldingen op uit QMEL, het aanmaken van componenten uit RESB, het aanmaken van inkoopaanvragen uit EBAN, goederenafgiften uit MSEG en MKPF, bevestigingen uit AFRU, meetwaarden uit IMRG en vereffeningsrecords 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 bevatten.
- Zet alle timestamps uit de bronnen om naar één tijdzone en één timestamp-datatype. Converteer SAP-datum- en tijdvelden of databasetimestampvelden naar EventTimestamp. Behoud de beschikbare precisie van de brontimestamp. Pas het ingestelde extractiebereik toe op EventTimestamp, niet alleen op de aanmaakdatum van de order.
- Maak voor elke gebeurtenis in de bron één eventregel. Laat ProcessMind events niet zelf afleiden. Gebruik exact de Activity-waarde uit de query en vul MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate en de beschikbare aanbevolen attributen in. Bewaar bron-ID’s waar die nuttig zijn om duplicaten te onderzoeken.
- Verwijder alleen dubbele bron-events met identieke stabiele bronsleutels. Voeg afzonderlijke statuswijzigingen, bevestigingen, materiaalbewegingen, meetwaarden of vereffeningsdocumenten met verschillende tijdstippen niet samen. Als meerdere bronrecords één bedrijfsgebeurtenis vertegenwoordigen, leg dan in de extractiespecificatie vast welke bron voorrang krijgt.
- Controleer of alle 14 Activity-waarden als afzonderlijke regels voorkomen, elke regel een case-ID en timestamp heeft en 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 eventlogformaat dat ProcessMind ondersteunt. Gebruik één regel per event, neem de vereiste kolommen met exact de ingestelde namen op, behoud waar mogelijk ISO 8601-timestamps 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 toewijzingen: AUFK bevat orderkopgegevens, AFVC bevat bewerkingsgegevens en JEST bevat systeemstatusgegevens. Voor alle 14 activiteiten zijn ook QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, bronnen met wijzigingsdocumenten en bronnen met controllingdocumenten nodig. Controleer vóór uitvoering de exacte veldnamen in je SAP-database.
- Vereiste uitvoerkolommen: MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem en LastDataUpdate moeten in elke eventregel staan.
- Aanbevolen uitvoerkolommen: Vul MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser en SystemStatus in als deze beschikbaar zijn.
- Datumbereik: Begin met drie tot zes maanden. Gebruik een inclusieve begindatum en exclusieve einddatum om dubbele events tussen incrementele runs te voorkomen. Verdeel historische aanvullingen in maanden of een andere periode die de database ondersteunt.
- Filters: Stel [Company Code filter], [Order Type filter], [Maintenance Plant filter], [Notification Type filter] en [Document Type filter] in volgens de rapportagescope. Gebruik geen filters waardoor orders zonder meldingen, bewerkingen, componenten, aanvragen, bevestigingen, meetwaarden of vereffeningsdocumenten wegvallen.
- Statusgeschiedenis: JEST bevat doorgaans statustoewijzingen, maar voor historische statuswijzigingen heb je mogelijk [Your status history table] of wijzigingsdocumenten nodig. Configureer de bron met de timestamp van de statuswijziging en de statusovergangen.
- Prioriteitsgeschiedenis: Voor prioriteitswijzigingen heb je [Your order change document table] en [Your change document item table] nodig, met de relevante object-ID, veldnaam, oude en nieuwe waarde en wijzigingstimestamp.
- Waarde voor 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 voor alle regels in die run dezelfde waarde.
- Prestaties: Indexeer of partitioneer waar toegestaan de kolommen waarop je koppelt en filtert. Beperk het extractiebereik, selecteer alleen benodigde kolommen en verwerk lange perioden in batches. Sla tussenresultaten op als rechtstreekse koppelingen tussen schema’s traag zijn.
- Vereisten: Je hebt databaseconnectiviteit, leesrechten voor alle ingestelde brontabellen, toegang tot de relevante gegevens voor Plant Maintenance, Materials Management, Controlling en meetwaarden, en toestemming nodig om operationele data te extraheren. Controleer eventuele replicatie- of licentiebeperkingen van het databaseplatform.
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 onderhoudsworkflows in kaart te brengen en mogelijkheden voor kostenbesparing te vinden. Met dit raamwerk krijgt de data de juiste structuur, zodat je de bedrijfsvoering volledig kunt doorzien.
Los bottlenecks in assetonderhoud in SAP vandaag nog op
Verkort de onderhoudsdoorlooptijd vanaf nu met 30 procent
Geen creditcard nodig... Klaar voor gebruik in 5 minuten