Votre modèle de données pour la maintenance des actifs
Votre modèle de données pour la maintenance des actifs
- Attributs recommandés à collecter
- Activités de maintenance essentielles à suivre
- Recommandations techniques d’extraction pour SAP PM
Attributs de maintenance des actifs
| Nom | Description | ||
|---|---|---|---|
| Dernière mise à jour des données LastDataUpdate | Horodatage de l’extraction de données la plus récente. | ||
| Description Indique la date de la dernière actualisation des données dans le modèle de données de Process Mining. Les analystes peuvent ainsi évaluer l’actualité des analyses et vérifier la fraîcheur des données utilisées par les Dashboards qui suivent le backlog en temps réel ou le respect des SLA. Pourquoi c’est important Essentiel à la gouvernance des données et à la fiabilité des Dashboards. Où les obtenir Horodatage ETL Exemples 2023-11-01T12:00:00Z | |||
| Horodatage de l’événement EventTimestamp | La date et l’heure exactes auxquelles l’activité s’est produite. | ||
| Description Enregistre le moment précis où un événement a eu lieu. Pour les changements de statut, il provient de l’heure de mise à jour du statut système ; pour les opérations, de l’heure de confirmation. Des horodatages précis sont essentiels pour calculer les temps de cycle et les délais, ainsi que pour identifier les goulots d’étranglement entre des étapes telles que la planification et l’exécution. Pourquoi c’est important Nécessaire pour ordonner correctement les événements et calculer tous les KPI fondés sur la durée. Où les obtenir JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Exemples 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Nom de l’activité Activity | La tâche précise ou le changement de statut qui s’est produit. | ||
| Description Représente l’étape exécutée dans le processus de maintenance, comme « Ordre de maintenance créé », « Sortie de marchandises comptabilisée » ou « Opération de l’ordre confirmée ». Ces éléments sont généralement dérivés des tables de gestion des statuts, JEST, pour les changements de statut, ou des tables de transactions, AFRU pour les confirmations et MKPF pour les mouvements de matériel. Cet attribut détermine les nœuds de la cartographie du processus. Pourquoi c’est important Il définit le « quoi » du processus, ce qui est essentiel pour découvrir le flux et les variantes du processus. Où les obtenir Dérivé de JEST (statuts), AFRU (confirmations), QMEL (notifications) Exemples Ordre de maintenance crééOrdre lancéAchèvement technique | |||
| Ordre de travail de maintenance MaintenanceWorkOrder | L’identifiant unique de l’ordre de travail de maintenance. | ||
| Description L’ordre de travail de maintenance est le document central de SAP Plant Maintenance, dans la table AUFK, champ AUFNR. Il relie le besoin de maintenance, c’est-à-dire la notification, aux ressources d’exécution, aux matériaux et aux coûts. Dans l’analyse de Process Mining, il sert de Case ID et permet de reconstituer le cycle de vie complet d’une intervention de maintenance, de sa création à son achèvement technique et administratif. Pourquoi c’est important Il s’agit de la clé unique qui relie toutes les activités, tous les coûts et tous les horodatages, permettant de visualiser le flux du processus. Où les obtenir Table SAP AUFK, champ AUFNR Exemples 00004001234540012345000040098765 | |||
| Système source SourceSystem | Le système dans lequel les données ont été générées. | ||
| Description Identifie le client ou l’instance SAP concerné, par exemple « SAP_PM_PROD ». Dans un environnement comprenant plusieurs systèmes ERP, cet attribut permet de distinguer les enregistrements susceptibles de partager des identifiants identiques, mais appartenant à des entités juridiques ou à des environnements système différents. Pourquoi c’est important Garantit l’unicité et la traçabilité des données dans les environnements multisystèmes. Où les obtenir Configuration du système / journal d’extraction Exemples SAP_ECC_P01SAP_S4H_100 | |||
| Centre de travail principal MainWorkCenter | Le centre de travail principal ou l’équipe affectée à l’exécution de l’ordre. | ||
| Description Le centre de travail principal, VAPLZ, représente le groupe de techniciens ou de machines qui réalisera les travaux physiques. Cet attribut est associé à « Team » et est essentiel pour analyser l’efficacité de l’exécution, notamment le temps moyen de réparation par équipe. Il permet de distinguer la main-d’œuvre interne des prestataires externes. Pourquoi c’est important Permet d’analyser les performances au niveau des ressources. Où les obtenir Table SAP AFKO, champ VAPLZ, ou AUFK-VAPLZ selon la configuration Exemples MECH_01ELEC_TEAMEXT_CONT | |||
| Date cible de fin TargetFinishDate | La date prévue d’achèvement des travaux de maintenance. | ||
| Description Cette date, généralement la date de fin de base, GLTRP, représente l’échéance de l’ordre de travail. Elle est comparée à l’horodatage réel d’achèvement pour calculer le KPI de respect des SLA. Elle sert de référence pour déterminer si un ordre de travail est terminé dans les délais ou en retard. Pourquoi c’est important Le point de référence pour tous les calculs de livraison à temps, OTD. Où les obtenir Table SAP AFKO, champ GLTRP Exemples 2023-12-012023-12-15 | |||
| Division de maintenance MaintenancePlant | La division logistique responsable de la maintenance. | ||
| Description La division, WERKS, est l’unité organisationnelle principale de la logistique. Elle sépare les données par site physique. Cet attribut est essentiel pour comparer les performances entre différents sites et est associé à « BusinessUnit » afin de permettre un filtrage organisationnel de haut niveau dans les Dashboards. Pourquoi c’est important Filtre organisationnel principal pour comparer les performances des sites. Où les obtenir Table SAP AUFK, champ WERKS Exemples 100020003000 | |||
| Emplacement fonctionnel FunctionalLocation | L’emplacement hiérarchique où l’actif est installé. | ||
| Description Représente le lieu de la structure technique où la tâche de maintenance est réalisée, TPLNR. Contrairement à l’équipement, qui peut être déplacé, l’emplacement fonctionnel est fixe. Cet attribut alimente le Dashboard des temps de cycle des inspections techniques en permettant de comparer les performances entre différentes zones de l’usine, par exemple la chaufferie et la ligne de conditionnement. Pourquoi c’est important Permet une analyse spatiale et hiérarchique de la performance de la maintenance. Où les obtenir Table SAP IFLOT, champ TPLNR, ou via AUFK-TPLNR Exemples PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Groupe de planificateurs ResponsiblePlannerGroup | Le groupe de planificateurs chargé de traiter l’ordre. | ||
| Description Le groupe de planificateurs, INGRP, identifie l’équipe ou le service chargé de planifier les travaux de maintenance. Il est associé à « Department » et joue un rôle essentiel dans le Dashboard d’utilisation et de planification des ressources, qui permet d’identifier les équipes de planification constituant des goulots d’étranglement pendant la phase de préparation. Pourquoi c’est important Identifie l’équipe administrative responsable du processus de planification. Où les obtenir Table SAP AUFK, champ INGRP Exemples M01ELEMEC | |||
| Numéro d’équipement EquipmentNumber | Identifiant de l’actif physique concerné par la maintenance. | ||
| Description Le numéro d’équipement, EQUNR, identifie la machine ou l’actif individuel. En agrégeant les données sur ce champ, les analystes peuvent alimenter le Dashboard des coûts et du débit de maintenance des actifs afin d’identifier les équipements problématiques nécessitant des réparations fréquentes et coûteuses. Il permet d’analyser la maintenance axée sur la fiabilité. Pourquoi c’est important Relie la performance du processus aux actifs physiques concernés. Où les obtenir Table SAP AUFK, champ EQUNR Exemples 10004567PUMP-001HVAC-202 | |||
| Numéro de notification NotificationNumber | La notification de maintenance à l’origine de cet ordre. | ||
| Description Le numéro de notification, QMNUM, relie l’ordre de travail à la demande initiale, c’est-à-dire la notification. Ce lien est nécessaire pour calculer le délai complet entre la réception de la demande de maintenance et l’achèvement. Sans lui, l’analyse ne prend pas en compte la phase initiale de détection et de signalement du cycle de vie de la maintenance. Pourquoi c’est important Relie la phase d’exécution à la phase de demande et de détection. Où les obtenir Table SAP AUFK, champ QMNUM Exemples 1000050010000501 | |||
| Priorité de maintenance MaintenancePriority | Le niveau d’urgence attribué à l’ordre de travail. | ||
| Description Indique la priorité, PRIOK, de la tâche de maintenance, par exemple « 1-Très élevée », « 2-Élevée » ou « 3-Moyenne ». Ce champ alimente directement le KPI de proportion d’ordres de travail urgents. L’analyse du flux par priorité permet de vérifier si les ordres prioritaires sont réellement traités plus rapidement que les travaux courants. Pourquoi c’est important Facteur déterminant pour l’analyse des SLA et l’identification des interventions urgentes. Où les obtenir Table SAP AFKO, champ PRIOK, ou AUFK via une vue Exemples 1-Urgence2-Élevée3-Moyenne4-Faible | |||
| Statut système SystemStatus | Statut technique actuel de l’ordre, par exemple REL ou TECO. | ||
| Description Chaîne concaténée ou liste des statuts système actifs, issus de JEST, actuellement appliqués à l’ordre. Les valeurs courantes incluent CRTD (Created), REL (Released), TECO (Technically Completed) et CLSD (Closed). Cet attribut permet de filtrer les cas ouverts et fermés dans le « Backlog and Work In Progress Monitor ». Pourquoi c’est important Indicateur principal de l’étape du cycle de vie de l’ordre. Où les obtenir Module de fonction SAP STATUS_TEXT_EDIT ou table JEST Exemples REL CNFTECOCRTD MACM | |||
| Type d’ordre de maintenance MaintenanceOrderType | Catégorise l’ordre de travail, par exemple préventif ou correctif. | ||
| Description Le type d’ordre, AUART, dans SAP PM distingue la nature des travaux de maintenance. Les types courants comprennent PM01 (correctif), PM02 (préventif) et PM03 (rénovation). Cet attribut est essentiel pour le moniteur d’impact des ordres de travail urgents et pour segmenter les variantes du processus, car les flux préventifs diffèrent sensiblement des flux réactifs. Pourquoi c’est important Fondamental pour segmenter l’analyse entre les travaux planifiés et non planifiés. Où les obtenir Table SAP AUFK, champ AUART Exemples PM01PM02PM03 | |||
| Utilisateur ayant créé l’enregistrement CreatedByUser | Nom d’utilisateur de la personne qui a créé l’ordre. | ||
| Description Identifie l’utilisateur (ERNAM) responsable du lancement de l’ordre de travail. Cet attribut est associé à « User » dans le modèle générique. Il permet d’analyser la création manuelle ou automatisée et facilite l’audit de l’activité « Maintenance Order Created ». Pourquoi c’est important Permet d’analyser le comportement des utilisateurs et de réaliser des audits. Où les obtenir Table SAP AUFK, champ ERNAM Exemples JSMITHBSERVICEDDAVIS | |||
| Coût réel total TotalActualCost | Le coût réel total comptabilisé sur l’ordre de travail. | ||
| Description Coûts agrégés de la main-d’œuvre, des matériaux et des services, issus de la table PMCO. Cet attribut alimente le Dashboard des coûts et du débit de maintenance des actifs et permet aux responsables d’évaluer l’impact financier des activités de maintenance. Il est essentiel pour déterminer s’il est plus rentable de réparer ou de remplacer les actifs. Pourquoi c’est important Ajoute une dimension financière aux données opérationnelles du processus. Où les obtenir Table SAP PMCO, somme du type de valeur 04, réel Exemples 150.002500.500.00 | |||
| Est un travail d’urgence IsEmergencyWork | Indicateur précisant si l’ordre de travail est urgent. | ||
| Description Attribut booléen calculé à partir de la priorité de maintenance. Si la priorité est « 1 », ou correspond au code configuré pour les urgences, cet indicateur prend la valeur true. Il simplifie le filtrage et la création de l’indicateur « Emergency Work Order Ratio », sans logique complexe dans la couche Dashboard. Pourquoi c’est important Simplifie le filtrage pour l’analyse de la maintenance corrective critique. Où les obtenir Calculé à partir de MaintenancePriority Exemples truefalse | |||
| Est une reprise IsRework | Indicateur précisant si l’ordre comprend des activités de reprise. | ||
| Description Valeur booléenne calculée qui identifie la présence d’une boucle dans le processus, notamment lorsque l’activité « Maintenance Task Executed » s’est produite plusieurs fois ou lorsque le statut est repassé de « Technically Completed » à « In Process ». Cet indicateur alimente le KPI « Maintenance Rework Rate » et aide à repérer les problèmes de qualité. Pourquoi c’est important Contribue directement à l’analyse du contrôle qualité. Où les obtenir Calculé à partir du flux du processus Exemples truefalse | |||
| Heures de travail planifiées PlannedLaborHours | Nombre d’heures de travail estimées pour l’ordre. | ||
| Description Total du travail planifié (ARBEI) pour les opérations de l’ordre. La comparaison avec la durée réelle de l’activité permet d’évaluer la précision de la planification de la maintenance dans le Dashboard « Planning and Estimation Performance ». Pourquoi c’est important Métrique de référence pour l’analyse de la précision de la planification. Où les obtenir Table SAP AFKO, somme du travail planifié des opérations Exemples 4.08.512.0 | |||
Activités de maintenance des actifs
| Activité | Description | ||
|---|---|---|---|
| Achèvement administratif défini | Marque la clôture administrative finale de l’ordre de travail et empêche toute nouvelle imputation de coûts. Capturée via le changement de statut vers CLSD (clôturé). | ||
| Pourquoi c’est important Représente la fin absolue du cycle de vie de l’ordre, essentielle pour l’exactitude des données et la conformité des enregistrements. Où les obtenir Table JCDS, statut I0046 (CLSD). Collecte Enregistré lorsque le statut passe à CLSD dans JCDS Type d’événement explicit | |||
| Achèvement technique défini | Marque la fin physique et technique des travaux de maintenance. Capturée via le changement de statut vers TECO (achèvement technique). | ||
| Pourquoi c’est important Il s’agit du point final le plus important pour l’analyse opérationnelle, qui indique que l’actif est remis en état et que la maintenance est terminée. Où les obtenir Table JCDS, statut I0045 (TECO). Collecte Enregistré lorsque le statut passe à TECO dans JCDS Type d’événement explicit | |||
| Opération de l’ordre confirmée | Représente l’enregistrement du temps réellement consacré par un technicien à une opération donnée. Cette activité capture le travail effectivement réalisé sur l’actif. | ||
| Pourquoi c’est important Cette activité constitue la principale source de données pour calculer le temps moyen de réparation et les coûts de main-d’œuvre. Où les obtenir Table AFRU (confirmations d’ordre). Collecte Enregistré lors de l’exécution de la transaction IW41 Type d’événement explicit | |||
| Ordre de maintenance créé | Marque la création de l’objet ordre de travail de maintenance dans le système. Capturée explicitement à partir de l’horodatage de création de la table des données de base de l’ordre. | ||
| Pourquoi c’est important Il s’agit de l’événement central du dossier, qui marque le passage de la demande à la planification et à l’exécution. Où les obtenir Table AUFK, champs ERDAT (date) et ERFZEIT (heure). Collecte Enregistré lors de l’exécution de la transaction IW31 Type d’événement explicit | |||
| Ordre de maintenance lancé | Indique que la planification est terminée et que l’ordre est lancé pour exécution. Capturée en surveillant le changement de statut vers REL dans les journaux de statuts système. | ||
| Pourquoi c’est important Cette étape clé sépare la phase de planification de la phase d’exécution, ce qui est essentiel pour mesurer le délai de planification et d’estimation. Où les obtenir Table JCDS (documents de changement de statut), statut I0002 (REL). Collecte Enregistré lorsque le statut passe à REL dans JCDS Type d’événement explicit | |||
| Sortie de marchandises comptabilisée | Enregistre la consommation physique de pièces de rechange ou de matériaux affectés à l’ordre de travail. Capturée à partir des en-têtes de documents de matériel liés à l’ordre. | ||
| Pourquoi c’est important Confirme que les pièces sont disponibles et ont été prélevées, ce qui influe directement sur l’analyse du temps d’attente lié à la disponibilité des pièces. Où les obtenir Tables MSEG/MKPF, type de mouvement 261 (sortie de marchandises pour ordre). Collecte Enregistré lors de l’exécution de la transaction MIGO/MB1A Type d’événement explicit | |||
| Achèvement technique annulé | Enregistre la révocation du statut d’achèvement technique, indiquant que l’ordre a été rouvert. Cela crée une boucle de retouche dans le modèle de processus. | ||
| Pourquoi c’est important Indicateur principal du KPI de taux de retouche de la maintenance, mettant en évidence les clôtures prématurées ou les problèmes de qualité. Où les obtenir Table JCDS, passage du statut I0045 (TECO) à Inactif. Collecte Enregistré lors de la désactivation du statut TECO Type d’événement explicit | |||
| Composant matériel ajouté | Enregistre l’ajout de pièces de rechange ou de matériaux à la liste des composants de l’ordre de travail. Capturée à partir de la création d’une ligne de réservation. | ||
| Pourquoi c’est important Identifie le début du cycle d’approvisionnement des pièces nécessaires et alimente le Dashboard des délais d’approvisionnement des pièces de rechange. Où les obtenir Table RESB, champ BDTER (date de besoin) ou horodatage de création. Collecte Enregistré lors de l’ajout d’une ligne dans RESB Type d’événement explicit | |||
| Coûts de l’ordre soldés | Indique que les coûts collectés sur l’ordre ont été transférés vers l’objet de contrôle, par exemple un centre de coûts. Capturée à partir du document de contrôle de gestion. | ||
| Pourquoi c’est important Suit l’aspect financier de la clôture et alimente le KPI de durée du règlement financier. Où les obtenir Table COBK (en-tête du document d’objet CO), reliée à l’ordre. Collecte Enregistré lors de l’exécution de la transaction de règlement KO88 Type d’événement explicit | |||
| Demande d’achat créée | Indique qu’une demande d’approvisionnement externe ou de services a été générée. Elle relie l’ordre de maintenance interne à la chaîne d’approvisionnement externe. | ||
| Pourquoi c’est important Essentiel pour analyser les retards imputables aux fournisseurs externes ou à l’approvisionnement en matériaux non stockés. Où les obtenir Table EBAN, reliée via l’imputation à AUFK-AUFNR. Collecte Enregistré lors de la création de l’enregistrement EBAN Type d’événement explicit | |||
| Notification de maintenance créée | Enregistre la création initiale d’une notification de maintenance, qui constitue souvent le déclencheur d’un ordre de travail. Capturée à partir de l’horodatage de création de la table QMEL, cette activité relie la demande en amont à l’ordre d’exécution. | ||
| Pourquoi c’est important Cette activité établit le début du processus de maintenance de bout en bout et permet de calculer les temps de réaction entre la détection de la panne et la création de l’ordre. Où les obtenir Table QMEL, champs ERDAT (date de création) et MZEIT (heure). Reliée à l’ordre via QMEL-AUFNR. Collecte Enregistré lors de la création de l’enregistrement dans la table QMEL Type d’événement explicit | |||
| Ordre de travail planifié | Indique la planification précise des opérations en fonction d’une capacité ou d’une date. Déduite de l’affectation du statut Dispatch aux opérations. | ||
| Pourquoi c’est important Mesure l’efficacité de l’affectation des ressources et alimente le Dashboard d’utilisation et de planification des ressources. Où les obtenir Table JCDS (documents de changement de statut) pour les opérations (ObjType OV), statut I0009 (DSPT). Collecte Comparer le champ de statut avant et après Type d’événement inferred | |||
| Priorité de maintenance modifiée | Enregistre une mise à jour du niveau de priorité de l’ordre de travail, par exemple son passage en urgence. Dérivée des documents de modification associés aux données de base de l’ordre. | ||
| Pourquoi c’est important Le suivi des changements de priorité permet d’expliquer les écarts du processus et alimente le moniteur d’impact des ordres de travail urgents en identifiant les escalades réactives. Où les obtenir Table CDPOS/CDHDR pour la classe d’objet AUFTRAG, champ PRIOK. Collecte Enregistré dans les documents de modification (CDPOS) Type d’événement explicit | |||
| Relevé de mesure enregistré | Enregistre la saisie d’un document de mesure, tel qu’un relevé de compteur ou une évaluation de l’état. Il sert souvent d’événement d’inspection technique. | ||
| Pourquoi c’est important Essentiel pour la maintenance basée sur l’état et le suivi des temps de cycle des inspections techniques. Où les obtenir Table IMRG (document de mesure), reliée à l’équipement ou à l’emplacement fonctionnel. Collecte Enregistré lors de la création du document de mesure Type d’événement explicit | |||
Guides d’extraction
Étapes
Identifiez l’interface d’accès aux données : déterminez comment accéder à l’interface SQL de SAP S/4HANA. Cette opération s’effectue généralement via SAP HANA Studio, les ABAP Development Tools (ADT) dans Eclipse ou une chaîne de connexion DBaaS si la base HANA est exposée à votre couche analytique.
Vérifiez la disponibilité des vues CDS : assurez-vous que les vues Core Data Services (CDS) standard sont actives dans votre système S/4HANA. Les vues principales requises sont I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation et I_MeasurementDocument. Vous devez également pouvoir accéder à la table d’historique des statuts système JCDS et aux tables des documents de modification (CDHDR/CDPOS) afin de reconstituer l’historique complet des événements, car les vues CDS standard n’affichent souvent que l’état actuel.
Préparez l’environnement SQL : ouvrez votre éditeur SQL. Vérifiez que votre utilisateur dispose des autorisations SELECT sur les vues SQL DDL, généralement dans le schéma SAPABAP1 ou un schéma similaire, pour les objets répertoriés ci-dessus.
Exécutez la requête d’extraction : copiez le script SQL fourni dans votre éditeur. Remplacez l’espace réservé [Your Client Number] par l’ID de votre client SAP, par exemple 100. Si vous filtrez une période précise, mettez à jour les filtres EventTimestamp dans les clauses WHERE.
Transformez les données : la requête gère la plupart des transformations, notamment la conversion des horodatages et l’association des codes de statut à des libellés compréhensibles. Vérifiez toutefois que la colonne EventTimestamp est au format ISO 8601 (YYYY-MM-DDTHH:MM:SS) lors de l’export si votre système cible l’exige.
Exportez le résultat : exécutez la requête et exportez les résultats dans un fichier CSV ou Parquet. Vérifiez que l’encodage UTF-8 est utilisé afin de gérer les caractères spéciaux présents dans les noms d’utilisateurs ou les descriptions.
Validez l’association des colonnes : ouvrez un échantillon de l’export et vérifiez que les colonnes MaintenanceWorkOrder, Activity et EventTimestamp sont entièrement renseignées. Assurez-vous que la colonne Activity contient les chaînes précises indiquées dans les exigences, par exemple Maintenance Order Created et Goods Issue Posted.
Importez les données dans ProcessMind : importez le fichier plat validé dans ProcessMind. Associez la colonne Activity au champ Activity ID, MaintenanceWorkOrder au champ Case ID et EventTimestamp au champ Timestamp.
Configuration
- Filtre client : les systèmes SAP sont multi-clients. Filtrez toujours par
MANDTouClient, par exemple « 100 », afin d’éviter les doublons ou les fuites de données entre clients. - Période : il est recommandé de filtrer la
CreationDatede l’ordre de maintenance sur les 6 à 12 derniers mois. L’interrogation de l’historique complet deJCDS(statuts) ou deCDPOS(documents de modification) sans filtre de date peut entraîner des dépassements de délai. - Clé de langue : la requête utilise par défaut l’anglais (« E »). Si votre organisation utilise une autre langue principale pour les descriptions, adaptez le filtre de langue.
- Accès au système : l’accès au schéma ABAP Core Data Services ou aux tables HANA sous-jacentes est requis. L’accès aux tables brutes JCDS et CDHDR est essentiel pour l’analyse historique des statuts, car les vues CDS seules sont souvent basées sur des instantanés.
- Types d’ordre : la requête extrait tous les types d’ordre. Vous pouvez filtrer
MaintenanceOrderType, par exemple pour ne conserver que PM01 et PM02, si vous souhaitez analyser uniquement certains scénarios de maintenance.
a Exemple de requête 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 = ' ' Étapes
- Vérifiez que l’accès direct en lecture est disponible pour AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG ainsi que pour les tables de documents de modification et de contrôle concernées. Confirmez les noms physiques exacts et les associations de champs dans votre base SAP, car la disponibilité des champs et la structure des tables répliquées varient selon les déploiements.
- Configurez la connexion d’extraction, les identifiants, les dates de début et de fin de l’extraction ainsi que les filtres propres à l’entreprise. Utilisez une période glissante de trois à six mois pour la validation initiale, puis élargissez-la une fois les contrôles de performance et d’exhaustivité réussis.
- Extrayez les attributs d’en-tête des ordres depuis AUFK, les attributs des opérations depuis AFVC et les enregistrements de statut depuis JEST. Reliez les enregistrements associés aux ordres à l’aide du champ de numéro d’ordre utilisé dans votre schéma SAP. Dans de nombreuses implémentations SAP, JEST est une table de statuts actuels. Les horodatages historiques des statuts nécessitent donc une source d’historique ou de documents de modification. Configurez [Your status history table] et ses champs d’horodatage si JEST ne conserve pas l’historique des changements de statut.
- Extrayez la création des notifications depuis QMEL, la création des composants depuis RESB, la création des demandes d’achat depuis EBAN, les informations de sortie de marchandises depuis MSEG et MKPF, les confirmations depuis AFRU, les relevés de mesure depuis IMRG et les enregistrements de règlement du contrôle de gestion depuis [Your controlling document table]. Extrayez les changements de priorité depuis [Your order change document table] et [Your change document item table]. Ces sources sont nécessaires, car AUFK, AFVC et JEST seuls ne peuvent pas fournir les 14 activités demandées.
- Normalisez tous les horodatages sources dans un même fuseau horaire et un même type de données. Convertissez les champs de date et d’heure SAP, ou les champs d’horodatage de la base, en EventTimestamp. Conservez la précision disponible dans le système source. Appliquez la fenêtre d’extraction configurée à EventTimestamp, et pas uniquement à la date de création de l’ordre.
- Créez une ligne d’événement pour chaque occurrence source. Ne comptez pas sur ProcessMind pour déduire les événements. Attribuez la valeur Activity exacte indiquée dans la requête, renseignez MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate et les attributs recommandés disponibles, puis conservez les identifiants sources utiles à l’analyse des doublons.
- Dédupliquez uniquement les événements sources identiques à l’aide de clés sources stables. Ne regroupez pas les changements de statut, confirmations, mouvements de marchandises, relevés de mesure ou documents de règlement distincts survenus à des moments différents. Si plusieurs enregistrements sources représentent un même événement métier, documentez la priorité retenue entre les sources dans la spécification d’extraction.
- Vérifiez que les 14 valeurs Activity apparaissent sous forme de lignes explicites, que chaque ligne possède un identifiant de cas et un horodatage et que les horodatages se situent dans la période d’extraction demandée. Comparez les volumes avec les rapports SAP ou les volumes des tables sources pour les mêmes filtres.
- Exportez le résultat dans un fichier CSV UTF-8 ou dans un autre format d’Event Log pris en charge par ProcessMind. Utilisez une ligne par événement, incluez les colonnes requises avec les noms configurés exacts, conservez les horodatages ISO 8601 lorsque le format le permet, puis importez le fichier ou configurez la connexion à la base de données dans ProcessMind. Définissez MaintenanceWorkOrder comme identifiant de cas, Activity comme colonne d’activité et EventTimestamp comme colonne d’horodatage.
Configuration
- Tables sources et associations : AUFK fournit les données d’en-tête des ordres, AFVC les données des opérations et JEST les données des statuts système. QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, les sources de documents de modification et les sources de documents de contrôle de gestion sont également nécessaires pour produire les 14 activités. Vérifiez les noms exacts des champs dans votre base SAP avant l’exécution.
- Colonnes de sortie requises : MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem et LastDataUpdate doivent être présentes sur chaque ligne d’événement.
- Colonnes de sortie recommandées : MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser et SystemStatus doivent être renseignées lorsqu’elles sont disponibles.
- Période : commencez par trois à six mois. Utilisez une borne de début inclusive et une borne de fin exclusive afin d’éviter les doublons entre les exécutions incrémentielles. Pour les reprises historiques, partitionnez l’extraction par mois ou selon une autre période prise en charge par la base de données.
- Filtres : configurez [Company Code filter], [Order Type filter], [Maintenance Plant filter], [Notification Type filter] et [Document Type filter] selon le périmètre de reporting. N’appliquez pas de filtres qui excluraient les ordres sans notifications, opérations, composants, demandes d’achat, confirmations, mesures ou documents de règlement.
- Historique des statuts : JEST représente généralement les affectations de statuts, mais l’historique des changements peut nécessiter [Your status history table] ou les documents de modification. Configurez la source qui contient l’horodatage des changements de statut et l’historique des transitions.
- Historique des priorités : les changements de priorité nécessitent [Your order change document table] et [Your change document item table], avec l’identifiant d’objet, le nom du champ, l’ancienne valeur, la nouvelle valeur et l’horodatage du changement.
- Valeur du système source : remplacez [Your SAP system identifier] par le nom stable du système source utilisé par votre organisation.
- Dernière mise à jour des données : remplacez [Your extraction timestamp] par l’horodatage généré au début ou à la fin de l’exécution d’extraction et utilisez la même valeur pour toutes les lignes de cette exécution.
- Performances : indexez ou partitionnez les colonnes utilisées pour les jointures et les filtres lorsque cela est possible, limitez la fenêtre d’extraction, sélectionnez uniquement les colonnes nécessaires, traitez les longues périodes par lots et matérialisez les extractions sources intermédiaires lorsque les jointures directes entre schémas sont lentes.
- Prérequis : connectivité à la base de données, autorisations de lecture sur toutes les tables sources configurées, accès aux données pertinentes de Plant Maintenance, Materials Management, Controlling et aux données de mesure, ainsi qu’autorisation d’extraire les données opérationnelles. Vérifiez les éventuelles contraintes de réplication ou de licence liées à la plateforme de base de données.
a Exemple de requête 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; Prêt à commencer ?
Utilisez ces ressources pour commencer à cartographier vos flux de travail de maintenance et identifier les possibilités de réduction des coûts. Notre cadre vous garantit une structure de données adaptée pour obtenir une transparence complète sur vos opérations.
Éliminez dès aujourd’hui les goulots d’étranglement de la maintenance des actifs dans SAP
Réduisez dès maintenant de 30 % la durée de votre cycle de maintenance
Aucune carte bancaire requise… Configuration en 5 minutes