Votre modèle de données pour la maintenance des équipements
Votre modèle de données pour la maintenance des équipements
- Attributs recommandés à collecter
- Activités de maintenance essentielles à suivre
- Consignes techniques d’extraction pour SAP PM
Attributs de maintenance des équipements
| 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 Process Mining. Les analystes peuvent ainsi évaluer l’actualité des analyses et vérifier la fraîcheur des données des Dashboards qui suivent les retards en cours ou le respect des SLA. Pourquoi est-ce important ? Essentiel à la gouvernance des données et à la confiance accordée aux Dashboards. Où trouver ces données Horodatage ETL Exemples 2023-11-01T12:00:00Z | |||
| Horodatage de l’événement EventTimestamp | Date et heure exactes auxquelles l’activité a eu lieu. | ||
| Description Enregistre le moment précis où un événement s’est produit. Pour les changements de statut, l’heure provient de la mise à jour du statut système ; pour les opérations, elle correspond à l’heure de confirmation. Des horodatages exacts sont indispensables pour calculer les temps de cycle et les délais, ainsi que pour repérer les goulots d’étranglement entre les étapes du processus, comme la planification et l’exécution. Pourquoi est-ce important ? Nécessaire pour ordonner correctement les événements et calculer tous les KPI fondés sur une durée. Où trouver ces données JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Exemples 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Nom de l’activité Activity | Tâche précise ou changement de statut survenu. | ||
| Description Représente une étape du processus de maintenance, par exemple « Ordre de maintenance créé », « Sortie de marchandises enregistrée » ou « Opération de l’ordre confirmée ». Ces activités sont généralement déduites des tables de gestion des statuts (JEST) pour les changements de statut, ou des tables de transactions (AFRU pour les confirmations, MKPF pour les mouvements de matériel). Cet attribut détermine les nœuds de la carte du processus. Pourquoi est-ce important ? Cet attribut définit le « quoi » du processus. Il est essentiel pour découvrir le flux du processus et ses variantes. Où trouver ces données Déduit de JEST (statuts), AFRU (confirmations), QMEL (notifications) Exemples Ordre de maintenance crééOrdre lancéAchèvement technique | |||
| Ordre de travail de maintenance MaintenanceWorkOrder | Identifiant unique de l’ordre de travail de maintenance. | ||
| Description L’ordre de travail de maintenance est le document central de SAP Plant Maintenance (table AUFK, champ AUFNR). Il relie le besoin de maintenance (notification) aux ressources d’exécution, aux matériaux et aux coûts. Dans l’analyse Process Mining, il sert d’ID de cas et permet de reconstituer le cycle de vie complet d’une intervention, de sa création à son achèvement technique et commercial. Pourquoi est-ce important ? Cette clé unique relie toutes les activités, les coûts et les horodatages, ce qui permet de visualiser le flux du processus. Où trouver ces données Table SAP AUFK, champ AUFNR Exemples 00004001234540012345000040098765 | |||
| Système source SourceSystem | Système d’origine des donné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 qui peuvent avoir des identifiants identiques, mais relever d’entités juridiques ou d’environnements système différents. Pourquoi est-ce important ? Garantit l’unicité des données et leur traçabilité dans les environnements multisystèmes. Où trouver ces données Configuration système / journal d’extraction Exemples SAP_ECC_P01SAP_S4H_100 | |||
| Centre de travail principal MainWorkCenter | Centre de travail ou équipe principalement affecté à l’exécution de l’ordre. | ||
| Description Le centre de travail principal (VAPLZ) désigne le groupe de techniciens ou de machines chargé d’effectuer les travaux. Cet attribut est associé à « Équipe » et permet d’analyser l’efficacité de l’exécution, par exemple le temps moyen de réparation par équipe. Il aide à distinguer la main-d’œuvre interne des prestataires externes. Pourquoi est-ce important ? Permet d’analyser les performances par ressource. Où trouver ces données Table SAP AFKO, champ VAPLZ (ou AUFK-VAPLZ selon la configuration) Exemples MÉCANIQUE_01ÉQUIPE_ÉLECTRIQUEPRESTATAIRE_EXT | |||
| Date de fin cible TargetFinishDate | Date prévue d’achèvement des travaux de maintenance. | ||
| Description Cette date, généralement la date de fin de base (GLTRP), correspond à l’échéance de l’ordre de travail. Elle est comparée à l’horodatage réel d’achèvement pour calculer le KPI « Taux de respect des SLA ». Elle sert de référence pour déterminer si l’ordre de travail a été terminé dans les délais ou en retard. Pourquoi est-ce important ? Le point de référence pour tous les calculs de livraison dans les délais (OTD). Où trouver ces données Table SAP AFKO, champ GLTRP Exemples 2023-12-012023-12-15 | |||
| Emplacement technique FunctionalLocation | Emplacement hiérarchique où l’actif est installé. | ||
| Description Indique l’emplacement de la structure technique où la tâche de maintenance est effectuée (TPLNR). Contrairement à l’équipement, qui peut être déplacé, l’emplacement technique est fixe. Cet attribut alimente le Dashboard de la durée des cycles d’inspection technique et permet de comparer les performances entre différentes zones du site, par exemple la chaufferie et la ligne de conditionnement. Pourquoi est-ce important ? Permet d’analyser les performances de maintenance selon l’emplacement et la hiérarchie. Où trouver ces données Table SAP IFLOT, champ TPLNR (ou via AUFK-TPLNR) Exemples USINE1-BÂT2-LIG01ÉTATS-UNIS-TX-DAL-01 | |||
| Groupe de planificateurs ResponsiblePlannerGroup | Groupe de planificateurs chargé du traitement de l’ordre. | ||
| Description Le groupe de planificateurs (INGRP) identifie l’équipe ou le service chargé de planifier les travaux de maintenance. Cet attribut est associé à « Service » et joue un rôle essentiel dans le Dashboard d’utilisation et de planification des ressources, qui permet de repérer les équipes de planification à l’origine de goulots d’étranglement pendant la préparation. Pourquoi est-ce important ? Identifie l’équipe administrative responsable de la planification. Où trouver ces données 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 une machine ou un actif précis. En regroupant les données selon ce champ, les analystes peuvent créer le Dashboard des coûts de maintenance et du débit des actifs afin de repérer les équipements qui nécessitent des réparations fréquentes et coûteuses. Cet attribut permet d’analyser la maintenance axée sur la fiabilité. Pourquoi est-ce important ? Relie la performance du processus aux actifs physiques concernés. Où trouver ces données Table SAP AUFK, champ EQUNR Exemples 10004567POMPE-001CVC-202 | |||
| Numéro de notification NotificationNumber | Notification de maintenance à l’origine de cet ordre. | ||
| Description Le numéro de notification (QMNUM) relie l’ordre de travail à la demande initiale. Ce lien est nécessaire pour calculer le délai complet entre la réception de la demande de maintenance et l’achèvement des travaux. Sans lui, l’analyse ne tient pas compte de la phase initiale de détection et de signalement. Pourquoi est-ce important ? Relie la phase d’exécution à la phase de demande ou de détection. Où trouver ces données Table SAP AUFK, champ QMNUM Exemples 1000050010000501 | |||
| Priorité de maintenance MaintenancePriority | 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 des ordres de travail urgents. L’analyse des flux par priorité permet de vérifier si les ordres prioritaires sont réellement traités plus rapidement que les interventions courantes. Pourquoi est-ce important ? Indicateur clé pour l’analyse des SLA et le repérage des interventions urgentes. Où trouver ces données 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, TECO). | ||
| Description Chaîne ou liste concaténée des statuts système actifs (table JEST) actuellement associés à l’ordre. Les valeurs courantes comprennent CRTD (créé), REL (libéré), TECO (terminé techniquement) et CLSD (clôturé). Ces statuts permettent de filtrer les dossiers ouverts et clôturés dans le « Suivi du backlog et des travaux en cours ». Pourquoi est-ce important ? Principal indicateur de l’étape du cycle de vie de l’ordre. Où trouver ces données Module fonction SAP STATUS_TEXT_EDIT ou table JEST Exemples REL CNFTECOCRTD MACM | |||
| Type d’ordre de maintenance MaintenanceOrderType | Classe l’ordre de travail par catégorie, 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 (remise en état). Cet attribut est essentiel au suivi de l’impact des ordres de travail urgents et à la segmentation des variantes du processus, car les flux de travail préventifs diffèrent nettement des flux réactifs. Pourquoi est-ce important ? Indispensable pour distinguer les travaux planifiés des travaux imprévus dans l’analyse. Où trouver ces données Table SAP AUFK, champ AUART Exemples PM01PM02PM03 | |||
| Usine de maintenance MaintenancePlant | Usine logistique responsable de la maintenance. | ||
| Description L’usine (WERKS) est la principale unité organisationnelle de la logistique. Elle distingue les données selon le site physique. Cet attribut est essentiel pour comparer les performances entre les sites et est associé à « Unité commerciale » afin de permettre un filtrage organisationnel de haut niveau dans les Dashboards. Pourquoi est-ce important ? Principal filtre organisationnel pour comparer les sites. Où trouver ces données Table SAP AUFK, champ WERKS Exemples 100020003000 | |||
| Utilisateur ayant créé l’ordre CreatedByUser | Nom d’utilisateur de la personne qui a créé l’ordre. | ||
| Description Identifie l’utilisateur (ERNAM) à l’origine de l’ordre de travail. Dans le modèle générique, cette valeur est associée à « Utilisateur ». Elle permet de comparer les créations manuelles et automatisées et facilite l’audit de l’activité « Ordre de maintenance créé ». Pourquoi est-ce important ? Permet d’analyser les comportements des utilisateurs et de réaliser des audits. Où trouver ces données Table SAP AUFK, champ ERNAM Exemples JSMITHBSERVICEDDAVIS | |||
| Coût réel total TotalActualCost | Coût réel total imputé à l’ordre de travail. | ||
| Description Coûts cumulés de la main-d’œuvre, des matériaux et des services (table PMCO). Cet attribut alimente le Dashboard « Coûts et volume de la maintenance des équipements », qui permet aux responsables de mesurer l’incidence financière des activités de maintenance. Il est essentiel pour comparer le coût de la réparation à celui du remplacement des équipements. Pourquoi est-ce important ? Ajoute une dimension financière aux données opérationnelles du processus. Où trouver ces données Table SAP PMCO (somme du type de valeur 04, réel) Exemples 150.002500.500.00 | |||
| Heures de main-d’œuvre prévues PlannedLaborHours | Nombre d’heures de main-d’œuvre estimé 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 « Performance de la planification et des estimations ». Pourquoi est-ce important ? Métrique de référence pour analyser la précision de la planification. Où trouver ces données Table SAP AFKO (somme du travail planifié pour les opérations) Exemples 4.08.512.0 | |||
| Intervention d’urgence IsEmergencyWork | Indique si l’ordre de travail correspond à une urgence. | ||
| Description Attribut booléen calculé à partir de la priorité de maintenance. Si la priorité est « 1 » (ou correspond au code d’urgence défini dans la configuration), l’indicateur prend la valeur vrai. Il simplifie le filtrage et le calcul du KPI « Part des ordres de travail d’urgence », sans logique complexe dans le Dashboard. Pourquoi est-ce important ? Simplifie le filtrage pour l’analyse des interventions correctives critiques. Où trouver ces données Calculé à partir de MaintenancePriority Exemples truefalse | |||
| Reprise IsRework | Indique si l’ordre a donné lieu à des reprises. | ||
| Description Valeur booléenne calculée qui indique si une boucle s’est produite dans le processus, notamment lorsque l’activité « Tâche de maintenance exécutée » a eu lieu plusieurs fois ou que le statut est repassé de « Terminé techniquement » à « En cours ». Cet indicateur alimente le KPI « Taux de reprises en maintenance » et aide à repérer les problèmes de qualité. Pourquoi est-ce important ? Contribue directement à l’analyse du contrôle qualité. Où trouver ces données Calculé à partir du flux du processus Exemples truefalse | |||
Activités de maintenance des équipements
| Activité | Description | ||
|---|---|---|---|
| Achèvement commercial défini | Marque la clôture administrative définitive de l’ordre de travail et empêche toute nouvelle imputation de coûts. L’activité est repérée par le changement de statut à CLSD (clôturé). | ||
| Pourquoi est-ce important ? Marque la fin définitive du cycle de vie de l’ordre. Elle est essentielle pour vérifier l’exactitude des données et la conformité des dossiers. Où trouver ces données Table JCDS, statut I0046 (CLSD). Données à recueillir Enregistrée 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. L’activité est repérée par le changement de statut à TECO (achèvement technique). | ||
| Pourquoi est-ce important ? Il s’agit du principal point de fin pour l’analyse opérationnelle : l’actif est remis en état et la maintenance est terminée. Où trouver ces données Table JCDS, statut I0045 (TECO). Données à recueillir Enregistrée lorsque le statut passe à TECO dans JCDS Type d’événement explicit | |||
| Opération de l’ordre confirmée | Correspond à l’enregistrement du temps réellement consacré par un technicien à une opération précise. Cette activité reflète le travail effectué sur l’actif. | ||
| Pourquoi est-ce 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ù trouver ces données Table AFRU (confirmations d’ordre). Données à recueillir Enregistrée lors de l’exécution de la transaction IW41 Type d’événement explicit | |||
| Ordre de maintenance créé | Marque la création de l’ordre de travail de maintenance dans le système. L’activité est extraite explicitement de l’horodatage de création dans la table des données de base des ordres. | ||
| Pourquoi est-ce important ? Cet événement central du cas marque le passage de la demande à la planification et à l’exécution. Où trouver ces données Table AUFK, champs ERDAT (date) et ERFZEIT (heure). Données à recueillir Enregistrée 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. L’activité est repérée par le changement de statut à REL dans les journaux de statuts système. | ||
| Pourquoi est-ce important ? Cette étape marque la transition entre la planification et l’exécution. Elle est essentielle pour mesurer le délai de planification et d’estimation. Où trouver ces données Table JCDS (documents de changement de statut), statut I0002 (REL). Données à recueillir Enregistrée lorsque le statut passe à REL dans JCDS Type d’événement explicit | |||
| Sortie de marchandises enregistrée | Enregistre la consommation physique de pièces de rechange ou de matériaux pour l’ordre de travail. L’activité est extraite des en-têtes de documents de matériel liés à l’ordre. | ||
| Pourquoi est-ce important ? Confirme que les pièces sont disponibles et ont été prélevées. Elle influe directement sur l’analyse du temps d’attente lié à la disponibilité des pièces. Où trouver ces données Tables MSEG/MKPF, type de mouvement 261 (sortie de marchandises pour ordre). Données à recueillir Enregistrée 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, qui indique que l’ordre a été rouvert. Cette opération crée une boucle de reprise dans le modèle de processus. | ||
| Pourquoi est-ce important ? Indicateur principal du KPI de taux de reprise en maintenance, qui met en évidence les clôtures prématurées ou les problèmes de qualité. Où trouver ces données Table JCDS, statut I0045 (TECO) passé à Inactif. Données à recueillir Enregistrée lorsque le statut TECO est désactivé 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. L’activité est extraite de la création d’une ligne de réservation. | ||
| Pourquoi est-ce important ? Repère le début du cycle d’approvisionnement des pièces nécessaires et alimente le Dashboard des délais d’approvisionnement en pièces de rechange. Où trouver ces données Table RESB, champ BDTER (date de besoin) ou horodatage de création. Données à recueillir Enregistrée lorsqu’une ligne est ajoutée à RESB Type d’événement explicit | |||
| Coûts de l’ordre imputés | Indique que les coûts cumulés sur l’ordre ont été transférés vers l’objet de contrôle de gestion, par exemple un centre de coûts. L’activité est extraite du document de contrôle de gestion. | ||
| Pourquoi est-ce important ? Suit la clôture financière et alimente le KPI de durée d’imputation financière. Où trouver ces données Table COBK (objet CO : en-tête de document), liée à l’ordre. Données à recueillir Enregistrée lors de l’exécution de la transaction d’imputation KO88 Type d’événement explicit | |||
| Demande d’achat créée | Indique qu’une demande d’approvisionnement externe ou de services a été créée. Cet événement relie l’ordre de maintenance interne à la chaîne d’approvisionnement externe. | ||
| Pourquoi est-ce important ? Utile pour analyser les retards dus aux fournisseurs externes ou à l’approvisionnement en matériaux non stockés. Où trouver ces données Table EBAN, liée via l’imputation à AUFK-AUFNR. Données à recueillir Enregistrée à la création d’un enregistrement EBAN Type d’événement explicit | |||
| Notification de maintenance créée | Enregistre la création initiale d’une notification de maintenance, qui déclenche souvent un ordre de travail. Cette activité est extraite de l’horodatage de création dans la table QMEL et relie la demande initiale à l’ordre d’exécution. | ||
| Pourquoi est-ce important ? Cette activité marque le début du processus de maintenance de bout en bout. Elle permet de calculer le délai entre la détection d’une panne et la création de l’ordre. Où trouver ces données Table QMEL, champs ERDAT (date de création) et MZEIT (heure). Lien avec l’ordre via QMEL-AUFNR. Données à recueillir Enregistrée à la création d’un enregistrement dans la table QMEL Type d’événement explicit | |||
| Ordre de travail planifié | Indique que les opérations ont été planifiées pour une capacité ou une date précise. L’activité est déduite de l’attribution du statut Dispatch aux opérations. | ||
| Pourquoi est-ce important ? Mesure l’efficacité de la répartition des ressources et alimente le Dashboard d’utilisation et de planification des ressources. Où trouver ces données Table JCDS (documents de changement de statut) pour les opérations (ObjType OV), statut I0009 (DSPT). Données à recueillir Comparer le champ de statut avant et après la modification Type d’événement inferred | |||
| Priorité de maintenance modifiée | Enregistre la modification du niveau de priorité de l’ordre de travail, par exemple son passage en urgence. L’activité est déduite des documents de modification associés aux données de base de l’ordre. | ||
| Pourquoi est-ce important ? Le suivi des changements de priorité permet d’expliquer les écarts du processus et d’alimenter le suivi de l’impact des ordres de travail urgents en repérant les escalades réactives. Où trouver ces données Tables CDPOS/CDHDR, classe d’objet AUFTRAG, champ PRIOK. Données à recueillir Enregistrée dans les documents de modification (CDPOS) Type d’événement explicit | |||
| Relevé de mesure enregistré | Enregistre la saisie d’un document de mesure, par exemple un relevé de compteur ou une évaluation de l’état. Cette activité correspond souvent à l’événement d’inspection technique. | ||
| Pourquoi est-ce important ? Indispensable à la maintenance conditionnelle et au suivi de la durée des cycles d’inspection technique. Où trouver ces données Table IMRG (document de mesure), liée à un équipement ou à un emplacement technique. Données à recueillir Enregistrée à la création d’un document de mesure Type d’événement explicit | |||
Guides d’extraction
Étapes
Repérez l’interface de la source de données : déterminez comment accéder à l’interface SQL de SAP S/4HANA. Vous pouvez généralement le faire avec SAP HANA Studio, les outils ABAP Development Tools (ADT) dans Eclipse ou une chaîne de connexion DBaaS, si la base de données HANA est accessible depuis votre environnement d’analyse.
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 principales vues nécessaires 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) pour reconstituer l’historique complet des événements, car les vues CDS standard ne présentent 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 le paramètre fictif [Your Client Number] par l’ID de votre client SAP (par exemple, 100). Si vous filtrez les données selon une période précise, modifiez les filtres EventTimestamp dans les clauses WHERE.
Transformez les données : la requête effectue la plupart des transformations, notamment la conversion des horodatages et l’association des codes de statut à des libellés compréhensibles. Toutefois, si le système cible l’exige, veillez à formater la colonne EventTimestamp selon la norme ISO 8601 (YYYY-MM-DDTHH:MM:SS) lors de l’exportation.
Exportez le résultat : exécutez la requête et exportez les résultats dans un fichier CSV ou Parquet. Choisissez l’encodage UTF-8 pour préserver les caractères spéciaux dans les noms d’utilisateur et les descriptions.
Vérifiez l’association des colonnes : ouvrez un échantillon du fichier exporté et vérifiez que les colonnes MaintenanceWorkOrder, Activity et EventTimestamp sont renseignées. Assurez-vous que la colonne Activity contient les libellés précis indiqués 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 peuvent comporter plusieurs clients. Filtrez toujours par
MANDTouClient(par exemple, « 100 ») pour éviter les doublons ou les fuites de données entre clients. - Période : il est recommandé de filtrer la
CreationDatede l’ordre de maintenance pour ne conserver que les 6 à 12 derniers mois. Une requête portant sur l’historique complet deJCDS(statuts) ou deCDPOS(documents de modification), sans filtre de date, peut entraîner des délais d’expiration. - Clé de langue : par défaut, la requête utilise l’anglais (« E »). Si votre organisation utilise une autre langue principale pour les descriptions, modifiez 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 nécessaire. L’accès aux tables brutes JCDS et CDHDR est essentiel pour analyser l’historique des statuts, car les vues CDS seules ne présentent souvent qu’un instantané.
- 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 des scénarios de maintenance précis.
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 vous disposez d’un accès direct en lecture à AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, ainsi qu’aux tables pertinentes des documents de modification et de contrôle de gestion. Vérifiez les noms physiques exacts et les associations de champs dans votre base de données SAP, car la disponibilité des champs et la structure des tables répliquées varient selon le déploiement.
- Configurez la connexion d’extraction, les identifiants, les dates de début et de fin d’extraction ainsi que les éventuels filtres propres à l’entreprise. Pour la validation initiale, utilisez une période glissante de trois à six mois, puis étendez-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 à un ordre à 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. Pour obtenir les horodatages historiques des statuts, il faut donc une source d’historique des statuts 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 les créations de notifications depuis QMEL, les créations de composants depuis RESB, les créations de demandes d’achat depuis EBAN, les sorties de marchandises depuis MSEG et MKPF, les confirmations depuis AFRU, les relevés de mesure depuis IMRG et les enregistrements de règlement de 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 ne suffisent pas à fournir les 14 activités demandées.
- Normalisez tous les horodatages sources dans un même fuseau horaire et un type de données d’horodatage unique. Convertissez les champs de date et d’heure SAP, ou les champs d’horodatage de la base de données, en EventTimestamp. Conservez la précision des horodatages disponible dans le système. Appliquez la période 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.
- Éliminez uniquement les doublons correspondant à des événements sources identiques, à l’aide de clés sources stables. Ne regroupez pas les changements de statut, confirmations, mouvements de matériaux, relevés de mesure ou documents de règlement distincts survenus à des moments différents. Si plusieurs enregistrements sources correspondent à un même événement métier, consignez l’ordre de priorité des sources retenues dans les spécifications d’extraction.
- Vérifiez que les 14 valeurs d’activité figurent explicitement dans les lignes, que chaque ligne comporte un identifiant de cas et un horodatage, et que les horodatages se situent dans la période d’extraction demandée. Comparez les volumes aux rapports SAP ou aux nombres d’enregistrements des tables sources avec les mêmes filtres.
- Exportez le résultat dans un fichier CSV encodé en UTF-8 ou dans un autre format de journal d’événements 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 si le format le permet, puis importez le fichier dans ProcessMind ou configurez la connexion à la base de données. 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 de statut 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 obtenir les 14 activités. Vérifiez les noms exacts des champs dans votre base de données SAP avant l’exécution.
- Colonnes de sortie requises : chaque ligne d’événement doit contenir MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem et LastDataUpdate.
- Colonnes de sortie recommandées : renseignez MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser et SystemStatus lorsqu’elles sont disponibles.
- Période : commencez par trois à six mois. Utilisez une borne de début incluse et une borne de fin exclue pour éviter les doublons entre les exécutions incrémentielles. Pour les reprises historiques, répartissez 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] en fonction du périmètre des rapports. N’appliquez pas de filtres qui excluent les ordres sans notifications, opérations, composants, demandes d’achat, confirmations, mesures ou documents de règlement.
- Historique des statuts : JEST contient généralement les affectations de statut, mais l’historique des changements peut nécessiter [Your status history table] ou des 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 correspondants.
- 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’extraction et utilisez la même valeur pour toutes les lignes de cette exécution.
- Performances : indexez ou partitionnez les colonnes de jointure et de filtrage lorsque cela est autorisé, limitez la période d’extraction, sélectionnez uniquement les colonnes nécessaires, traitez les longues périodes par lots et matérialisez les extractions sources intermédiaires si les jointures directes entre schémas sont lentes.
- Prérequis : connectivité à la base de données, autorisation de lecture sur toutes les tables sources configurées, accès aux données pertinentes de Plant Maintenance, Materials Management, Controlling et des mesures, ainsi qu’autorisation d’extraire les données opérationnelles. Vérifiez les éventuelles contraintes de réplication ou de licence de la plateforme de base de données.
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 ?
Consultez ces ressources pour commencer à cartographier vos flux de travail de maintenance et à repérer les possibilités de réduction des coûts. Notre cadre vous aide à structurer les données nécessaires pour obtenir une vision claire de vos opérations.
Réduisez dès aujourd’hui les goulots d’étranglement de la maintenance dans SAP
Réduisez dès maintenant de 30 % le temps de cycle de maintenance
Aucune carte bancaire requise… Configuration en 5 minutes