자산 정비 데이터 템플릿
자산 정비 데이터 템플릿
- 수집 권장 속성
- 추적해야 할 주요 정비 활동
- SAP PM 데이터 추출 안내
자산 정비 속성
| 이름 | 설명 | ||
|---|---|---|---|
| 원천 시스템 SourceSystem | 데이터가 생성된 시스템입니다. | ||
| 설명 특정 SAP 클라이언트 또는 인스턴스(예: 'SAP_PM_PROD')를 식별합니다. ERP 시스템이 여러 개인 환경에서는 ID가 같더라도 법인이나 시스템 환경이 다른 레코드를 구분할 수 있습니다. 중요한 이유 여러 시스템을 사용하는 환경에서 데이터의 고유성과 계보를 보장합니다. 확보 방법 시스템 구성 또는 추출 로그 예시 SAP_ECC_P01SAP_S4H_100 | |||
| 유지보수 작업 지시 MaintenanceWorkOrder | 유지보수 작업 지시를 식별하는 고유 ID입니다. | ||
| 설명 유지보수 작업 지시는 SAP Plant Maintenance의 중심 문서입니다(AUFK 테이블, AUFNR 필드). 유지보수 요청(통지)과 실행에 필요한 리소스, 자재 및 비용을 연결합니다. process mining 분석에서는 케이스 ID로 사용되며, 작업 지시 생성부터 기술 완료 및 업무 완료까지 유지보수 작업의 전체 수명주기를 재구성할 수 있습니다. 중요한 이유 모든 활동, 비용 및 타임스탬프를 연결하는 고유 키로, 프로세스 흐름을 시각화할 수 있게 합니다. 확보 방법 SAP 테이블 AUFK, 필드 AUFNR 예시 00004001234540012345000040098765 | |||
| 이벤트 타임스탬프 EventTimestamp | 활동이 발생한 정확한 날짜와 시간입니다. | ||
| 설명 이벤트가 발생한 시점을 기록합니다. 상태 변경은 시스템 상태 업데이트 시간에서, 작업은 확인 시간에서 가져옵니다. 정확한 타임스탬프는 주기 시간과 리드 타임을 계산하고 계획과 실행 같은 단계 사이의 병목을 찾는 데 중요합니다. 중요한 이유 이벤트 순서를 정확히 정하고 시간 기반 KPI를 계산하는 데 필요합니다. 확보 방법 JEST(UDATE/UTIME), AFRU(ISDD/ISDZ), MKPF(CPUDT/CPUTM) 예시 2023-10-15T08:30:00Z2023-10-15T14:45:12Z | |||
| 최근 데이터 업데이트 LastDataUpdate | 가장 최근에 데이터를 추출한 시점의 타임스탬프입니다. | ||
| 설명 process mining 데이터 모델의 데이터가 마지막으로 갱신된 시점을 나타냅니다. 분석가는 이를 통해 인사이트가 얼마나 최신인지 파악하고, 실시간 미처리 작업이나 SLA 준수 여부를 모니터링하는 대시보드의 데이터 최신성을 확인할 수 있습니다. 중요한 이유 데이터 거버넌스를 유지하고 대시보드의 신뢰성을 확보하는 데 중요합니다. 확보 방법 ETL 타임스탬프 예시 2023-11-01T12:00:00Z | |||
| 활동 이름 Activity | 발생한 구체적인 작업 또는 상태 변경입니다. | ||
| 설명 유지보수 프로세스에서 수행된 단계를 나타냅니다. 예를 들어 '유지보수 작업 지시 생성', '자재 출고 전기', '작업 지시 작업 확인' 등이 있습니다. 상태 변경은 일반적으로 상태 관리 테이블(JEST)에서, 작업 확인은 AFRU, 자재 이동은 MKPF와 같은 트랜잭션 테이블에서 가져옵니다. 이 속성에 따라 프로세스 맵의 노드가 결정됩니다. 중요한 이유 프로세스에서 '무엇이' 일어났는지를 정의하며, 프로세스 흐름과 변형을 파악하는 데 필요합니다. 확보 방법 JEST(상태), AFRU(작업 확인), QMEL(통지)에서 가져옵니다. 예시 유지보수 작업 지시 생성작업 지시 릴리스기술 완료 | |||
| 계획 담당 그룹 ResponsiblePlannerGroup | 작업 지시 처리를 담당하는 계획 담당자 그룹입니다. | ||
| 설명 계획 담당 그룹(INGRP)은 유지보수 작업 계획을 맡은 팀 또는 부서를 식별합니다. 이 값은 '부서'에 매핑됩니다. 준비 단계에서 어느 계획팀이 병목을 일으키는지 파악하는 리소스 활용 및 일정 관리 대시보드에 필요합니다. 중요한 이유 계획 프로세스를 담당하는 행정팀을 식별합니다. 확보 방법 SAP 테이블 AUFK, 필드 INGRP 예시 M01ELEMEC | |||
| 기능 위치 FunctionalLocation | 자산이 설치된 계층형 위치입니다. | ||
| 설명 유지보수 작업이 수행되는 기술 구조상의 위치(TPLNR)를 나타냅니다. 이동할 수 있는 설비와 달리 기능 위치는 고정되어 있습니다. 이 속성을 사용하면 기술 검사 주기 시간 대시보드에서 보일러실과 포장 라인처럼 공장 내 여러 구역의 성과를 비교할 수 있습니다. 중요한 이유 유지보수 성과를 위치 및 계층별로 분석할 수 있습니다. 확보 방법 SAP 테이블 IFLOT, 필드 TPLNR(또는 AUFK-TPLNR을 통해 연결) 예시 공장1-건물2-라인01미국-TX-달라스-01 | |||
| 목표 완료일 TargetFinishDate | 정비 작업의 예정 완료일입니다. | ||
| 설명 이 날짜(일반적으로 기본 완료일인 GLTRP)는 작업 오더의 마감일을 나타냅니다. 실제 완료 시각과 비교해 'SLA 준수율' KPI를 계산하며, 작업 오더가 기한 내에 완료됐는지 판단하는 기준이 됩니다. 중요한 이유 정시 납품(OTD) 계산의 기준입니다. 확보 방법 SAP 테이블 AFKO, 필드 GLTRP 예시 2023-12-012023-12-15 | |||
| 생성 사용자 CreatedByUser | 오더를 생성한 사용자의 이름입니다. | ||
| 설명 작업 오더를 생성한 사용자(ERNAM)를 식별합니다. 일반 모델에서는 '사용자'에 매핑됩니다. 수동 생성과 자동 생성을 구분하고 '정비 오더 생성' 활동을 감사하는 데 활용할 수 있습니다. 중요한 이유 사용자 행동 분석과 감사에 활용됩니다. 확보 방법 SAP 테이블 AUFK, 필드 ERNAM 예시 JSMITHBSERVICEDDAVIS | |||
| 설비 번호 EquipmentNumber | 유지보수 대상인 특정 물리적 자산의 식별자입니다. | ||
| 설명 설비 번호(EQUNR)는 개별 기계 또는 자산 객체를 식별합니다. 이 필드를 기준으로 데이터를 집계하면 '자산 유지보수 비용 및 처리량' 대시보드를 통해 수리 횟수와 비용이 잦은 설비를 찾을 수 있습니다. 신뢰성 중심 유지보수 분석에도 활용할 수 있습니다. 중요한 이유 프로세스 성과를 특정 물리적 자산과 연결합니다. 확보 방법 SAP 테이블 AUFK, 필드 EQUNR 예시 10004567펌프-001공조-202 | |||
| 시스템 상태 SystemStatus | 오더의 현재 기술 상태입니다(예: REL, TECO). | ||
| 설명 현재 오더에 적용된 활성 시스템 상태(JEST)의 연결 문자열 또는 목록입니다. 일반적인 값으로는 CRTD(생성됨), REL(릴리스됨), TECO(기술 완료), CLSD(종료됨)가 있습니다. '백로그 및 진행 중 작업 모니터'에서 미종결 케이스와 종결 케이스를 구분하는 데 사용됩니다. 중요한 이유 오더의 진행 단계를 나타내는 주요 지표입니다. 확보 방법 SAP 함수 모듈 STATUS_TEXT_EDIT 또는 테이블 JEST 예시 REL CNFTECOCRTD MACM | |||
| 유지보수 우선순위 MaintenancePriority | 작업 지시에 지정된 긴급도입니다. | ||
| 설명 유지보수 작업의 우선순위(PRIOK)를 나타냅니다. 예를 들어 '1-매우 높음', '2-높음', '3-보통'으로 표시됩니다. 이 필드는 '긴급 작업 지시 비율' KPI의 직접 입력값입니다. 우선순위별 흐름을 분석하면 긴급 작업 지시가 일반 작업보다 실제로 빠르게 처리되는지 확인할 수 있습니다. 중요한 이유 SLA 분석과 긴급 작업 식별에 중요한 기준입니다. 확보 방법 SAP 테이블 AFKO, 필드 PRIOK(또는 뷰를 통한 AUFK) 예시 1-긴급2-높음3-보통4-낮음 | |||
| 유지보수 작업 지시 유형 MaintenanceOrderType | 작업 지시를 예방 유지보수, 시정 유지보수 등으로 분류합니다. | ||
| 설명 SAP PM의 작업 지시 유형(AUART)은 유지보수 작업의 성격을 구분합니다. 일반적인 유형으로는 PM01(시정 유지보수), PM02(예방 유지보수), PM03(수리)이 있습니다. 예방 유지보수와 사후 대응 작업은 프로세스가 크게 다르므로, 이 속성은 '긴급 작업 지시 영향 모니터링'과 프로세스 변형별 분석에 필요합니다. 중요한 이유 계획 작업과 비계획 작업을 구분해 분석하는 데 기본이 됩니다. 확보 방법 SAP 테이블 AUFK, 필드 AUART 예시 PM01PM02PM03 | |||
| 유지보수 플랜트 MaintenancePlant | 유지보수를 담당하는 물류 플랜트입니다. | ||
| 설명 플랜트(WERKS)는 물류의 기본 조직 단위로, 물리적 사업장별 데이터를 구분합니다. 이 속성은 사업장 간 성과를 비교하는 데 필요하며, 대시보드에서 조직 전체를 기준으로 필터링할 수 있도록 '사업부'에 매핑됩니다. 중요한 이유 사업장 성과 비교에 사용하는 기본 조직 필터입니다. 확보 방법 SAP 테이블 AUFK, 필드 WERKS 예시 100020003000 | |||
| 주 작업장 MainWorkCenter | 작업 지시를 수행하도록 배정된 주 작업장 또는 작업조입니다. | ||
| 설명 주 작업장(VAPLZ)은 실제 작업을 수행할 기술자 그룹 또는 기계를 나타냅니다. 이 속성은 '팀'에 매핑되며, 작업조별 평균 수리 시간과 같은 실행 효율을 분석하는 데 중요합니다. 내부 인력과 외부 계약업체도 구분할 수 있습니다. 중요한 이유 리소스별 성과를 분석할 수 있습니다. 확보 방법 SAP 테이블 AFKO, 필드 VAPLZ(구성에 따라 AUFK-VAPLZ) 예시 기계팀_01전기팀외부계약업체 | |||
| 통지 번호 NotificationNumber | 작업 지시를 발생시킨 유지보수 통지입니다. | ||
| 설명 통지 번호(QMNUM)는 작업 지시를 최초 요청(통지)과 연결합니다. 이 연결이 있어야 '유지보수 요청 접수'부터 완료까지의 전체 리드 타임을 계산할 수 있습니다. 연결 정보가 없으면 유지보수 수명주기의 초기 감지 및 보고 단계가 분석에서 누락됩니다. 중요한 이유 실행 단계를 요청/감지 단계와 연결합니다. 확보 방법 SAP 테이블 AUFK, 필드 QMNUM 예시 1000050010000501 | |||
| 계획 인시 PlannedLaborHours | 오더에 계획된 예상 인시입니다. | ||
| 설명 오더 작업의 총 계획 작업량(ARBEI)입니다. 실제 활동 기간과 비교하면 '계획 및 추정 성과' 대시보드에서 정비 계획의 정확도를 평가할 수 있습니다. 중요한 이유 계획 정확도 분석의 기본 지표입니다. 확보 방법 SAP 테이블 AFKO(작업별 계획 작업량 합계) 예시 4.08.512.0 | |||
| 긴급 작업 여부 IsEmergencyWork | 작업 오더가 긴급 작업인지 나타내는 플래그입니다. | ||
| 설명 정비 우선순위를 기준으로 계산하는 불리언 속성입니다. 우선순위가 '1'이거나 설정에서 긴급을 나타내는 코드인 경우 이 플래그는 true입니다. 대시보드에서 복잡한 로직을 작성하지 않고도 데이터를 필터링하고 '긴급 작업 오더 비율' KPI를 구성할 수 있습니다. 중요한 이유 긴급 대응 정비 분석에 필요한 필터링을 간소화합니다. 확보 방법 MaintenancePriority에서 계산 예시 truefalse | |||
| 실제 총비용 TotalActualCost | 작업 오더에 전기된 실제 총비용입니다. | ||
| 설명 인건비, 자재비, 서비스 비용을 합산한 값입니다(PMCO 테이블). 이 속성은 '자산 정비 비용 및 처리량' 대시보드에서 정비 활동의 재무 영향을 확인하는 데 사용됩니다. 자산을 수리할지 교체할지 결정할 때 비용 효율성을 판단하는 데도 필요합니다. 중요한 이유 운영 프로세스 데이터에 재무 관점을 더합니다. 확보 방법 SAP 테이블 PMCO(가치 유형 04 - 실제 합계) 예시 150.002500.500.00 | |||
| 재작업 여부 IsRework | 오더에 재작업 활동이 포함됐는지 나타내는 플래그입니다. | ||
| 설명 프로세스가 반복됐는지 식별하는 계산형 불리언 값입니다. '정비 작업 실행' 활동이 두 번 이상 발생했거나 상태가 '기술 완료'에서 '진행 중'으로 되돌아간 경우를 나타냅니다. '정비 재작업률' KPI를 산출하고 품질 문제를 찾는 데 활용됩니다. 중요한 이유 품질 관리 분석에 직접 활용됩니다. 확보 방법 프로세스 흐름에서 계산 예시 truefalse | |||
자산 정비 활동
| 활동 | 설명 | ||
|---|---|---|---|
| 기술 완료 설정 | 유지보수 작업이 물리적·기술적으로 완료되었음을 나타냅니다. TECO(기술 완료) 상태로 변경된 시점을 사용합니다. | ||
| 중요한 이유 운영 분석에서 가장 중요한 종료 지점으로, 자산이 복구되고 유지보수 작업이 끝났음을 나타냅니다. 확보 방법 JCDS 테이블, 상태 I0045(TECO). 기록 JCDS에서 상태가 TECO로 변경될 때 기록됩니다. 이벤트 유형 explicit | |||
| 업무 완료 설정 | 작업 지시의 최종 행정 마감을 나타내며, 이후 비용 전기를 차단합니다. CLSD(마감) 상태로 변경된 시점을 사용합니다. | ||
| 중요한 이유 작업 지시 수명주기의 최종 종료를 나타내며, 데이터 정확성과 기록 규정 준수에 중요합니다. 확보 방법 JCDS 테이블, 상태 I0046(CLSD). 기록 JCDS에서 상태가 CLSD로 변경될 때 기록됩니다. 이벤트 유형 explicit | |||
| 유지보수 작업 지시 릴리스 | 계획이 완료되어 작업 지시가 실행 가능 상태로 릴리스되었음을 나타냅니다. 시스템 상태 로그에서 REL 상태로 변경된 시점을 확인합니다. | ||
| 중요한 이유 이 단계는 계획 단계와 실행 단계를 구분하며, 계획 및 견적 산정 리드 타임을 측정하는 데 중요합니다. 확보 방법 JCDS(상태 변경 문서) 테이블, 상태 I0002(REL). 기록 JCDS에서 상태가 REL로 변경될 때 기록됩니다. 이벤트 유형 explicit | |||
| 유지보수 작업 지시 생성 | 시스템에서 유지보수 작업 지시 객체가 생성된 시점을 나타냅니다. 작업 지시 마스터 데이터 테이블의 생성 타임스탬프를 사용합니다. | ||
| 중요한 이유 이 이벤트는 케이스의 기준점으로, 요청 단계에서 계획 및 실행 단계로 전환되는 시점을 나타냅니다. 확보 방법 AUFK 테이블의 ERDAT(날짜) 및 ERFZEIT(시간) 필드. 기록 IW31 트랜잭션 실행 시 기록됩니다. 이벤트 유형 explicit | |||
| 자재 출고 전기 | 작업 지시에 따라 예비 부품이나 자재가 실제로 소비된 내역을 기록합니다. 작업 지시와 연결된 자재 문서 헤더에서 가져옵니다. | ||
| 중요한 이유 부품이 준비되어 출고되었음을 확인하며, 부품 가용성 대기 시간 분석에 직접 반영됩니다. 확보 방법 MSEG/MKPF 테이블, 이동 유형 261(작업 지시 자재 출고). 기록 MIGO/MB1A 트랜잭션 실행 시 기록됩니다. 이벤트 유형 explicit | |||
| 작업 지시 작업 확인 | 기술자가 특정 작업에 실제로 투입한 시간을 기록한 내역입니다. 자산에 대한 실제 작업 수행을 나타냅니다. | ||
| 중요한 이유 이 활동은 평균 수리 시간과 인건비를 계산하는 주요 데이터 원천입니다. 확보 방법 AFRU(작업 확인) 테이블. 기록 IW41 트랜잭션 실행 시 기록됩니다. 이벤트 유형 explicit | |||
| 구매 요청 생성 | 외부 조달 또는 서비스 요청이 생성된 시점을 나타냅니다. 내부 유지보수 작업 지시와 외부 공급망을 연결합니다. | ||
| 중요한 이유 외부 공급업체 또는 비재고 자재 조달로 인한 지연을 분석하는 데 중요합니다. 확보 방법 EBAN 테이블. 계정 지정 정보를 통해 AUFK-AUFNR과 연결됩니다. 기록 EBAN 레코드가 생성될 때 기록됩니다. 이벤트 유형 explicit | |||
| 기술 완료 취소 | 기술 완료 상태가 취소되어 작업 지시가 다시 열린 내역을 기록합니다. 프로세스 모델에 재작업 반복 구간이 생깁니다. | ||
| 중요한 이유 유지보수 재작업률 KPI의 주요 지표로, 성급한 종료나 품질 문제를 드러냅니다. 확보 방법 JCDS 테이블에서 상태 I0045(TECO)가 비활성으로 변경된 내역. 기록 TECO 상태가 비활성화될 때 기록됩니다. 이벤트 유형 explicit | |||
| 유지보수 우선순위 변경 | 긴급으로 상향 조정하는 경우처럼 작업 지시의 우선순위가 변경된 내역을 기록합니다. 작업 지시 마스터 데이터와 관련된 변경 문서에서 가져옵니다. | ||
| 중요한 이유 우선순위 변경을 추적하면 프로세스 이탈 원인을 파악할 수 있으며, 긴급 상향 조정 사례를 찾아 긴급 작업 지시 영향 모니터링을 지원합니다. 확보 방법 AUFTRAG 객체 클래스의 PRIOK 필드에 대한 CDPOS/CDHDR 테이블. 기록 변경 문서(CDPOS)에 기록됩니다. 이벤트 유형 explicit | |||
| 유지보수 통지 생성 | 유지보수 통지가 처음 생성된 시점을 기록합니다. 이 통지는 작업 지시를 생성하는 계기가 되는 경우가 많습니다. QMEL 테이블의 생성 타임스탬프를 사용하며, 선행 요청과 실행 작업 지시를 연결합니다. | ||
| 중요한 이유 이 활동은 유지보수 프로세스의 시작점을 설정해 고장 감지부터 작업 지시 생성까지 걸린 시간을 계산할 수 있게 합니다. 확보 방법 QMEL 테이블의 ERDAT(생성 날짜) 및 MZEIT(시간) 필드. QMEL-AUFNR을 통해 작업 지시와 연결됩니다. 기록 QMEL 테이블에 레코드가 생성될 때 기록됩니다. 이벤트 유형 explicit | |||
| 자재 구성품 추가 | 작업 지시의 구성품 목록에 예비 부품이나 자재가 추가된 내역을 기록합니다. 예약 항목이 생성된 시점을 사용합니다. | ||
| 중요한 이유 필요한 부품의 조달 주기가 시작되는 시점을 파악해 예비 부품 조달 리드 타임 대시보드에 필요한 정보를 제공합니다. 확보 방법 RESB 테이블의 BDTER(요구 날짜) 필드 또는 생성 타임스탬프. 기록 RESB에 항목이 추가될 때 기록됩니다. 이벤트 유형 explicit | |||
| 작업 지시 비용 정산 | 작업 지시에 누적된 비용이 원가 센터와 같은 관리 객체로 이전되었음을 나타냅니다. 관리회계 문서에서 가져옵니다. | ||
| 중요한 이유 재무 마감 진행 상황을 추적하고 재무 정산 기간 KPI를 지원합니다. 확보 방법 COBK(CO 객체: 문서 헤더) 테이블. 작업 지시와 연결됩니다. 기록 정산 트랜잭션 KO88 실행 시 기록됩니다. 이벤트 유형 explicit | |||
| 작업 지시 일정 등록 | 작업이 특정 작업 능력 또는 날짜에 맞춰 일정에 배정되었음을 나타냅니다. 작업에 Dispatch 상태가 지정된 시점을 기준으로 추정합니다. | ||
| 중요한 이유 리소스 배분의 효율성을 측정하고 리소스 활용 및 일정 관리 대시보드를 지원합니다. 확보 방법 작업(ObjType OV)의 JCDS(상태 변경 문서) 테이블, 상태 I0009(DSPT). 기록 변경 전후의 상태 필드를 비교합니다. 이벤트 유형 inferred | |||
| 측정값 기록 | 계기 판독값이나 상태 평가와 같은 측정 문서가 입력된 내역을 기록합니다. 기술 검사 이벤트로 사용되는 경우가 많습니다. | ||
| 중요한 이유 상태 기반 유지보수와 기술 검사 주기 시간 추적에 필요합니다. 확보 방법 IMRG(측정 문서) 테이블. 설비 또는 기능 위치와 연결됩니다. 기록 측정 문서가 생성될 때 기록됩니다. 이벤트 유형 explicit | |||
데이터 추출 가이드
단계
데이터 소스 인터페이스 확인: SAP S/4HANA SQL 인터페이스에 접속할 방법을 정합니다. 일반적으로 SAP HANA Studio, Eclipse의 ABAP Development Tools(ADT), 또는 분석 계층에 공개된 HANA 데이터베이스의 DBaaS 연결 문자열을 사용합니다.
CDS 뷰 사용 가능 여부 확인: S/4HANA 시스템에서 표준 Core Data Services(CDS) 뷰가 활성화되어 있는지 확인합니다. 필요한 기본 뷰는 I_MaintenanceOrder, I_MaintenanceOrderOperation, I_MaintenanceNotification, I_MaintOrderConfirmation, I_MeasurementDocument입니다. 전체 이벤트 이력을 재구성하려면 시스템 상태 이력 테이블 JCDS와 변경 문서 테이블(CDHDR/CDPOS)에도 접근해야 합니다. 표준 CDS 뷰에는 현재 상태만 표시되는 경우가 많습니다.
SQL 환경 준비: SQL 편집기를 엽니다. 사용자에게 위에 나열된 객체의 DDL SQL 뷰(일반적으로 SAPABAP1 또는 유사한 스키마)에 대한 SELECT 권한이 있는지 확인합니다.
추출 쿼리 실행: 제공된 SQL 스크립트를 편집기에 복사합니다. [Your Client Number] 자리표시자를 해당 SAP 클라이언트 ID로 바꿉니다(예: 100). 특정 기간으로 필터링하려면 WHERE 절의 EventTimestamp 필터를 수정합니다.
데이터 변환: 쿼리에서 타임스탬프 변환, 상태 코드의 읽기 쉬운 텍스트 변환 등 대부분의 데이터 변환을 처리합니다. 다만 대상 시스템에서 요구하는 경우 내보낼 때 EventTimestamp 열이 ISO 8601(YYYY-MM-DDTHH:MM:SS) 형식인지 확인합니다.
결과 내보내기: 쿼리를 실행하고 결과를 CSV 또는 Parquet 파일로 내보냅니다. 사용자 이름이나 설명에 포함된 특수 문자를 처리할 수 있도록 인코딩을 UTF-8로 설정합니다.
열 매핑 검증: 내보낸 파일의 일부를 열어 MaintenanceWorkOrder, Activity, EventTimestamp 열에 값이 모두 입력되어 있는지 확인합니다. Activity 열에 요구 사항에 명시된 '유지보수 오더 생성', '자재 출고 전기' 등의 문자열이 있는지 확인합니다.
ProcessMind에 업로드: 검증한 평면 파일을 ProcessMind로 가져옵니다. Activity 열을 활동 ID 필드에, MaintenanceWorkOrder를 케이스 ID 필드에, EventTimestamp를 타임스탬프 필드에 매핑합니다.
구성
- 클라이언트 필터: SAP 시스템은 여러 클라이언트를 지원합니다. 중복 데이터나 클라이언트 간 데이터 노출을 방지하려면 항상
MANDT또는Client(예: '100')로 필터링합니다. - 날짜 범위: 최근 6~12개월의 정비 오더
CreationDate를 기준으로 필터링하는 것이 좋습니다. 날짜 필터 없이JCDS(상태) 또는CDPOS(변경 문서)의 전체 이력을 조회하면 성능 시간 초과가 발생할 수 있습니다. - 언어 키: 쿼리는 기본적으로 영어('E')를 사용합니다. 조직에서 다른 기본 언어로 설명을 관리한다면 언어 필터를 조정합니다.
- 시스템 접근 권한: ABAP Core Data Services 스키마 또는 기반 HANA 테이블에 접근할 수 있어야 합니다. CDS 뷰는 현재 상태만 제공하는 경우가 많으므로, 과거 상태를 분석하려면 원본 테이블 JCDS와 CDHDR에 접근하는 것이 중요합니다.
- 오더 유형: 쿼리는 모든 오더 유형을 추출합니다. 특정 정비 시나리오만 분석하려면
MaintenanceOrderType(예: PM01, PM02)을 필터링할 수 있습니다.
샘플 쿼리 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 = ' ' 단계
- AUFK, AFVC, JEST, QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG와 해당 변경 문서 및 관리 회계 문서 테이블에 직접 읽기 권한이 있는지 확인합니다. SAP 데이터베이스의 실제 테이블 이름과 필드 매핑을 확인합니다. 배포 방식에 따라 필드 사용 가능 여부와 복제된 테이블 구조가 다를 수 있습니다.
- 추출 연결, 인증 정보, 추출 시작일과 종료일, 필요한 회사별 필터를 설정합니다. 초기 검증에는 최근 3~6개월의 기간을 사용하고, 성능과 데이터 완전성 검사를 통과한 뒤 기간을 늘립니다.
- AUFK에서 오더 헤더 속성을, AFVC에서 작업 속성을, JEST에서 상태 레코드를 추출합니다. SAP 스키마에서 사용하는 오더 번호 필드로 오더 관련 레코드를 조인합니다. 여러 SAP 구현에서 JEST는 현재 상태 테이블이므로, 과거 상태의 타임스탬프를 얻으려면 상태 이력 소스나 변경 문서 소스가 필요합니다. JEST에 상태 변경 이력이 보존되지 않는 경우 [Your status history table]과 해당 타임스탬프 필드를 설정합니다.
- QMEL에서 통지 생성, RESB에서 구성 요소 생성, EBAN에서 구매 요청 생성, MSEG와 MKPF에서 자재 출고, AFRU에서 확인, IMRG에서 측정값, [Your controlling document table]에서 관리 회계 정산 레코드를 추출합니다. [Your order change document table]과 [Your change document item table]에서 우선순위 변경을 추출합니다. AUFK, AFVC, JEST만으로는 요청된 14개 활동을 모두 제공할 수 없으므로 이 소스들이 필요합니다.
- 모든 소스 타임스탬프를 하나의 시간대와 단일 타임스탬프 데이터 유형으로 정규화합니다. SAP 날짜 및 시간 필드나 데이터베이스 타임스탬프 필드를 EventTimestamp로 변환합니다. 시스템에서 제공하는 타임스탬프 정밀도를 유지합니다. 오더 생성일만이 아니라 EventTimestamp에 설정된 추출 기간을 적용합니다.
- 소스에서 발생한 각 이벤트마다 이벤트 행을 하나씩 만듭니다. ProcessMind가 이벤트를 추론할 것으로 기대하지 마십시오. 쿼리에 지정된 Activity 값을 정확히 입력하고 MaintenanceWorkOrder, EventTimestamp, SourceSystem, LastDataUpdate 및 사용 가능한 권장 속성을 채웁니다. 중복 조사에 유용한 경우 소스 식별자도 유지합니다.
- 안정적인 소스 키를 사용해 동일한 소스 이벤트만 중복 제거합니다. 서로 다른 시점에 발생한 상태 변경, 확인, 자재 이동, 측정값, 정산 문서를 하나로 합치지 않습니다. 여러 소스 레코드가 하나의 업무 이벤트를 나타내는 경우 추출 사양에 사용할 소스의 우선순위를 기록합니다.
- 14개 활동 값이 모두 명시적인 행으로 포함되어 있고, 모든 행에 케이스 식별자와 타임스탬프가 있으며, 타임스탬프가 요청한 추출 기간에 해당하는지 확인합니다. 동일한 필터를 적용한 SAP 보고서 또는 소스 테이블의 건수와 비교합니다.
- 결과를 UTF-8 CSV 또는 ProcessMind에서 지원하는 다른 이벤트 로그 형식으로 내보냅니다. 이벤트마다 행을 하나씩 만들고, 설정된 정확한 이름으로 필수 열을 포함합니다. 지원되는 경우 ISO 8601 타임스탬프를 유지한 뒤 파일을 업로드하거나 ProcessMind에서 데이터베이스 연결을 설정합니다. MaintenanceWorkOrder를 케이스 식별자로, Activity를 활동 열로, EventTimestamp를 타임스탬프 열로 지정합니다.
구성
- 소스 테이블 및 매핑: AUFK에서 오더 헤더 데이터를, AFVC에서 작업 데이터를, JEST에서 시스템 상태 데이터를 가져옵니다. 14개 활동을 모두 생성하려면 QMEL, RESB, EBAN, MSEG, MKPF, AFRU, IMRG와 변경 문서 및 관리회계 문서 소스도 필요합니다. 실행 전에 SAP 데이터베이스에서 정확한 필드 이름을 확인하세요.
- 필수 출력 열: 모든 이벤트 행에 MaintenanceWorkOrder, Activity, EventTimestamp, SourceSystem, LastDataUpdate가 있어야 합니다.
- 권장 출력 열: 사용 가능한 경우 MaintenanceOrderType, MaintenancePriority, EquipmentNumber, FunctionalLocation, MaintenancePlant, ResponsiblePlannerGroup, MainWorkCenter, NotificationNumber, TargetFinishDate, CreatedByUser, SystemStatus를 채우는 것이 좋습니다.
- 기간: 우선 3~6개월을 대상으로 설정하세요. 증분 실행 간 이벤트가 중복되지 않도록 시작 경계는 포함하고 종료 경계는 제외합니다. 과거 데이터를 일괄 적재할 때는 데이터베이스에서 지원하는 월별 또는 다른 기간별로 추출을 나누세요.
- 필터: 보고 범위에 맞게 [회사 코드 필터], [오더 유형 필터], [유지보수 플랜트 필터], [통지 유형 필터], [문서 유형 필터]를 설정하세요. 통지, 작업, 구성품, 구매요청, 확인, 측정값 또는 정산 문서가 없는 오더가 제외되는 필터는 적용하지 마세요.
- 상태 이력: JEST에는 일반적으로 상태 할당 정보가 저장되지만, 과거 상태 변경을 확인하려면 [사용자 상태 이력 테이블] 또는 변경 문서가 필요할 수 있습니다. 상태 변경 시각과 상태 전환 이력이 포함된 소스를 설정하세요.
- 우선순위 이력: 우선순위 변경을 확인하려면 [사용자 오더 변경 문서 테이블]과 [사용자 변경 문서 항목 테이블]이 필요합니다. 관련 객체 식별자, 필드 이름, 이전 값, 새 값, 변경 시각을 포함해야 합니다.
- 소스 시스템 값: [사용자 SAP 시스템 식별자]를 조직에서 사용하는 고정된 소스 시스템 이름으로 바꾸세요.
- 마지막 데이터 업데이트: [사용자 추출 시각]을 추출 실행 시작 또는 종료 시 생성되는 시각으로 바꾸고, 해당 실행의 모든 행에 같은 값을 사용하세요.
- 성능: 허용되는 경우 조인 및 필터 열에 인덱스를 설정하거나 파티셔닝하세요. 추출 기간을 제한하고 필요한 열만 선택하며, 긴 기간의 데이터는 배치로 처리하세요. 스키마 간 직접 조인이 느리면 중간 소스 데이터를 구체화하세요.
- 사전 요건: 데이터베이스 연결, 설정된 모든 소스 테이블에 대한 읽기 권한, 관련 플랜트 유지보수·자재 관리·관리회계·측정 데이터에 대한 접근 권한, 운영 데이터 추출 승인. 데이터베이스 플랫폼의 복제 또는 라이선스 제한도 확인하세요.
샘플 쿼리 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; 시작할 준비가 되셨나요?
다음 리소스를 활용해 정비 워크플로를 매핑하고 비용 절감 기회를 찾아보세요. 이 프레임워크를 사용하면 운영 현황을 투명하게 파악하는 데 필요한 데이터 구조를 갖출 수 있습니다.
지금 SAP 자산 정비 병목을 해결하세요
지금 정비 주기를 30% 단축하세요
신용카드가 필요하지 않습니다... 설정은 5분이면 완료됩니다.