Su Template de datos de mantenimiento de activos
Su Template de datos de mantenimiento de activos
- Atributos recomendados para recopilar
- Actividades de mantenimiento clave que conviene seguir
- Indicaciones técnicas para extraer datos de SAP PM
Atributos de mantenimiento de activos
| Nombre | Descripción | ||
|---|---|---|---|
| Marca de tiempo del evento EventTimestamp | La fecha y hora exactas en que se produjo la actividad. | ||
| Descripción Registra el momento exacto en que se produjo un evento. En los cambios de estado, se obtiene de la hora de actualización del estado del sistema; en las operaciones, de la hora de confirmación. Las marcas de tiempo precisas son fundamentales para calcular los tiempos de ciclo y de entrega, e identificar cuellos de botella entre pasos del proceso, como «Planificación» y «Ejecución». Por qué es importante Es necesario para ordenar correctamente los eventos y calcular todos los KPI basados en la duración. Dónde obtenerlo JEST (UDATE/UTIME), AFRU (ISDD/ISDZ), MKPF (CPUDT/CPUTM) Ejemplos 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| Nombre de la actividad Activity | La tarea específica realizada o el cambio de estado que se produjo. | ||
| Descripción Representa el paso realizado en el proceso de mantenimiento, como «Orden de mantenimiento creada», «Salida de mercancías contabilizada» u «Operación de orden confirmada». Por lo general, estos datos se obtienen de las tablas de gestión de estados (JEST) para los cambios de estado o de las tablas de transacciones (AFRU para las confirmaciones y MKPF para los movimientos de material). Este atributo determina los nodos del mapa del proceso. Por qué es importante Define el «qué» del proceso y es esencial para descubrir el flujo del proceso y sus variantes. Dónde obtenerlo Se obtiene de JEST (estados), AFRU (confirmaciones) y QMEL (avisos) Ejemplos Orden de mantenimiento creadaOrden liberadaFinalizado técnicamente | |||
| Orden de trabajo de mantenimiento MaintenanceWorkOrder | Identificador único de la orden de trabajo de mantenimiento. | ||
| Descripción La orden de trabajo de mantenimiento es el documento central de SAP Plant Maintenance (tabla AUFK, campo AUFNR). Vincula la necesidad de mantenimiento (aviso) con los recursos, materiales y costes necesarios para la ejecución. En el análisis de Process Mining, sirve como ID del caso y permite reconstruir el ciclo de vida completo de un trabajo de mantenimiento, desde su creación hasta su cierre técnico y empresarial. Por qué es importante Es la clave única que vincula todas las actividades, los costes y las marcas de tiempo, y permite visualizar el flujo del proceso. Dónde obtenerlo Tabla SAP AUFK, campo AUFNR Ejemplos 00004001234540012345000040098765 | |||
| Sistema de origen SourceSystem | El sistema del que proceden los datos. | ||
| Descripción Identifica el cliente o la instancia SAP específicos (por ejemplo, «SAP_PM_PROD»). En entornos con varios sistemas ERP, este atributo permite distinguir registros que podrían tener el mismo ID, pero pertenecer a distintas entidades jurídicas o entornos de sistema. Por qué es importante Garantiza la unicidad y la trazabilidad de los datos en entornos con varios sistemas. Dónde obtenerlo Configuración del sistema / registro de extracción Ejemplos SAP_ECC_P01SAP_S4H_100 | |||
| Última actualización de datos LastDataUpdate | Marca de tiempo de la extracción de datos más reciente. | ||
| Descripción Indica cuándo se actualizaron por última vez los datos del modelo de Process Mining. Esto permite a los analistas saber qué tan actualizada está la información y comprobar la vigencia de los datos en los Dashboards que supervisan el trabajo pendiente en tiempo real o el cumplimiento de los SLA. Por qué es importante Es fundamental para la gobernanza de datos y para generar confianza en los Dashboards. Dónde obtenerlo Marca de tiempo de ETL Ejemplos 2023-11-01T12:00:00Z | |||
| Centro de mantenimiento MaintenancePlant | Centro logístico responsable del mantenimiento. | ||
| Descripción El centro (WERKS) es la principal unidad organizativa de logística y permite separar los datos por instalación física. Este atributo es esencial para comparar el rendimiento entre distintas ubicaciones y se asigna a «Unidad de negocio» para aplicar filtros organizativos de alto nivel en los Dashboards. Por qué es importante Es el principal filtro organizativo para comparar el rendimiento de las instalaciones. Dónde obtenerlo Tabla SAP AUFK, campo WERKS Ejemplos 100020003000 | |||
| Centro de trabajo principal MainWorkCenter | Centro de trabajo o equipo principal asignado para ejecutar la orden. | ||
| Descripción El centro de trabajo principal (VAPLZ) representa al grupo de técnicos o máquinas que realizará el trabajo físico. Este atributo se asigna a «Equipo» y es esencial para analizar la eficiencia de ejecución, por ejemplo, el tiempo medio de reparación de cada equipo. También permite distinguir entre personal interno y contratistas externos. Por qué es importante Permite analizar el rendimiento por recurso. Dónde obtenerlo Tabla SAP AFKO, campo VAPLZ (o AUFK-VAPLZ, según la configuración) Ejemplos MECH_01ELEC_TEAMEXT_CONT | |||
| Estado del sistema SystemStatus | Estado técnico actual de la orden (por ejemplo, REL o TECO). | ||
| Descripción Cadena concatenada o lista de los estados activos del sistema (de JEST) aplicados actualmente a la orden. Entre los valores habituales se encuentran CRTD (creada), REL (liberada), TECO (finalizada técnicamente) y CLSD (cerrada). Este dato permite filtrar los casos abiertos y cerrados en el monitor de trabajo pendiente y en curso. Por qué es importante Principal indicador de la etapa del ciclo de vida de la orden. Dónde obtenerlo Módulo de función SAP STATUS_TEXT_EDIT o tabla JEST Ejemplos REL CNFTECOCRTD MACM | |||
| Fecha de finalización prevista TargetFinishDate | Fecha programada para completar los trabajos de mantenimiento. | ||
| Descripción Esta fecha, normalmente la fecha básica de fin (GLTRP), representa el plazo de la orden de trabajo. Se compara con la marca de tiempo de finalización real para calcular el KPI de cumplimiento del SLA. Sirve como referencia para determinar si una orden de trabajo se completa a tiempo o con retraso. Por qué es importante Referencia para todos los cálculos de entrega a tiempo (OTD). Dónde obtenerlo Tabla SAP AFKO, campo GLTRP Ejemplos 2023-12-012023-12-15 | |||
| Grupo de planificación ResponsiblePlannerGroup | Grupo de planificadores responsable de tramitar la orden. | ||
| Descripción El grupo de planificación (INGRP) identifica al equipo o departamento responsable de planificar el trabajo de mantenimiento. Se asigna a «Departamento» y es fundamental para que el Dashboard de utilización y programación de recursos permita identificar qué equipos de planificación generan cuellos de botella durante la preparación. Por qué es importante Identifica al equipo administrativo responsable del proceso de planificación. Dónde obtenerlo Tabla SAP AUFK, campo INGRP Ejemplos M01ELEMEC | |||
| Número de aviso NotificationNumber | Aviso de mantenimiento que activó esta orden. | ||
| Descripción El número de aviso (QMNUM) vincula la orden de trabajo con la solicitud inicial (aviso). Este vínculo es necesario para calcular el tiempo de entrega completo, desde la recepción de la solicitud de mantenimiento hasta su finalización. Sin él, el análisis no incluye la fase inicial de detección y notificación del ciclo de vida del mantenimiento. Por qué es importante Conecta la fase de ejecución con la fase de solicitud o detección. Dónde obtenerlo Tabla SAP AUFK, campo QMNUM Ejemplos 1000050010000501 | |||
| Número de equipo EquipmentNumber | Identificador del activo físico específico al que se realiza el mantenimiento. | ||
| Descripción El número de equipo (EQUNR) identifica cada máquina o activo. Al agrupar los datos por este campo, los analistas pueden calcular el Dashboard de costes de mantenimiento y rendimiento de los activos para detectar equipos problemáticos que requieren reparaciones frecuentes y costosas. Esto permite analizar el mantenimiento centrado en la confiabilidad. Por qué es importante Vincula el rendimiento del proceso con activos físicos específicos. Dónde obtenerlo Tabla SAP AUFK, campo EQUNR Ejemplos 10004567PUMP-001HVAC-202 | |||
| Prioridad de mantenimiento MaintenancePriority | Nivel de urgencia asignado a la orden de trabajo. | ||
| Descripción Indica la prioridad (PRIOK) de la tarea de mantenimiento, por ejemplo, «1-Muy alta», «2-Alta» o «3-Media». Este campo es el dato de entrada directo para el KPI de proporción de órdenes de trabajo de emergencia. Analizar el flujo por prioridad permite determinar si las órdenes de alta prioridad avanzan realmente más rápido por el sistema que los trabajos rutinarios. Por qué es importante Es un factor clave para el análisis de SLA y la identificación de trabajos de emergencia. Dónde obtenerlo Tabla SAP AFKO, campo PRIOK (o AUFK mediante una vista) Ejemplos 1-Emergencia2-Alta3-Media4-Baja | |||
| Tipo de orden de mantenimiento MaintenanceOrderType | Clasifica la orden de trabajo (por ejemplo, preventiva o correctiva). | ||
| Descripción El tipo de orden (AUART) en SAP PM distingue la naturaleza del trabajo de mantenimiento. Entre los tipos habituales se encuentran PM01 (correctivo), PM02 (preventivo) y PM03 (reacondicionamiento). Este atributo es esencial para el «Monitor de impacto de las órdenes de trabajo de emergencia» y para segmentar las variantes del proceso, ya que los flujos de trabajo preventivos difieren considerablemente de los reactivos. Por qué es importante Es fundamental para segmentar el análisis entre el trabajo planificado y el no planificado. Dónde obtenerlo Tabla SAP AUFK, campo AUART Ejemplos PM01PM02PM03 | |||
| Ubicación técnica FunctionalLocation | Ubicación jerárquica donde está instalado el activo. | ||
| Descripción Representa el lugar de la estructura técnica donde se realiza el trabajo de mantenimiento (TPLNR). A diferencia del equipo, que puede trasladarse, la ubicación técnica es fija. Este atributo permite comparar el rendimiento de distintas áreas de la planta (por ejemplo, la sala de calderas y la línea de envasado) en el Dashboard de tiempos de ciclo de inspección técnica. Por qué es importante Permite analizar el rendimiento del mantenimiento por ubicación y jerarquía. Dónde obtenerlo Tabla SAP IFLOT, campo TPLNR (o mediante AUFK-TPLNR) Ejemplos PLANT1-BLD2-LN01US-TX-DAL-01 | |||
| Usuario que creó la orden CreatedByUser | Nombre de usuario de la persona que creó la orden. | ||
| Descripción Identifica al usuario (ERNAM) responsable de iniciar la orden de trabajo. Se asigna a «Usuario» en el modelo genérico. Permite analizar si la creación fue manual o automatizada y facilita la auditoría de la actividad «Orden de mantenimiento creada». Por qué es importante Permite analizar el comportamiento de los usuarios y realizar auditorías. Dónde obtenerlo Tabla SAP AUFK, campo ERNAM Ejemplos JSMITHBSERVICEDDAVIS | |||
| Coste real total TotalActualCost | Coste real total imputado a la orden de trabajo. | ||
| Descripción Costes agregados de mano de obra, materiales y servicios (de la tabla PMCO). Este atributo alimenta el Dashboard de costes y rendimiento del mantenimiento de activos, donde los responsables pueden consultar el impacto financiero de las actividades de mantenimiento. Es esencial para determinar si reparar un activo resulta más rentable que sustituirlo. Por qué es importante Aporta la dimensión financiera a los datos operativos del proceso. Dónde obtenerlo Tabla SAP PMCO (suma del tipo de valor 04, real) Ejemplos 150.002500.500.00 | |||
| Es un retrabajo IsRework | Indicador que señala si la orden incluyó actividades de retrabajo. | ||
| Descripción Valor booleano calculado que identifica si se produjo un bucle en el proceso. Se activa, en concreto, si la actividad «Tarea de mantenimiento ejecutada» se realizó más de una vez o si el estado pasó de «Finalizada técnicamente» a «En curso». Este dato alimenta el KPI de tasa de retrabajo de mantenimiento y ayuda a detectar problemas de calidad. Por qué es importante Contribuye directamente al análisis del control de calidad. Dónde obtenerlo Calculado a partir del flujo del proceso Ejemplos truefalse | |||
| Es un trabajo de emergencia IsEmergencyWork | Indicador que señala si la orden de trabajo es de emergencia. | ||
| Descripción Atributo booleano calculado a partir de la prioridad de mantenimiento. Si la prioridad es «1» (o el código configurado para emergencias), el indicador es verdadero. Esto facilita el filtrado y el cálculo del KPI de proporción de órdenes de trabajo de emergencia, sin necesidad de lógica compleja en los Dashboards. Por qué es importante Facilita el filtrado para analizar el mantenimiento reactivo crítico. Dónde obtenerlo Calculado a partir de MaintenancePriority Ejemplos truefalse | |||
| Horas de mano de obra planificadas PlannedLaborHours | Horas de mano de obra estimadas para la orden. | ||
| Descripción Trabajo total planificado (ARBEI) de las operaciones de la orden. Comparar este valor con la duración real de la actividad permite evaluar la precisión de la planificación del mantenimiento en el Dashboard de rendimiento de planificación y estimación. Por qué es importante Métrica básica para analizar la precisión de la planificación. Dónde obtenerlo Tabla SAP AFKO (suma del trabajo planificado de las operaciones) Ejemplos 4.08.512.0 | |||
Actividades de mantenimiento de activos
| Actividad | Descripción | ||
|---|---|---|---|
| Cierre empresarial establecido | Marca el cierre administrativo definitivo de la orden de trabajo e impide contabilizar más costes. Se obtiene del cambio de estado a CLSD (cerrado). | ||
| Por qué es importante Representa el final absoluto del ciclo de vida de la orden y es fundamental para la precisión de los datos y el cumplimiento de los registros. Dónde obtenerlo Tabla JCDS, estado I0046 (CLSD). Capturar Se registra cuando el estado cambia a CLSD en JCDS Tipo de evento explicit | |||
| Cierre técnico establecido | Marca el fin físico y técnico de los trabajos de mantenimiento. Se obtiene del cambio de estado a TECO (finalizado técnicamente). | ||
| Por qué es importante Es el punto final más importante para el análisis operativo: indica que el activo se ha restablecido y que el mantenimiento ha concluido. Dónde obtenerlo Tabla JCDS, estado I0045 (TECO). Capturar Se registra cuando el estado cambia a TECO en JCDS Tipo de evento explicit | |||
| Operación de orden confirmada | Representa el registro del tiempo real que un técnico dedica a una operación específica. Refleja el trabajo realizado en el activo. | ||
| Por qué es importante Esta actividad es la principal fuente de datos para calcular el tiempo medio de reparación y los costes de mano de obra. Dónde obtenerlo Tabla AFRU (confirmaciones de órdenes). Capturar Se registra al ejecutar la transacción IW41 Tipo de evento explicit | |||
| Orden de mantenimiento creada | Marca la generación del objeto de orden de trabajo de mantenimiento en el sistema. Se obtiene explícitamente de la marca de tiempo de creación de la tabla de datos maestros de órdenes. | ||
| Por qué es importante Este es el evento central que sirve de referencia para el caso y marca el paso de la solicitud a la planificación y la ejecución. Dónde obtenerlo Tabla AUFK, campos ERDAT (fecha) y ERFZEIT (hora). Capturar Se registra al ejecutar la transacción IW31 Tipo de evento explicit | |||
| Orden de mantenimiento liberada | Indica que la planificación ha finalizado y que la orden está liberada para su ejecución. Se obtiene al supervisar el cambio de estado a REL en los registros de estado del sistema. | ||
| Por qué es importante Este hito separa la fase de planificación de la fase de ejecución y es fundamental para medir el tiempo de planificación y estimación. Dónde obtenerlo Tabla JCDS (documentos de cambio de estado), estado I0002 (REL). Capturar Se registra cuando el estado cambia a REL en JCDS Tipo de evento explicit | |||
| Salida de mercancías contabilizada | Registra el consumo físico de repuestos o materiales imputado a la orden de trabajo. Se obtiene de las cabeceras de documentos de material vinculadas a la orden. | ||
| Por qué es importante Confirma que las piezas están disponibles y se han retirado, lo que repercute directamente en el análisis del tiempo de espera por disponibilidad de piezas. Dónde obtenerlo Tablas MSEG/MKPF, clase de movimiento 261 (salida de mercancías para orden). Capturar Se registra al ejecutar la transacción MIGO/MB1A Tipo de evento explicit | |||
| Aviso de mantenimiento creado | Registra la creación inicial de un aviso de mantenimiento, que suele activar una orden de trabajo. Esta actividad se obtiene de la marca de tiempo de creación de la tabla QMEL y vincula la solicitud inicial con la orden de ejecución. | ||
| Por qué es importante Esta actividad marca el inicio del proceso de mantenimiento de principio a fin y permite calcular los tiempos de respuesta entre la detección de una avería y la generación de la orden. Dónde obtenerlo Tabla QMEL, campos ERDAT (fecha de creación) y MZEIT (hora). Vinculado a la orden mediante QMEL-AUFNR. Capturar Se registra al crear el registro en la tabla QMEL Tipo de evento explicit | |||
| Cierre técnico anulado | Registra la revocación del estado de cierre técnico, lo que indica que la orden se ha reabierto. Esto genera un ciclo de retrabajo en el modelo del proceso. | ||
| Por qué es importante Es el principal indicador del KPI de tasa de retrabajo de mantenimiento y permite detectar cierres prematuros o problemas de calidad. Dónde obtenerlo Tabla JCDS, cambio del estado I0045 (TECO) a inactivo. Capturar Se registra cuando se desactiva el estado TECO Tipo de evento explicit | |||
| Componente de material añadido | Registra la incorporación de repuestos o materiales a la lista de componentes de la orden de trabajo. Se obtiene de la creación de una partida de reserva. | ||
| Por qué es importante Identifica el inicio del ciclo de adquisición de las piezas necesarias y respalda el Dashboard de tiempos de adquisición de repuestos. Dónde obtenerlo Tabla RESB, campo BDTER (fecha de necesidad) o marca de tiempo de creación. Capturar Se registra cuando se añade una partida a RESB Tipo de evento explicit | |||
| Costes de la orden liquidados | Indica que los costes acumulados en la orden se han transferido al objeto de control de costes (por ejemplo, un centro de coste). Se obtiene del documento de control de costes. | ||
| Por qué es importante Registra el cierre financiero y respalda el KPI de duración de la liquidación financiera. Dónde obtenerlo Tabla COBK (cabecera del documento del objeto CO), vinculada a la orden. Capturar Se registra al ejecutar la transacción de liquidación KO88 Tipo de evento explicit | |||
| Lectura de medición registrada | Registra la introducción de un documento de medición, como la lectura de un contador o una evaluación del estado. A menudo sirve como evento de inspección técnica. | ||
| Por qué es importante Es esencial para el mantenimiento basado en el estado y el seguimiento de los tiempos de ciclo de inspección técnica. Dónde obtenerlo Tabla IMRG (documento de medición), vinculada al equipo o a la ubicación técnica. Capturar Se registra al crear un documento de medición Tipo de evento explicit | |||
| Orden de trabajo programada | Indica la programación específica de las operaciones según una capacidad o una fecha. Se infiere de la asignación del estado de despacho a las operaciones. | ||
| Por qué es importante Mide la eficiencia de la asignación de recursos y respalda el Dashboard de utilización y programación de recursos. Dónde obtenerlo Tabla JCDS (documentos de cambio de estado) para operaciones (ObjType OV), estado I0009 (DSPT). Capturar Compare el campo de estado antes y después Tipo de evento inferred | |||
| Prioridad de mantenimiento modificada | Registra un cambio en el nivel de prioridad de la orden de trabajo, por ejemplo, su escalamiento a emergencia. Se obtiene de los documentos de modificación asociados a los datos maestros de la orden. | ||
| Por qué es importante El seguimiento de los cambios de prioridad permite explicar las desviaciones del proceso y respalda el monitor de impacto de las órdenes de trabajo de emergencia al identificar los escalamientos reactivos. Dónde obtenerlo Tablas CDPOS/CDHDR para la clase de objeto AUFTRAG, campo PRIOK. Capturar Se registra en los documentos de modificación (CDPOS) Tipo de evento explicit | |||
| Solicitud de compra creada | Indica que se ha generado una solicitud de adquisición externa o de servicios. Vincula la orden de mantenimiento interna con la cadena de suministro externa. | ||
| Por qué es importante Es fundamental para analizar las demoras causadas por proveedores externos o por la adquisición de materiales que no están en inventario. Dónde obtenerlo Tabla EBAN, vinculada mediante la imputación a AUFK-AUFNR. Capturar Se registra cuando se crea un registro en EBAN Tipo de evento explicit | |||
Guías de extracción
Pasos
Identifique la interfaz de origen de datos: Determine cómo accederá a la interfaz SQL de SAP S/4HANA. Normalmente, se hace mediante SAP HANA Studio, ABAP Development Tools (ADT) en Eclipse o una cadena de conexión DBaaS, si la base de datos HANA está expuesta a su capa de análisis.
Compruebe que las vistas CDS estén disponibles: Asegúrese de que las vistas estándar de Core Data Services (CDS) estén activas en su sistema S/4HANA. Las vistas principales necesarias son I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation e I_MeasurementDocument. También necesitará acceso a la tabla de historial de estados del sistema JCDS y a las tablas de documentos de modificación (CDHDR/CDPOS) para reconstruir todo el historial de eventos, ya que las vistas CDS estándar suelen mostrar solo el estado actual.
Prepare el entorno SQL: Abra su editor SQL. Asegúrese de que su usuario tenga permisos SELECT en las vistas SQL DDL (normalmente en el esquema SAPABAP1 o uno similar) para los elementos indicados.
Ejecute la consulta de extracción: Copie el script SQL proporcionado en su editor. Sustituya el marcador [Your Client Number] por el ID de cliente SAP correspondiente (por ejemplo, 100). Si filtra por un intervalo de fechas concreto, actualice los filtros EventTimestamp de las cláusulas WHERE.
Transforme los datos: La consulta realiza la mayoría de las transformaciones, como convertir las marcas de tiempo y asignar códigos de estado a texto legible. Sin embargo, si el sistema de destino lo requiere, asegúrese de que la columna EventTimestamp tenga el formato ISO 8601 (YYYY-MM-DDTHH:MM:SS) durante la exportación.
Exporte el resultado: Ejecute la consulta y exporte los resultados a un archivo CSV o Parquet. Asegúrese de que la codificación sea UTF-8 para conservar los caracteres especiales de los nombres de usuario y las descripciones.
Valide la asignación de columnas: Abra una muestra de la exportación y compruebe que las columnas MaintenanceWorkOrder, Activity y EventTimestamp estén completas. Verifique que la columna Activity contenga las cadenas específicas indicadas en los requisitos (por ejemplo, Maintenance Order Created, Goods Issue Posted).
Cargue los datos en ProcessMind: Importe el archivo plano validado en ProcessMind. Asigne la columna Activity al campo Activity ID, MaintenanceWorkOrder al campo Case ID y EventTimestamp al campo Timestamp.
Configuración
- Filtro de cliente: Los sistemas SAP admiten varios clientes. Filtre siempre por
MANDToClient(por ejemplo, '100') para evitar datos duplicados o filtraciones entre clientes. - Intervalo de fechas: Se recomienda filtrar
CreationDatede la orden de mantenimiento para incluir los últimos 6 a 12 meses. Consultar todo el historial deJCDS(estado) oCDPOS(documentos de modificación) sin filtros de fecha puede provocar tiempos de espera por rendimiento. - Clave de idioma: La consulta utiliza inglés ('E') de forma predeterminada. Si su organización usa otro idioma principal para las descripciones, ajuste el filtro de idioma.
- Acceso al sistema: Se requiere acceso al esquema ABAP Core Data Services o a las tablas HANA subyacentes. El acceso a las tablas sin procesar JCDS y CDHDR es fundamental para analizar el historial de estados, ya que las vistas CDS suelen mostrar solo una instantánea.
- Tipos de orden: La consulta extrae todos los tipos de orden. Si solo quiere analizar escenarios de mantenimiento específicos, puede filtrar
MaintenanceOrderType(por ejemplo, para incluir únicamente PM01 y PM02).
Consulta de ejemplo 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 = ' ' Pasos
- Confirme que dispone de acceso de lectura directo a AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG y las tablas aplicables de documentos de modificación y documentos de controlling. Compruebe los nombres físicos exactos y las asignaciones de campos en su base de datos SAP, ya que la disponibilidad de campos y las estructuras de tablas replicadas varían según la implementación.
- Configure la conexión de extracción, las credenciales, las fechas de inicio y fin de la extracción y los filtros específicos de la empresa. Para la validación inicial, utilice un periodo móvil de tres a seis meses. Amplíelo cuando las comprobaciones de rendimiento e integridad hayan concluido correctamente.
- Extraiga los atributos de cabecera de la orden de AUFK, los atributos de operación de AFVC y los registros de estado de JEST. Una los registros relacionados con la orden mediante el campo de número de orden utilizado en su esquema SAP. En muchas implementaciones de SAP, JEST contiene los estados actuales, por lo que las marcas de tiempo históricas requieren una fuente de historial de estados o de documentos de modificación. Configure [Your status history table] y sus campos de marca de tiempo si JEST no conserva el historial de cambios de estado.
- Extraiga la creación de avisos de QMEL, la creación de componentes de RESB, la creación de solicitudes de pedido de EBAN, la información de salida de mercancías de MSEG y MKPF, las confirmaciones de AFRU, las lecturas de medición de IMRG y los registros de liquidación de controlling de [Your controlling document table]. Extraiga los cambios de prioridad de [Your order change document table] y [Your change document item table]. Estas fuentes son necesarias porque AUFK, AFVC y JEST por sí solas no proporcionan las 14 actividades solicitadas.
- Normalice todas las marcas de tiempo de origen a una única zona horaria y un solo tipo de datos de marca de tiempo. Convierta los campos de fecha y hora de SAP, o los campos de marca de tiempo de la base de datos, a EventTimestamp. Conserve la precisión de las marcas de tiempo disponible en el sistema. Aplique el intervalo de extracción configurado a EventTimestamp, no solo a la fecha de creación de la orden.
- Cree una fila de evento por cada ocurrencia en las fuentes. No dependa de ProcessMind para inferir eventos. Asigne el valor Activity exacto especificado en la consulta, complete MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate y los atributos recomendados disponibles, y conserve los identificadores de origen que puedan servir para investigar duplicados.
- Elimine únicamente los eventos de origen idénticos, utilizando claves de origen estables. No agrupe cambios de estado, confirmaciones, movimientos de materiales, lecturas de medición ni documentos de liquidación distintos que se hayan producido en momentos diferentes. Si varios registros de origen representan un mismo evento de negocio, documente en la especificación de extracción qué fuente tiene prioridad.
- Valide que los 14 valores de actividad aparezcan como filas explícitas, que cada fila tenga un identificador de caso y una marca de tiempo, y que las marcas de tiempo estén dentro del periodo de extracción solicitado. Compare los recuentos con los informes de SAP o con los recuentos de las tablas de origen aplicando los mismos filtros.
- Exporte el resultado como CSV UTF-8 o en otro formato de registro de eventos compatible con ProcessMind. Utilice una fila por evento, incluya las columnas necesarias con los nombres configurados exactos, conserve las marcas de tiempo ISO 8601 cuando sea posible y cargue el archivo o configure la conexión a la base de datos en ProcessMind. Defina MaintenanceWorkOrder como identificador del caso, Activity como columna de actividad y EventTimestamp como columna de marca de tiempo.
Configuración
- Tablas de origen y asignaciones: AUFK proporciona los datos de cabecera de la orden, AFVC los datos de operación y JEST los datos de estado del sistema. Para generar las 14 actividades también se necesitan QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG, las fuentes de documentos de modificación y las fuentes de documentos de controlling. Antes de ejecutar la extracción, compruebe los nombres exactos de los campos en su base de datos SAP.
- Columnas de salida obligatorias: MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem y LastDataUpdate deben estar presentes en cada fila de evento.
- Columnas de salida recomendadas: Complete MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser y SystemStatus cuando estén disponibles.
- Intervalo de fechas: Empiece con un periodo de tres a seis meses. Utilice un límite inicial inclusivo y uno final exclusivo para evitar duplicar eventos entre ejecuciones incrementales. Para cargas históricas, divida la extracción por mes u otro periodo que admita la base de datos.
- Filtros: Configure [Company Code filter], [Order Type filter], [Maintenance Plant filter], [Notification Type filter] y [Document Type filter] según el alcance de los informes. No aplique filtros que excluyan órdenes sin avisos, operaciones, componentes, solicitudes de pedido, confirmaciones, mediciones o documentos de liquidación.
- Historial de estados: JEST suele representar las asignaciones de estado, pero para consultar los cambios históricos puede ser necesario utilizar [Your status history table] o documentos de modificación. Configure la fuente que contiene la marca de tiempo del cambio de estado y el historial de transiciones.
- Historial de prioridades: Para consultar los cambios de prioridad se necesitan [Your order change document table] y [Your change document item table], con el identificador de objeto, el nombre del campo, el valor anterior, el valor nuevo y la marca de tiempo del cambio correspondientes.
- Valor del sistema de origen: Sustituya [Your SAP system identifier] por el nombre estable del sistema de origen que utiliza su organización.
- Última actualización de datos: Sustituya [Your extraction timestamp] por la marca de tiempo generada al inicio o al final de la ejecución de extracción y utilice el mismo valor en todas las filas de esa ejecución.
- Rendimiento: Cree índices o particiones en las columnas de unión y filtrado cuando esté permitido, limite el intervalo de extracción, seleccione solo las columnas necesarias, procese los periodos largos por lotes y materialice extracciones intermedias de las fuentes si las uniones directas entre esquemas son lentas.
- Requisitos previos: Conectividad con la base de datos, autorización de lectura para todas las tablas de origen configuradas, acceso a los datos pertinentes de Plant Maintenance, Materials Management, Controlling y mediciones, y aprobación para extraer datos operativos. Compruebe las restricciones de replicación o licencia de la plataforma de base de datos.
Consulta de ejemplo 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; ¿Todo listo para empezar?
Utilice estos recursos para empezar a mapear sus flujos de trabajo de mantenimiento e identificar oportunidades de ahorro. Nuestro marco le ayuda a disponer de la estructura de datos adecuada para obtener una visión completa de sus operaciones.
Elimine hoy los cuellos de botella del mantenimiento de activos en SAP
Reduzca desde hoy un 30 % el tiempo de ciclo de mantenimiento
No se requiere tarjeta de crédito... Configuración en 5 minutos