생산 계획 데이터 템플릿
생산 계획 데이터 템플릿
- 수집 권장 속성
- 추적할 주요 활동
- Microsoft Dynamics 365 Manufacturing 데이터 추출 안내
생산 계획 속성
| 이름 | 설명 | ||
|---|---|---|---|
| 생산 주문 ProductionOrderNumber | 생산 주문의 고유 식별자입니다. 관련된 모든 계획 및 실행 활동을 추적하는 기본 케이스 ID로 사용됩니다. | ||
| 설명 생산 주문 번호는 Microsoft Dynamics 365에서 ProdId라고도 하며, 특정 제조 작업과 관련된 모든 이벤트, 자재, 리소스, 비용을 연결하는 중심 식별자입니다. 이를 통해 단일 작업 단위의 생산 계획 및 실행 과정을 처음부터 끝까지 분석할 수 있습니다. process mining에서는 관련 이벤트를 하나의 케이스로 묶는 데 이 속성이 필요합니다. 생산 주문 번호별로 프로세스를 분석하면 최초 생성과 일정 수립부터 완료 및 원가 계산까지 표준 생산 흐름의 병목, 지연, 편차를 찾을 수 있습니다. 중요한 이유 관련된 모든 이벤트를 묶고 생산 계획 프로세스 전체를 재구성해 분석하는 데 필요한 기본 케이스 식별자입니다. 확보 방법 Microsoft Dynamics 365 Manufacturing의 ‘ProdTable’ 테이블에 있는 ‘ProdId’ 필드입니다. 예시 WO-000456WO-000457WO-000458 | |||
| 마지막 데이터 업데이트 LastDataUpdate | 이벤트 데이터가 원본 시스템에서 마지막으로 새로 고침되거나 추출된 시점을 나타내는 타임스탬프입니다. | ||
| 설명 이 속성은 원본 시스템에서 데이터를 가장 최근에 가져온 날짜와 시각을 제공합니다. 분석 데이터가 얼마나 최신인지 파악하는 데 필요한 메타데이터입니다. 데이터가 마지막으로 업데이트된 시점을 알면 분석가와 업무 사용자가 process mining 도구의 인사이트를 신뢰하는 데 도움이 됩니다. 대시보드가 실시간 정보인지 이전 시점의 데이터인지 확인할 수 있어 운영 의사결정에 유용합니다. 중요한 이유 데이터의 최신 상태를 사용자가 확인하고 프로세스 인사이트의 시의성을 신뢰할 수 있도록 지원하는 데이터 거버넌스에 중요한 속성입니다. 확보 방법 데이터 추출, 변환, 적재(ETL) 과정에서 타임스탬프를 생성해 각 레코드에 기록합니다. 예시 2023-05-20T05:00:00Z2023-05-21T05:00:00Z | |||
| 원본 시스템 SourceSystem | 데이터를 추출한 기준 시스템입니다. | ||
| 설명 이 속성은 이벤트 데이터가 생성된 원본 정보 시스템을 나타냅니다. 이 프로세스 보기에서는 값이 ‘Microsoft Dynamics 365 Manufacturing’으로 일관되게 표시됩니다. 여러 시스템이 연동된 환경에서는 데이터 계보를 추적하고 데이터 품질 문제를 해결하며, 각 시스템이 전체 프로세스에 어떻게 기여하는지 파악하는 데 이 필드가 중요합니다. 분석 대상 데이터의 출처를 명확히 할 수 있습니다. 중요한 이유 데이터 출처에 대한 중요한 맥락을 제공하므로 데이터 거버넌스와 검증, 여러 기업 시스템의 데이터 파이프라인 관리에 필요합니다. 확보 방법 데이터 추출 및 변환 과정에서 데이터 세트의 출처를 표시하기 위해 추가하는 고정 값입니다. 예시 Microsoft Dynamics 365 ManufacturingD365 F&O | |||
| 이벤트 시간 EventTime | 활동이 발생한 시점을 나타내는 정확한 타임스탬프입니다. | ||
| 설명 이벤트 시간, 즉 타임스탬프는 특정 활동이 발생한 날짜와 시각을 정확하게 기록합니다. 처리 시간 계산, 단계 간 지연 파악, 시간에 따른 프로세스 성과 분석 등 시간 기반 process mining 분석에 필요한 기본 데이터입니다. 생산 계획에서는 계획 리드 타임, 생산 시작 지연, 주문 이행에 걸리는 전체 시간 등을 측정하는 데 사용합니다. 정확한 시간순 타임스탬프가 있어야 올바르고 유의미한 프로세스 모델을 만들 수 있습니다. 중요한 이유 이 타임스탬프는 이벤트 순서를 정하고 활동 간 소요 시간을 계산하며, 처리 시간과 병목을 파악하는 등 시간 기반 분석을 수행하는 데 필요합니다. 확보 방법 ‘ProdTable’의 ‘createdDateTime’이나 ‘ProdRouteTrans’, ‘ProdJournalRoute’, ‘ProdJournalBOM’의 거래 날짜 필드 등 다양한 거래 테이블에서 찾을 수 있습니다. 예시 2023-04-15T09:00:12Z2023-04-15T11:30:00Z2023-04-16T14:22:05Z | |||
| 활동 이름 ActivityName | 생산 계획 프로세스에서 발생한 구체적인 비즈니스 이벤트나 단계의 이름입니다. | ||
| 설명 활동 이름은 ‘생산 주문 생성’, ‘생산 자재 피킹’, ‘생산 시작’처럼 생산 계획 과정의 개별 단계를 나타냅니다. 이러한 활동이 모여 프로세스 맵을 구성합니다. 활동의 순서와 소요 시간을 분석하면 프로세스 흐름을 시각화하고, 자주 발생하는 경로와 재작업 반복을 찾아내며, 각 단계에 걸리는 시간을 측정할 수 있습니다. 프로세스의 각 시점에 어떤 일이 일어나는지 파악하는 데 중요한 속성입니다. 중요한 이유 프로세스의 단계를 정의하는 속성입니다. 이를 바탕으로 프로세스 맵을 구성하고 흐름, 변형, 병목을 분석할 수 있습니다. 확보 방법 일반적으로 이벤트 로그에서 가져오거나 ‘ProdRouteTrans’, ‘ProdJournalBOM’ 등의 테이블에 기록된 상태 변경 및 거래 유형을 매핑해 도출합니다. ‘ProdTable’의 상태 필드 변경도 활용할 수 있습니다. 예시 생산 주문 생성생산 주문 릴리스생산 시작생산 완료 보고 | |||
| 계획 시작일 PlannedStartDate | 생산 오더의 예정 시작 일시입니다. | ||
| 설명 계획 시작 일자는 일정 계획 과정에서 정해지는 주요 결과로, 오더의 생산 작업을 시작할 목표 시점을 나타냅니다. 자재 가용성, 리소스 용량, 수요 납기 등을 고려해 결정합니다. 이 속성은 일정 준수 여부를 분석하는 데 필요합니다. 계획 시작 일자와 실제 생산 시작 시각('Production Started' 활동의 타임스탬프)을 비교하면 정시 시작 여부를 측정하고, 지연 원인을 파악하며, 생산 일정 준수율과 같은 KPI를 계산할 수 있습니다. 중요한 이유 일정 준수 여부를 측정하고 계획 시점과 실제 생산 시작 시점 사이의 지연을 파악하는 기준으로 사용합니다. 확보 방법 'ProdTable' 테이블의 'SchedStart' 필드입니다. 예시 2023-04-18T08:00:00Z2023-04-19T08:00:00Z2023-04-20T08:00:00Z | |||
| 계획 종료 일자 PlannedEndDate | 생산 오더의 예정 완료 일시입니다. | ||
| 설명 계획 종료 일자는 일정 계획 엔진이 정한 생산 오더의 목표 완료 시점입니다. 작업 시간, 리소스 일정, 리드 타임을 고려해 완제품이 준비될 시점을 예측합니다. 프로세스 분석에서는 정시 완료 실적을 평가하는 데 중요한 속성입니다. 계획 종료 일자와 실제 완료 타임스탬프('Production Reported As Finished' 또는 'Production Order Ended' 활동)를 비교하면 정시 생산 완료율 KPI를 계산하고 납품 지연의 반복적인 원인을 파악할 수 있습니다. 중요한 이유 정시 완료율을 측정하고 생산 일정 계획의 정확도를 분석하는 기준입니다. 확보 방법 'ProdTable' 테이블의 'SchedEnd' 필드입니다. 예시 2023-04-25T17:00:00Z2023-04-26T17:00:00Z2023-04-27T17:00:00Z | |||
| 사용자 UserId | 활동을 수행했거나 담당하는 사용자의 식별자입니다. | ||
| 설명 사용자 ID는 오더 릴리스나 완료 보고와 같은 프로세스 단계를 수행한 직원 또는 시스템 계정을 식별합니다. 이를 통해 프로세스에서 누가 작업을 수행하는지 확인할 수 있습니다. 사용자별로 프로세스를 분석하면 업무량 분포를 파악하고, 교육이 필요한 영역을 찾으며, 개인이나 팀 간 성과를 비교하고, 특정 사용자가 수행한 예외 작업을 조사할 수 있습니다. 규정 준수와 감사 추적에도 중요한 정보입니다. 중요한 이유 사용자나 팀별 프로세스 성과를 분석하고 자동화 기회를 찾는 데 도움이 되며, 주요 프로세스 활동의 감사 추적 정보를 제공합니다. 확보 방법 여러 테이블의 'modifiedBy' 또는 'createdBy' 필드나 'ProdJournalTable'과 같은 트랜잭션 로그 테이블의 사용자 필드에서 확인할 수 있습니다. 예시 j.smithm.jonesAX_BATCH_SVC | |||
| 생산 공장 ProductionPlant | 생산 오더를 실행하는 제조 사업장 또는 공장입니다. | ||
| 설명 생산 공장은 제조 프로세스를 담당하는 물리적 장소나 시설을 나타냅니다. 생산 성과를 구분하고 비교할 때 사용하는 주요 조직 차원입니다. process mining에서는 이 속성을 사용해 공장별 성과를 비교할 수 있습니다. 분석가는 사업장별 사이클 타임, 리소스 활용률, 표준 프로세스 준수 여부를 비교해 모범 사례를 찾거나 운영 개선이 필요한 시설을 파악할 수 있습니다. 용량 활용률 분석에도 필요합니다. 중요한 이유 제조 사업장별 성과를 비교하고 벤치마킹해 모범 사례와 사업장별 문제를 파악할 수 있습니다. 확보 방법 'ProdTable' 테이블의 'InventSiteId' 필드입니다. 예시 SITE-ASITE-BMain-WH | |||
| 생산 우선순위 ProductionPriority | 생산 오더의 긴급도나 우선순위를 나타내는 등급입니다. | ||
| 설명 생산 우선순위는 계획 담당자와 일정 담당자가 현장의 작업 순서를 관리할 때 사용하는 필드입니다. 우선순위가 높은 오더를 앞당기면 다른 오더의 계획 일정에 영향을 줄 수 있습니다. 이 속성을 분석하면 우선순위가 높거나 긴급 처리된 오더로 인해 생산 계획이 얼마나 자주 변경되는지 파악할 수 있습니다. 오더 진행 중 우선순위가 바뀐 내역을 추적하면 수요나 계획의 불안정성을 확인할 수 있습니다. 'Expedited Production Trends' 대시보드와 'Expedited Production Rate' KPI에도 사용됩니다. 중요한 이유 긴급 오더의 빈도와 영향을 파악해 계획의 불안정성이나 사후 대응 중심의 운영을 확인할 수 있습니다. 확보 방법 'ProdTable'의 표준 필드이거나 사용자 지정 필드일 수 있습니다. 설정은 회사마다 다를 수 있습니다. 예시 일반높음긴급 | |||
| 생산 유형 ProductionType | 표준 생산, 재작업, 프로젝트 생산 등 생산 오더의 분류입니다. | ||
| 설명 생산 유형은 오더의 목적에 따라 분류합니다. 예를 들어 'Standard' 오더는 일반 재고 생산, 'Rework' 오더는 기존 생산품의 결함 수정, 'Project' 오더는 특정 고객 프로젝트에 연결된 생산을 뜻합니다. 이 속성은 서로 비교할 수 있는 분석 뷰를 만드는 데 중요합니다. 재작업 오더의 프로세스는 표준 오더와 본질적으로 다릅니다. 생산 유형별로 프로세스를 구분해 분석하면 의미 있는 비교가 가능하고, 유형별 고유한 문제와 작업 흐름을 파악할 수 있습니다. 중요한 이유 'Standard'와 'Rework'처럼 오더 유형에 따라 프로세스와 성과 기대치가 다르므로, 이 속성으로 분석 대상을 구분할 수 있습니다. 확보 방법 'ProdTable' 테이블의 'ProdType' 필드입니다. 예시 표준재작업프로젝트 | |||
| 생산 주문 상태 ProductionOrderStatus | 생산 주문의 현재 진행 상태를 나타냅니다. | ||
| 설명 생산 주문 상태는 제조 과정에서 주문이 어느 단계에 있는지 보여줍니다. Dynamics 365에서 흔히 사용하는 상태로는 생성됨, 추정됨, 일정 수립됨, 릴리스됨, 시작됨, 완료 보고됨, 종료됨이 있습니다. 이 속성을 통해 각 주문의 현재 상태를 확인할 수 있습니다. process mining에서는 상태 변경을 분석해 활동을 정의하고 프로세스 흐름을 파악합니다. 특정 상태의 주문만 필터링하거나 각 상태에 머문 시간을 분석하고, 진행이 멈추거나 지연된 주문을 찾는 데도 사용할 수 있습니다. 중요한 이유 주문 진행 상황을 개괄적으로 보여주는 속성입니다. 필터링, 적합성 검사, 생산 단계별 소요 시간 분석에 중요합니다. 확보 방법 ‘ProdTable’ 테이블의 ‘ProdStatus’ 필드입니다. 예시 일정 수립됨릴리스됨시작됨종료됨 | |||
| 실제 생산 수량 ActualQuantity | 오더에 대해 생산을 완료하고 완료 보고한 제품 수량입니다. | ||
| 설명 실제 생산 수량은 해당 생산 오더에서 완료되어 품질 검사를 통과한 제품 수를 나타냅니다. 생산 완료 보고 시 이 값이 기록됩니다. 이 속성은 생산 수율과 효율을 분석하는 데 사용합니다. 실제 생산 수량을 계획 수량과 비교하면 폐기율을 계산하고 생산 손실을 파악할 수 있습니다. 처리량 분석과 용량 활용률 대시보드에도 필요한 데이터입니다. 중요한 이유 생산 수율, 폐기율, 실제 처리량을 계산하는 데 필요하며 제조 효율과 성과를 파악할 수 있습니다. 확보 방법 오더 완료 보고 시 'ProdTable' 테이블의 'QtyGood' 필드나 관련 분개 전기 테이블에서 가져오는 경우가 많습니다. 예시 100985000 | |||
| 제품 번호 ProductNumber | 제조 대상 품목을 식별하는 고유 번호입니다. | ||
| 설명 제품 번호 또는 품목 ID는 생산 오더에서 제조할 완제품을 지정합니다. 해당 제품의 자재 명세서와 라우팅 지침을 비롯해 생산 프로세스와 제조 대상을 연결합니다. 제품 번호별로 프로세스를 분석하면 제품에 따른 제조 과정의 차이를 확인할 수 있습니다. 특정 제품의 사이클 타임이 더 길거나 재작업이 많고 지연이 잦은 경우를 찾아 제품 및 프로세스 엔지니어링 개선에 활용할 수 있습니다. 중요한 이유 제조 제품별 프로세스 차이를 분석해 제품별 병목이나 품질 문제를 파악할 수 있습니다. 확보 방법 'ProdTable' 테이블의 'ItemId' 필드입니다. 예시 FG-1001FG-2050ASSY-500B | |||
| 계획 수량 PlannedQuantity | 생산 예정인 품목의 수량입니다. | ||
| 설명 계획 수량은 해당 생산 오더에서 제조할 목표 제품 수량입니다. 일반적으로 판매 오더 수요, 안전 재고 요건 또는 마스터 계획에 따라 정합니다. 이 속성은 수율과 폐기율 같은 성과 지표의 기준이 됩니다. 계획 수량과 실제 생산 수량을 비교하면 생산 효율과 자재 차이를 확인할 수 있습니다. 용량 계획과 자재 소요량 계획에도 기본 데이터로 사용됩니다. 중요한 이유 실제 생산 수량과 비교해 생산 수율과 폐기율을 측정하는 기준 수량입니다. 확보 방법 'ProdTable' 테이블의 'QtySched' 필드입니다. 예시 1005000250 | |||
| 생산 라인 ProductionLine | 생산 오더에 배정된 특정 생산 라인, 작업장 또는 리소스 그룹입니다. | ||
| 설명 생산 라인은 제조 작업을 수행할 특정 기계, 셀 또는 리소스 그룹을 나타냅니다. 생산 공장보다 세부적인 정보를 제공합니다. 생산 라인별 프로세스 분석은 용량과 활용률을 자세히 파악하는 데 중요합니다. 과부하된 작업장을 찾고, 같은 제품을 생산하는 라인의 효율을 비교하며, 공장 단위에서는 드러나지 않는 리소스별 병목을 확인할 수 있습니다. 중요한 이유 리소스 활용률과 성과를 세부적으로 분석해 과부하된 작업장이나 비효율적인 생산 라인을 찾을 수 있습니다. 확보 방법 생산 라우트 트랜잭션의 'WrkCtrId' 필드에서 확인할 수 있습니다. 해당 정보는 'ProdRoute' 또는 'ProdRouteTrans' 테이블에 있는 경우가 많습니다. 예시 LINE-01LINE-02CNC-A | |||
| 생산 시작 지연 ProductionStartDelay | 오더 릴리스부터 실제 생산 시작까지 걸린 시간입니다. | ||
| 설명 이 계산 시간은 현장의 대기 시간 또는 대기열 시간을 측정합니다. 'Production Order Released' 활동부터 'Production Started' 활동까지의 시간 차이입니다. 이 KPI는 계획이 완료되고 오더가 실행 준비를 마친 뒤 발생하는 지연을 보여 주므로 'Resource Allocation Delay Analysis' 대시보드에 중요합니다. 값이 크면 리소스 가용성, 자재 준비 또는 현장으로 전달되는 정보 흐름에 문제가 있을 수 있습니다. 이를 바탕으로 운영 개선 대상을 구체적으로 정할 수 있습니다. 중요한 이유 실행 준비가 끝난 뒤 시작까지 걸리는 지연을 정확히 측정해 리소스 가용성이나 현장 준비 상태와 관련된 병목을 찾을 수 있습니다. 확보 방법 계산 지표입니다. Timestamp('Production Started') - Timestamp('Production Order Released')로 계산합니다. 예시 0일 4시간 15분1일 2시간 0분0일 1시간 30분 | |||
| 수정 횟수 ProductionOrderRevisionNumber | 생산 계획을 처음 생성한 후 조정한 횟수입니다. | ||
| 설명 이 속성은 일정 계획을 수립하거나 오더를 릴리스한 후 수량, 일자, 라우팅 등을 변경한 횟수를 추적합니다. 횟수가 많을수록 계획이 불안정하다는 뜻입니다. 이 값은 'Production Plan Revision Rate' KPI를 직접 측정하는 데 사용됩니다. 분석을 통해 잦은 수요 변경이나 부정확한 초기 계획 등 계획 불안정의 원인을 찾을 수 있습니다. 비효율을 초래하는 재작업과 일정 재조정의 규모도 수치로 확인할 수 있습니다. 중요한 이유 계획 안정성을 직접 측정하고 'Production Plan Revision Rate' KPI를 산출해 변경과 재작업이 과도한 프로세스를 찾을 수 있습니다. 확보 방법 각 케이스에서 'Production Order Adjusted' 활동이 발생한 횟수를 세어 계산하는 속성입니다. 예시 012 | |||
| 자재 가용성 MaterialAvailabilityStatus | 생산 오더에 필요한 원자재를 사용할 수 있는지 나타냅니다. | ||
| 설명 이 속성은 생산에 필요한 구성품의 준비 상태를 추적합니다. 상태는 'Available', 'On Order', 'Shortage' 등으로 표시할 수 있습니다. 일정 담당자는 이 정보를 통해 생산 오더를 계획대로 시작할 수 있는지 판단할 수 있습니다. process mining에서는 생산 시작 지연의 근본 원인을 진단하는 데 중요합니다. 이 상태와 'Production Order Released'부터 'Production Started'까지의 시간을 연관 지으면 자재 부족이 일정 준수와 전체 사이클 타임에 미치는 영향을 수치로 파악할 수 있습니다. 'Material Availability Delay Impact' 대시보드에도 활용됩니다. 중요한 이유 자재 부족으로 인한 생산 시작 지연을 파악하고 그 영향을 수치화해 공급망 성과와 제조 효율의 관계를 분석할 수 있습니다. 확보 방법 이 상태는 단일 필드가 아닌 경우가 많습니다. 'InventSum' 테이블을 사용해 생산 오더의 자재 명세서(BOM)에 포함된 모든 품목의 보유 재고를 확인해 계산할 수 있습니다. 예시 모두 사용 가능일부 부족사용 불가 | |||
| 정시 시작 여부 ProductionScheduleAdherence | 생산 오더가 계획 시작 일자 당일 또는 그 전에 시작했으면 참으로 표시하는 불리언 값입니다. | ||
| 설명 이 계산 속성은 생산 시작 시점의 일정 준수 여부를 간단한 참·거짓 값으로 나타냅니다. 실제 시작 타임스탬프('Production Started' 이벤트)를 'PlannedStartDate' 속성과 비교합니다. 'Production Schedule Adherence Rate'와 같은 KPI와 대시보드를 명확하고 간결하게 만드는 데 유용합니다. 분석 도구에서 날짜를 직접 비교하지 않아도 오더를 쉽게 필터링하고 집계해 정시 시작 비율과 지연 오더의 특성을 확인할 수 있습니다. 중요한 이유 일정 준수 보고와 KPI 계산을 간소화하고, 정시 오더와 지연 오더를 쉽게 필터링하고 집계할 수 있습니다. 확보 방법 계산 지표입니다. 계산식은 'Production Started' EventTime <= PlannedStartDate입니다. 예시 truefalse | |||
| 종료 시각 EndTime | 활동이 완료된 시점을 나타내는 정확한 타임스탬프입니다. | ||
| 설명 종료 시각은 특정 활동이 완료된 시점을 나타냅니다. 시작 시각이 활동의 시작을 나타낸다면, 종료 시각은 해당 단계의 실제 소요 시간이나 처리 시간을 파악하는 데 필요합니다. process mining에서 활동의 시작 시각과 종료 시각을 모두 사용하면 대기 시간과 처리 시간을 더 세밀하게 분석할 수 있습니다. 활동을 실제로 수행한 시간과 다음 단계가 시작되기를 기다린 시간을 구분할 수 있어 병목을 자세히 분석하는 데 유용합니다. 중요한 이유 활동 처리 시간을 계산해 대기 시간과 구분할 수 있으므로 병목을 더 정확하게 분석할 수 있습니다. 확보 방법 다른 데이터에서 계산하는 경우가 많습니다. 예를 들어 'Production Started'의 종료 시각을 'Operation Completed'의 시작 시각으로 볼 수 있습니다. 일부 로그에는 종료 타임스탬프가 명시적으로 기록됩니다. 예시 2023-04-15T09:30:45Z2023-04-15T12:00:00Z2023-04-16T15:00:10Z | |||
| 품질 오더 번호 QualityOrderNumber | 생산 오더와 연결된 품질 검사 오더의 식별자입니다. | ||
| 설명 품질 검사가 필요한 경우 Dynamics 365에서 품질 오더를 생성하는 경우가 많습니다. 이 속성은 연결된 품질 오더의 ID를 기록해 생산 프로세스와 품질 보증 프로세스를 연결합니다. 이 연결 정보를 사용하면 품질 관리 단계를 포함한 전체 프로세스를 확인할 수 있습니다. 품질 검사가 생산 리드 타임에 미치는 영향을 분석하고, 품질 프로세스의 지연을 찾으며, 제품이나 생산 라인별 품질 검사 빈도를 파악할 수 있습니다. 중요한 이유 생산 프로세스와 품질 보증 프로세스를 연결해 품질 검사가 전체 리드 타임에 미치는 영향을 분석할 수 있습니다. 확보 방법 이 정보는 품질 관리 테이블(예: 'InventQualityOrderTable')에 저장되며 생산 오더와 연결해야 합니다. 예시 QO-00123QO-00124QO-00125 | |||
생산 계획 활동
| 활동 | 설명 | ||
|---|---|---|---|
| 생산 시작 | 생산 현장에서 해당 주문의 실제 작업이 시작된 시점을 나타냅니다. 첫 번째 운영이나 작업을 생산 현장 단말기에서 시작하거나 분개장을 전기할 때 기록되는 경우가 많습니다. | ||
| 중요한 이유 이 활동은 실제 생산 시작 시간을 제공합니다. 시작 지연, 일정 준수율, 실제 리드 타임을 계산하는 데 중요합니다. 확보 방법 ProdTable의 생산 주문 상태가 ‘시작됨’으로 변경될 때 기록합니다. 첫 번째 작업의 작업 카드나 라우트 카드 분개장을 전기하면 상태가 변경되는 경우가 많습니다. 기록 ProdTable의 ProdStatus 필드가 ‘시작됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 완료 보고 | 지정된 수량의 제품 생산이 실제로 완료되어 완제품이 재고에 입고되었음을 나타냅니다. 재고 거래를 발생시키는 중요한 상태 변경입니다. | ||
| 중요한 이유 실제 생산이 끝난 시점을 나타냅니다. 정시 완료율, 실제 생산 기간, 처리량을 계산하는 데 필요합니다. 확보 방법 ProdTable의 생산 주문 상태가 ‘완료 보고됨’으로 변경될 때 기록합니다. 생산 완료 보고 분개장을 전기하면 상태가 변경됩니다. 기록 ProdTable의 ProdStatus 필드가 ‘완료 보고됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 주문 릴리스 | 생산 주문이 승인되어 생산 현장에서 실행할 수 있도록 허가되었음을 나타냅니다. 작업 카드와 라우트 카드 등의 문서를 발행하는 주요 단계입니다. | ||
| 중요한 이유 계획에서 실행으로 공식 인계되는 시점입니다. ‘일정 수립됨’부터 ‘릴리스됨’까지의 시간은 승인 지연이나 최종 점검을 나타낼 수 있습니다. ‘릴리스됨’부터 ‘시작됨’까지의 시간은 생산 현장의 준비 상태를 보여줍니다. 확보 방법 ProdTable의 생산 주문 상태가 ‘릴리스됨’으로 변경될 때 기록합니다. 사용자가 수동으로 변경하거나 시스템이 자동으로 처리할 수 있습니다. 기록 ProdTable의 ProdStatus 필드가 ‘릴리스됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 주문 생성 | 이 활동은 생산 주문이 생성된 시점을 나타냅니다. 생산 주문은 특정 제품의 생산 수량에 대한 수요를 공식화합니다. 일반적으로 계획 생산 주문을 확정할 때 시스템에 고유 ID가 있는 공식 기록이 생성됩니다. | ||
| 중요한 이유 생산 프로세스의 주요 시작 이벤트입니다. 주문 생성부터 후속 단계까지 걸리는 시간을 분석하면 전체 계획 리드 타임과 효율을 측정할 수 있습니다. 확보 방법 ProdTable에 저장된 생산 주문 생성 타임스탬프를 기준으로 이 이벤트를 추정합니다. 초기 상태는 일반적으로 ‘생성됨’입니다. 기록 ProdStatus가 ‘생성됨’인 ProdTable의 새 레코드에서 생성 타임스탬프를 수집합니다. 이벤트 유형 inferred | |||
| 생산 주문 일정 수립 | 생산 주문의 일정이 수립되면 작업에 필요한 리소스와 날짜, 시간이 배정됩니다. 이 단계에는 운영 일정 수립이나 더 세부적인 작업 일정 수립이 포함될 수 있습니다. | ||
| 중요한 이유 일정 수립은 생산 능력 계획과 리소스 관리에 중요합니다. 주문 일정 수립에 걸리는 시간과 생산 주문을 릴리스하기까지의 간격을 분석하면 계획 및 생산 능력 제약을 파악할 수 있습니다. 확보 방법 ProdTable의 생산 주문 상태가 ‘일정 수립됨’으로 변경될 때 기록합니다. 사용자가 일정 수립 기능을 실행하면 상태가 변경됩니다. 기록 ProdTable의 ProdStatus 필드가 ‘일정 수립됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 주문 종료 | 생산 주문의 재무 마감 단계입니다. 모든 비용을 계산해 전기하고 나면 해당 주문에 추가 거래를 기록할 수 없습니다. | ||
| 중요한 이유 실물 생산과 재무 처리가 모두 완료된 시점을 나타냅니다. ‘완료 보고됨’부터 ‘종료됨’까지의 지연은 원가 회계나 재무 마감 과정의 문제를 나타낼 수 있습니다. 확보 방법 ‘ProdTable’의 ‘ProdStatus’ 필드가 ‘종료됨’으로 설정될 때 기록되는 최종 상태 변경입니다. 원가를 계산하고 주문을 종료하면 상태가 변경됩니다. 기록 ProdTable의 ProdStatus 필드가 ‘종료됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 자재 피킹 | 생산 주문에 필요한 원자재를 창고에서 피킹해 사용할 준비를 마쳤음을 나타냅니다. 원자재 피킹 작업을 완료하거나 피킹 목록 분개장을 전기할 때 이 이벤트가 기록됩니다. | ||
| 중요한 이유 이 활동은 생산을 시작하기 위한 중요한 관문입니다. 일정 수립부터 자재 피킹까지의 지연을 살펴보면 창고 운영이나 자재 가용성 문제를 파악할 수 있습니다. 확보 방법 일반적으로 생산 주문과 연결된 창고 관리 테이블(WHSWorkTable)이나 재고 분개장(InventJournalTrans)에 명시적으로 기록됩니다. 기록 생산 주문과 연결된 피킹 목록 분개장의 전기 타임스탬프를 수집합니다. 이벤트 유형 explicit | |||
| 생산 주문 변경 | 생산 주문을 릴리스한 후 수량이나 날짜를 변경하는 등 중요한 수정이 발생했음을 나타냅니다. 변경 전후의 주요 필드를 비교해 이 이벤트를 추정합니다. | ||
| 중요한 이유 잦은 변경은 계획이 불안정하거나 수요 변동이 크다는 신호일 수 있으며, 비효율과 재작업으로 이어질 수 있습니다. 이 이벤트를 통해 변경 빈도와 영향을 측정할 수 있습니다. 확보 방법 변경 로그를 분석하거나 주문 상태가 ‘릴리스됨’으로 바뀐 후 ProdTable 레코드의 ‘QtySched’, ‘SchedEnd’ 등의 필드를 비교해 추정합니다. 기록 ‘릴리스됨’ 이벤트의 타임스탬프 이후 ProdTable의 주요 필드(예: 수량, 날짜)가 변경되었는지 확인합니다. 이벤트 유형 calculated | |||
| 생산 주문 원가 추정 | 생산 주문에 필요한 자재 소비량과 비용을 추정하는 단계입니다. 이후 작업에 앞서 재무 및 자재 요건을 파악하는 중요한 계획 단계입니다. | ||
| 중요한 이유 추정이 지연되면 계획 단계의 주요 병목이 될 수 있습니다. 이 활동을 추적하면 원가 및 자재 계획 과정의 비효율을 파악할 수 있습니다. 확보 방법 ProdTable의 생산 주문 상태가 ‘추정됨’으로 변경될 때 기록합니다. 사용자가 주문에서 ‘추정’ 기능을 실행하면 이 상태가 변경됩니다. 기록 ProdTable의 ProdStatus 필드가 ‘추정됨’으로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 생산 주문 취소 | 완료 전에 생산 주문이 취소되었음을 나타냅니다. 프로세스가 성공적으로 완료되지 않은 대체 종료 경로입니다. | ||
| 중요한 이유 취소를 추적하면 수요 변경이나 계획 오류 등 프로세스가 중단된 원인을 파악할 수 있습니다. 취소율이 높으면 시스템 전반의 문제를 나타낼 수 있습니다. 확보 방법 상태 변경을 기준으로 추정하는 대체 종료 상태입니다. 정확한 상태 값은 다를 수 있지만, 주문 상태를 이전 단계로 되돌리고 취소로 표시하는 경우가 많습니다. 기록 취소를 나타내는 상태 변경을 감지합니다. 이를 확인하려면 시스템별 분석이 필요할 수 있습니다. 이벤트 유형 inferred | |||
| 운영 완료 | 생산 라우트의 개별 제조 운영 또는 단계가 완료되었음을 나타냅니다. 생산 주문 하나에서 이 이벤트가 여러 번 발생할 수 있습니다. | ||
| 중요한 이유 운영 간 소요 시간을 분석하면 생산 프로세스 내부의 병목을 찾을 수 있습니다. 생산 현장의 흐름을 더 세부적으로 파악할 수 있습니다. 확보 방법 각 운영의 완료를 나타내는 라우트 카드 분개장(ProdJournalRoute) 전기 기록에서 명시적으로 수집합니다. 기록 생산 주문과 연결된 각 ProdJournalRoute 레코드의 전기 타임스탬프를 수집합니다. 이벤트 유형 explicit | |||
| 품질 검사 통과 | 생산 작업과 연결된 품질 주문의 검증이 성공적으로 완료되었음을 나타냅니다. 생산품이 요구되는 품질 기준을 충족했음을 확인합니다. | ||
| 중요한 이유 품질 절차의 주요 단계입니다. 품질 주문 생성부터 검사 통과까지 걸리는 시간을 통해 품질 보증 팀의 처리 효율을 파악할 수 있습니다. 확보 방법 InventQualityOrderTable 레코드의 상태가 ‘통과’로 변경된 것을 기준으로 추정합니다. 구체적인 상태 값은 시스템 설정에 따라 다를 수 있습니다. 기록 연결된 InventQualityOrderTable 레코드의 상태가 ‘통과’로 변경된 타임스탬프를 감지합니다. 이벤트 유형 inferred | |||
| 품질 주문 생성 | 생산 주문의 결과물을 검사하기 위한 품질 주문이 생성되었습니다. 이 이벤트는 생산품의 품질 보증 절차가 시작되었음을 나타냅니다. | ||
| 중요한 이유 품질 절차를 추적하면 전체 리드 타임을 파악하는 데 도움이 됩니다. 품질 검사 지연으로 제품 출하나 후속 프로세스에서의 사용이 늦어질 수 있습니다. 확보 방법 원본 생산 주문을 참조하는 InventQualityOrderTable 레코드가 생성될 때 명시적으로 기록됩니다. 기록 생산 주문 ID와 연결된 InventQualityOrderTable의 품질 주문 생성 타임스탬프를 수집합니다. 이벤트 유형 explicit | |||
데이터 추출 가이드
단계
- Data Management Workspace로 이동: Microsoft Dynamics 365 Finance and Operations에 로그인합니다. 검색창에서
Data management작업 영역을 찾아 이동합니다. - 새 내보내기 프로젝트 만들기: 작업 영역에서
Export타일을 선택해 새 데이터 내보내기 프로젝트를 만듭니다.ProcessMind_Production_Orders와 같이 프로젝트를 알아보기 쉬운 이름으로 지정합니다. - 내보내기 파일 형식 선택: 프로젝트 설정에서 CSV 또는 Excel 등 원하는 데이터 형식을 선택합니다.
Entity옵션을 설정하고 형식 세부 정보를 지정합니다. 성능과 호환성을 고려하면 CSV를 권장합니다. - 필요한 데이터 엔터티 추가: 생산 주문 이벤트를 모두 수집할 수 있도록 필요한 데이터 엔터티를 프로젝트에 추가합니다.
생산 주문,Production order route transactions,Inventory quality orders,Production picking list journal lines엔터티를 각각 추가합니다. 각 엔터티에서 쿼리 섹션에 명시된 관련 필드를 모두 선택합니다. - 데이터 필터 적용: 각 엔터티에서
필터옵션을 사용해 내보낼 데이터 범위를 지정합니다. 최소한Company를 기준으로 필터링해 올바른 법인을 선택합니다. 데이터 양을 관리할 수 있도록 날짜 범위 필터도 적용하는 것이 좋습니다. 예를 들어생산 주문엔터티의Creation date필드를 기준으로 최근 6개월을 선택할 수 있습니다. - 증분 내보내기 설정(선택 사항): 지속적인 분석을 위해 프로젝트에서 증분 내보내기를 설정합니다. 원본 엔터티의 변경 사항을 추적하면 마지막 내보내기 이후 새로 추가되거나 수정된 레코드만 추출할 수 있어 내보내기 시간을 크게 줄일 수 있습니다.
- 내보내기 작업 실행: 프로젝트를 설정한 후 작업 창에서
Export를 클릭해 내보내기를 시작합니다. 즉시 실행하거나 반복 일괄 작업으로 예약할 수 있습니다. - 내보낸 파일 다운로드: 내보내기 작업이 성공적으로 완료되면 작업 기록으로 이동합니다. 포함한 각 엔터티의 데이터 파일이 들어 있는 ZIP 패키지를 다운로드합니다.
- 데이터를 이벤트 로그로 변환: 내보낸 파일은 원시 테이블 데이터이며, 서식이 적용된 이벤트 로그가 아닙니다. Python 스크립트, Excel/Power BI의 Power Query 또는 ETL 도구와 같은 외부 도구를 사용해 파일의 데이터를 처리하고 결합해야 합니다. 쿼리 섹션의 변환 로직을 적용해 여러 엔터티의 날짜 및 상태 필드를 하나의 이벤트 로그 파일로 변환하고, 활동마다 한 행을 생성합니다.
- 최종 이벤트 로그 구성: 변환한 최종 CSV 파일에 필수 열
ProductionOrderNumber,ActivityName,EventTime,SourceSystem,LastDataUpdate와 권장 속성이 포함되어 있는지 확인합니다. 파일에 머리글 행을 포함하고 ProcessMind에 업로드할 수 있도록 준비합니다.
구성
- 주요 데이터 엔터티: 이 추출은 여러 엔터티를 내보낸 뒤 결합하는 방식으로 이루어집니다. 주요 엔터티는
생산 주문(ProdTable),Production order route transactions(ProdRouteTrans),Inventory quality orders(InventQualityOrderTable)입니다. - 날짜 범위 필터링: 데이터 양을 관리하려면 항상 날짜 필터를 적용합니다.
생산 주문엔터티의Creation date(CREATEDDATETIME)를 기준으로 최근 3~6개월을 필터링하는 방법을 권장합니다. 이렇게 하면 시스템에 과부하를 주지 않으면서 최근 프로세스의 전체 데이터를 확보할 수 있습니다. - 회사 필터: 분석할 특정 회사 또는 법인을 대상으로 필터를 설정해야 합니다. 내보내기 프로젝트에서 각 엔터티의
필터옵션을 사용합니다. - 전체 내보내기와 증분 내보내기: 최초 추출에는 전체 내보내기가 필요합니다. 이후 업데이트에서는 엔터티의 변경 추적을 설정하고 증분 내보내기를 수행하는 것이 좋습니다. 성능이 향상되고 데이터 부하가 줄어듭니다.
- 사전 요구 사항: 내보내기를 실행하는 사용자에게 적절한 보안 역할이 있어야 합니다. 일반적으로
Data management administrator역할 또는 필수 데이터 엔터티에 액세스할 권한이 있는 역할이 필요합니다.
샘플 쿼리 sql
/*
This is not a runnable script but a configuration and transformation plan for the Dynamics 365 Data Management Framework.
**Step 1: Configure the Export Project**
Export the following entities with the specified fields:
1. **Entity: Production orders (ProdTable)**
* `ProductionOrderNumber` (PRODID)
* `ProductionOrderStatus` (PRODSTATUS)
* `CreationDate` (CREATEDDATETIME)
* `LastUpdateDateStatusEstimate` (LASTUPDATEDATESTATUSESTIMATE)
* `LastUpdateDateStatusScheduled` (LASTUPDATEDATESTATUSSCHEDULED)
* `ReleaseDate` (RELEASEDATETIME)
* `StartDate` (STARTEDDATETIME)
* `ReportedFinishedDate` (REPORTEDFINISHEDDATETIME)
* `LastUpdateDateStatusEnded` (LASTUPDATEDATESTATUSENDED)
* `ModifiedDateTime` (MODIFIEDDATETIME)
* `CreatedByUser` (CREATEDBY)
* `ProductionSite` (INVENTSITEID)
* `ProductNumber` (ITEMID)
* `ProductionType` (PRODTYPE)
* `Quantity` (QTYsched)
* `ActualQuantity` (QTYCALC)
* `DeliveryDate` (DLVDATE)
2. **Entity: Production order route transactions (ProdRouteTrans)**
* `ProductionOrderNumber` (PRODID)
* `OperationNumber` (OPRNUM)
* `TransactionDate` (TRANSDATE)
* `TransactionTime` (TRANSTIME)
* `CreatedDateTime` (CREATEDDATETIME)
* `CreatedByUser` (CREATEDBY)
3. **Entity: Inventory quality orders (InventQualityOrderTable)**
* `QualityOrderNumber` (INVENTQUALITYORDERID)
* `ReferenceType` (REFTYPE)
* `ReferenceNumber` (PRODID)
* `QualityOrderStatus` (STATUS)
* `CreationDate` (CREATEDDATETIME)
* `ModifiedDateTime` (MODIFIEDDATETIME)
4. **Entity: Production picking list journal lines (ProdJournalBOM)**
* `JournalId` (JOURNALID)
* `ProductionOrderNumber` (PRODID)
* `PostedDateTime` (POSTEDDATETIME)
* `CreatedByUser` (CREATEDBY)
**Step 2: Apply Transformation Logic (Post-Export)**
Use a script or ETL tool to transform the exported files into a single event log CSV. For each row in the source files, generate events as described below.
*/
-- Production Order Created
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
CREATEDDATETIME AS EventTime,
PRODSTATUS AS ProductionOrderStatus,
DLVDATE AS PlannedStartDate,
-- [Logic to calculate PlannedEndDate] AS PlannedEndDate,
CREATEDBY AS UserId,
INVENTSITEID AS ProductionPlant,
ITEMID AS ProductNumber,
PRODTYPE AS ProductionType,
QTYCALC AS ActualQuantity,
-- [Your field for Production Priority] AS ProductionPriority
FROM ProdTable
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Estimated
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
LASTUPDATEDATESTATUSESTIMATE AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSESTIMATE IS NOT NULL
UNION ALL
-- Production Order Scheduled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
LASTUPDATEDATESTATUSSCHEDULED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSSCHEDULED IS NOT NULL
UNION ALL
-- Materials Picked For Production (based on the first picking list journal posting)
SELECT
PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
MIN(POSTEDDATETIME) AS EventTime, -- Use the earliest posting time for a given order
-- Other attributes from ProdTable...
FROM ProdJournalBOM
WHERE POSTEDDATETIME IS NOT NULL
GROUP BY PRODID
UNION ALL
-- Production Order Released
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
RELEASEDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE RELEASEDATETIME IS NOT NULL
UNION ALL
-- Production Order Adjusted (inferred from modification after release)
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE MODIFIEDDATETIME > RELEASEDATETIME AND PRODSTATUS NOT IN ('Ended', 'Cancelled') -- Example logic
UNION ALL
-- Production Started
SELECT
PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
STARTEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE STARTEDDATETIME IS NOT NULL
UNION ALL
-- Operation Completed
SELECT
PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM ProdRouteTrans
WHERE CREATEDDATETIME IS NOT NULL
UNION ALL
-- Production Reported As Finished
SELECT
PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
REPORTEDFINISHEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE REPORTEDFINISHEDDATETIME IS NOT NULL
UNION ALL
-- Quality Order Generated
SELECT
PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
CREATEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND CREATEDDATETIME IS NOT NULL
UNION ALL
-- Quality Inspection Passed
SELECT
PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable linked on PRODID...
FROM InventQualityOrderTable
WHERE REFTYPE = 'Production' AND STATUS = 'Pass' AND MODIFIEDDATETIME IS NOT NULL
UNION ALL
-- Production Order Ended
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
LASTUPDATEDATESTATUSENDED AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE LASTUPDATEDATESTATUSENDED IS NOT NULL
UNION ALL
-- Production Order Cancelled
SELECT
PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
MODIFIEDDATETIME AS EventTime,
-- Other attributes from ProdTable...
FROM ProdTable
WHERE PRODSTATUS = 'Stopped' -- Or the equivalent 'Cancelled' status enum value in your system 단계
- Dynamics 365에서 BYOD 구성: Dynamics 365 for Finance and Operations 환경에서 'Bring your own database' 기능이 구성되어 있는지 확인합니다. Azure SQL Database를 설정하고 Dynamics 365에서 데이터를 내보내도록 구성해야 합니다.
- 필수 엔터티 게시: 'Data management' 작업 영역에서 'Data entities'로 이동합니다. 다음 주요 엔터티를 검색해 BYOD 데이터베이스에 게시합니다. ProdTable, ProdRouteTrans, InventPickingListJour, InventQualityOrderTable. 반복 내보내기가 설정되어 있는지도 확인합니다.
- 데이터 동기화 확인: 게시한 엔터티의 데이터가 대상 Azure SQL Database에 정상적으로 정기 동기화되는지 확인합니다. 내보내기 작업 기록에서 오류가 있는지 살펴봅니다.
- BYOD 데이터베이스에 연결: SQL Server Management Studio(SSMS) 또는 Azure Data Studio와 같은 SQL 클라이언트를 사용해 Dynamics 365 데이터가 저장된 Azure SQL Database에 연결합니다.
- SQL 쿼리 준비: 새 쿼리 창을 엽니다. 이 문서에 제공된 전체 SQL 쿼리를 복사합니다.
- 쿼리 매개변수 설정: 쿼리에서 자리표시자 변수를 찾습니다. '{StartDate}', '{EndDate}', '{CompanyCode}'를 원하는 날짜 범위와 분석할 회사의 DataAreaId로 바꿉니다.
- 쿼리 실행: 수정한 SQL 쿼리를 BYOD 데이터베이스에서 실행합니다. 실행 시간은 데이터 양과 지정한 날짜 범위에 따라 달라집니다.
- 결과 검토: 쿼리 실행이 끝나면 결과에 추출한 모든 활동의 예상 열과 데이터가 포함되어 있는지 확인합니다. 결과 집합이 이벤트 로그입니다.
- 이벤트 로그 내보내기: 쿼리 결과를 CSV 파일로 내보냅니다. 대부분의 SQL 클라이언트에는 결과를 파일로 바로 저장하는 기능이 있습니다.
- ProcessMind에 맞게 형식 지정: 내보낸 CSV 파일의 인코딩이 UTF-8인지 확인하고, 열 머리글이 CaseId, Activity, Timestamp 등 ProcessMind에서 요구하는 속성 이름과 일치하는지 확인합니다. 제공된 쿼리에는 이미 올바른 별칭이 적용되어 있습니다.
구성
- 주요 데이터 엔터티: 이 쿼리는 주로 BYOD 인스턴스로 내보낸 다음 엔터티를 사용합니다.
PRODTABLE: 생산 주문의 기본 헤더 정보와 상태를 포함합니다.PRODROUTETRANS: 개별 생산 작업과 완료 내역을 제공합니다.INVENTPICKINGLISTJOUR: 생산 주문에 필요한 자재의 피킹 내역을 기록합니다.INVENTQUALITYORDERTABLE: 생산과 관련된 품질 검사 주문을 추적합니다.
- 기간: 쿼리 성능을 관리할 수 있도록 먼저 3~6개월 정도의 제한된 기간으로 시작하는 것이 좋습니다. 쿼리는 생산 주문 생성일(
PRODTABLE의CREATEDDATETIME)을 기준으로 데이터를 필터링합니다. - 회사 코드 필터:
DATAREAID필드를 사용해 특정 법인 또는 회사의 데이터를 필터링합니다.'{CompanyCode}'자리표시자를 해당 ID(예: 'usmf')로 바꿔야 합니다. - 사전 요건: 이 방법을 사용하려면 BYOD를 구성할 수 있는 Dynamics 365 Finance and Operations 시스템 관리자 권한과 쿼리를 실행할 수 있는 Azure SQL Database Contributor 권한이 필요합니다.
- 성능: 여러 해 또는 여러 회사에 걸친 대규모 데이터셋은 사용량이 적은 시간대에 쿼리를 실행하는 것이 좋습니다. 추출 기간을 더 짧게 나누고 나중에 결과를 결합할 수도 있습니다.
샘플 쿼리 sql
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Created' AS ActivityName,
p.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity, -- Using calculated quantity at creation
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Estimated' AS ActivityName,
p.COSTCALCDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.COSTCALCDATETIME IS NOT NULL AND p.PRODSTATUS >= 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Scheduled' AS ActivityName,
p.SCHEDDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYCALC AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.SCHEDDATE IS NOT NULL AND p.PRODSTATUS >= 3 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Materials Picked For Production' AS ActivityName,
pl.LEDGERVOUCHERPOSTEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
pl.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTPICKINGLISTJOUR pl
JOIN PRODTABLE p ON pl.INVENTREFID = p.PRODID AND pl.DATAREAID = p.DATAREAID
WHERE pl.LEDGERVOUCHERPOSTEDDATETIME IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Released' AS ActivityName,
p.RELEASEDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.PRODSTATUS >= 4 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Adjusted' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.RELEASEDATE IS NOT NULL AND p.MODIFIEDDATETIME > p.RELEASEDATE AND p.PRODSTATUS IN (4, 5) AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Started' AS ActivityName,
p.STARTEDUPDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.STARTEDUPDATETIME IS NOT NULL AND p.PRODSTATUS >= 5 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
prt.PRODID AS ProductionOrderNumber,
'Operation Completed' AS ActivityName,
prt.TRANSDATE AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
prt.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODROUTETRANS prt
JOIN PRODTABLE p ON prt.PRODID = p.PRODID AND prt.DATAREAID = p.DATAREAID
WHERE prt.POSTINGTYPE = 8 AND prt.TRANSDATE IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Reported As Finished' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 6 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Order Generated' AS ActivityName,
qo.CREATEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.CREATEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Quality Inspection Passed' AS ActivityName,
qo.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
qo.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM INVENTQUALITYORDERTABLE qo
JOIN PRODTABLE p ON qo.INVENTREFID = p.PRODID AND qo.DATAREAID = p.DATAREAID
WHERE qo.INVENTREFTYPE = 9 AND qo.STATUS = 2 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Ended' AS ActivityName,
p.LASTUPDDATEPRINT AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 7 AND p.LASTUPDDATEPRINT IS NOT NULL AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'
UNION ALL
SELECT
p.PRODID AS ProductionOrderNumber,
'Production Order Cancelled' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
'Dynamics 365 BYOD' AS SourceSystem,
GETUTCDATE() AS LastDataUpdate,
p.PRODSTATUS AS ProductionOrderStatus,
p.SCHEDSTART AS PlannedStartDate,
p.SCHEDEND AS PlannedEndDate,
p.MODIFIEDBY AS UserId,
p.INVENTSITEID AS ProductionPlant,
p.ITEMID AS ProductNumber,
p.PRODTYPE AS ProductionType,
p.QTYGOOD AS ActualQuantity,
p.PRODPRIO AS ProductionPriority
FROM PRODTABLE p
WHERE p.PRODSTATUS = 0 AND p.CREATEDDATETIME >= '{StartDate}' AND p.CREATEDDATETIME <= '{EndDate}' AND p.DATAREAID = '{CompanyCode}'; 단계
- Power BI Desktop 또는 Power Query가 포함된 다른 승인 도구를 사용할 수 있는지 확인합니다. 사용자에게 필요한 Microsoft Dynamics 365 Manufacturing 데이터 엔터티를 읽을 권한이 있는지도 확인합니다. 환경 URL, 법인 또는 회사 범위, 승인된 인증 방식을 확인합니다.
- Power BI Desktop에서 데이터 가져오기를 선택하고 승인된 Dynamics 365 커넥터 또는 조직별 OData나 Dataverse 연결을 선택합니다. 관리자가 설정한 [Your Dynamics 365 environment connection]과 [Your credentials]를 사용합니다. 모든 배포 환경에서 특정 엔터티, 엔드포인트 또는 메뉴 경로를 사용할 수 있다고 가정하지 마세요.
- 생산 주문 헤더 엔터티, 생산 주문 작업 또는 경로 엔터티, 자재 피킹 또는 피킹 목록 엔터티, 생산 전기 엔터티, 품질 주문 엔터티와 상태 변경을 식별하는 데 필요한 승인된 감사, 이력 또는 변경 내용 추적 엔터티를 선택합니다. 쿼리의 각 원본 참조를 해당 환경에서 사용할 수 있는 엔터티나 쿼리로 바꿉니다.
- 추출 범위를 설정합니다. [Start date parameter], [End date parameter], [Your company or legal entity filter]를 적용합니다. 필요한 공장, 제품, 주문 유형 및 상태에 해당하는 생산 주문만 조회합니다. 생성, 견적, 일정 계획, 피킹, 릴리스, 조정, 시작, 작업 완료, 완료 보고, 품질 검사, 종료 및 취소를 구분하는 데 필요한 원본 타임스탬프를 유지합니다.
- Power Query에서 원본 열 이름과 데이터 형식을 표준화합니다. 이벤트 타임스탬프를 일관된 날짜 및 시간 형식으로 변환하고 식별자, 상태 값, 회사, 공장, 제품 번호, 사용자, 수량 및 우선순위를 정규화합니다. 원본 필드를 사용할 수 없는 경우 값을 만들어 넣지 말고 null을 반환합니다. 생산 주문 번호를 케이스 식별자로 사용합니다.
- 활동별 이벤트 테이블을 하나씩 만듭니다. 각 테이블에는 ProductionOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionOrderStatus, PlannedStartDate, PlannedEndDate, UserId, ProductionPlant, ProductNumber, ProductionType, ActualQuantity, ProductionPriority가 있어야 합니다. 활동 이름은 필수 이름 13개 중 하나와 일치하는 고정값이어야 합니다.
- Production Order Adjusted는 승인된 변경 전후 이력, 감사 또는 변경 내용 추적 원본에서만 식별합니다. 수량, 계획 날짜, 상태, 공장, 제품, 우선순위 등 관련 필드를 비교합니다. 기록된 변경 시각을 사용해 조건에 맞는 변경마다 조정 행을 추가합니다. 현재 생산 주문 스냅샷만으로 조정을 추정하지 마세요.
- 13개 활동 테이블을 모두 UNION ALL로 결합합니다. 생산 주문 번호나 이벤트 타임스탬프가 없는 행은 제거하되, 반복되는 작업 완료, 조정 또는 품질 이벤트는 정당한 기록일 수 있으므로 중복 제거하지 않습니다. ProductionOrderNumber와 EventTime을 기준으로 정렬하고, 가능한 경우 일관된 보조 정렬 기준을 적용합니다.
- 결과 테이블을 Power BI에 로드하거나 CSV 또는 ProcessMind에서 지원하는 다른 이벤트 로그 형식으로 내보냅니다. 내보낸 파일의 열 이름이 ProductionOrderNumber, ActivityName, EventTime, SourceSystem, LastDataUpdate, ProductionOrderStatus, PlannedStartDate, PlannedEndDate, UserId, ProductionPlant, ProductNumber, ProductionType, ActualQuantity, ProductionPriority와 정확히 일치하는지 확인합니다.
- ProcessMind에 업로드하기 전에 필수 활동이 각각 명시적인 이벤트 로그 행으로 포함되어 있는지, 타임스탬프의 시간대가 일관적인지, ProductionOrderNumber가 입력되어 있는지, LastDataUpdate가 추출 갱신 시각을 나타내는지 확인합니다. ProcessMind는 이벤트 로그를 그대로 읽으며 누락된 이벤트를 생성하지 않습니다.
구성
- 연결: Dynamics 365 환경에 승인된 Power Query 커넥터와 인증 방식을 사용합니다. [Your Dynamics 365 environment connection]과 [Your credentials]를 조직에서 승인한 값으로 바꿉니다.
- 원본 엔터티: 환경에서 사용할 수 있는 생산 주문 헤더, 작업 또는 경로, 자재 피킹 또는 피킹 목록, 생산 전기, 품질 주문, 승인된 감사 또는 변경 내용 추적 엔터티를 선택합니다. 엔터티 이름과 사용 가능 여부는 배포 환경마다 다르므로 메타데이터 브라우저에서 확인해야 합니다.
- 기간: 3~6개월 범위로 시작합니다. 가능한 경우 원본에서 EventTime 필터를 적용하고, 장기 생산 주문이나 과거 상태 전환을 확인할 때는 기간을 늘립니다.
- 회사 및 공장 필터: [Your company or legal entity filter]를 적용하고, 해당하는 경우 필요한 생산 공장 필터도 적용합니다. 환경에 법인이 여러 개 있고 주문 번호가 겹친다면 일반적인 회사 필터를 사용하지 마세요.
- 생산 주문 필터: 필요한 생산 주문 유형, 제품, 공장, 상태 및 주문 번호 범위를 기준으로 필터링합니다. 프로세스 분석에 취소 또는 종료 결과가 필요하다면 해당 주문을 필터링해 제외하지 마세요.
- 이벤트 포함: 반복되는 작업 완료, 자재 피킹, 품질 및 조정 이벤트를 모두 유지합니다. 로그를 생산 주문당 한 행으로 축약하지 마세요.
- 시간대: 모든 원본 타임스탬프를 문서화된 하나의 시간대로 변환합니다. 원본에서 제공하는 경우 원본 타임스탬프나 시간대 오프셋을 유지합니다.
- 갱신 메타데이터: 모든 행의 LastDataUpdate에 갱신 또는 추출 시각을 입력합니다. 전체 데이터셋을 한 번에 추출한다면 모든 행에 같은 갱신 시각을 사용해도 됩니다.
- 성능: 날짜, 회사, 공장 및 주문 필터를 원본에 적용합니다. 필요한 열만 선택하고 불필요한 병합을 피하며, 재사용할 원본 쿼리를 준비합니다. 대규모 데이터셋에는 증분 갱신을 고려합니다.
- 사전 요건: Power BI Desktop 또는 승인된 Power Query 호스트, Dynamics 365 환경에 대한 네트워크 접근, 선택한 모든 엔터티의 유효한 읽기 권한, 필요한 Dynamics 365 Manufacturing, 창고, 품질, 감사 또는 변경 내용 추적 접근 권한이 필요합니다.
- 구성에 따라 달라지는 데이터: 필수 이벤트 원본이 활성화되어 있지 않다면 [Configure based on your system]을 사용하고 누락된 원본을 문서화합니다. 현재 상태 스냅샷을 과거 이벤트 대신 사용하지 마세요.
샘플 쿼리 sql
let
StartDate = #datetime(2026, 1, 1, 0, 0, 0),
EndDate = #datetime(2026, 6, 30, 23, 59, 59),
CompanyFilter = "[Your company or legal entity filter]",
SourceSystemValue = "Microsoft Dynamics 365 Manufacturing",
RefreshTime = DateTimeZone.RemoveZone(DateTimeZone.UtcNow()),
ProductionOrderHeader = [Your production order header query],
ProductionOrderOperation = [Your production order operation or route query],
MaterialPicking = [Your material picking or picking list query],
ProductionPosting = [Your production posting query],
QualityOrder = [Your quality order query],
ProductionOrderHistory = [Your approved production order audit or change tracking query],
Header = Table.SelectRows(ProductionOrderHeader, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Operations = Table.SelectRows(ProductionOrderOperation, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Picking = Table.SelectRows(MaterialPicking, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Posting = Table.SelectRows(ProductionPosting, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Quality = Table.SelectRows(QualityOrder, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
History = Table.SelectRows(ProductionOrderHistory, each [EventTime] >= StartDate and [EventTime] <= EndDate and [Company] = CompanyFilter),
Created = Table.SelectRows(Header, each [EventType] = "Created" or [EventType] = "Firmed"),
Estimated = Table.SelectRows(Header, each [EventType] = "Estimated"),
Scheduled = Table.SelectRows(Operations, each [EventType] = "Scheduled"),
Picked = Table.SelectRows(Picking, each [EventType] = "Picked" or [EventType] = "Posted"),
Released = Table.SelectRows(Header, each [EventType] = "Released"),
Adjusted = Table.SelectRows(History, each [ChangedField] = "Quantity" or [ChangedField] = "PlannedStartDate" or [ChangedField] = "PlannedEndDate" or [ChangedField] = "Status" or [ChangedField] = "ProductionPlant" or [ChangedField] = "ProductNumber" or [ChangedField] = "ProductionPriority"),
Started = Table.SelectRows(Posting, each [EventType] = "Started"),
OperationCompleted = Table.SelectRows(Operations, each [EventType] = "Completed"),
ReportedFinished = Table.SelectRows(Posting, each [EventType] = "Reported as finished" or [EventType] = "Finished"),
QualityGenerated = Table.SelectRows(Quality, each [EventType] = "Generated" or [EventType] = "Created"),
QualityPassed = Table.SelectRows(Quality, each [EventType] = "Passed" or [EventType] = "Validated"),
Ended = Table.SelectRows(Header, each [EventType] = "Ended"),
Cancelled = Table.SelectRows(Header, each [EventType] = "Cancelled"),
ToEvent = (InputTable as table, Activity as text) as table =>
let
Selected = Table.SelectColumns(InputTable, {"ProductionOrderNumber", "EventTime", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}, MissingField.UseNull),
Named = Table.AddColumn(Selected, "ActivityName", each Activity, type text),
Source = Table.AddColumn(Named, "SourceSystem", each SourceSystemValue, type text),
Updated = Table.AddColumn(Source, "LastDataUpdate", each RefreshTime, type datetime),
Ordered = Table.ReorderColumns(Updated, {"ProductionOrderNumber", "ActivityName", "EventTime", "SourceSystem", "LastDataUpdate", "ProductionOrderStatus", "PlannedStartDate", "PlannedEndDate", "UserId", "ProductionPlant", "ProductNumber", "ProductionType", "ActualQuantity", "ProductionPriority"}),
Valid = Table.SelectRows(Ordered, each [ProductionOrderNumber] <> null and [ProductionOrderNumber] <> "" and [EventTime] <> null)
in
Valid,
EventsCreated = ToEvent(Created, "Production Order Created"),
EventsEstimated = ToEvent(Estimated, "Production Order Estimated"),
EventsScheduled = ToEvent(Scheduled, "Production Order Scheduled"),
EventsPicked = ToEvent(Picked, "Materials Picked For Production"),
EventsReleased = ToEvent(Released, "Production Order Released"),
EventsAdjusted = ToEvent(Adjusted, "Production Order Adjusted"),
EventsStarted = ToEvent(Started, "Production Started"),
EventsOperationCompleted = ToEvent(OperationCompleted, "Operation Completed"),
EventsReportedFinished = ToEvent(ReportedFinished, "Production Reported As Finished"),
EventsQualityGenerated = ToEvent(QualityGenerated, "Quality Order Generated"),
EventsQualityPassed = ToEvent(QualityPassed, "Quality Inspection Passed"),
EventsEnded = ToEvent(Ended, "Production Order Ended"),
EventsCancelled = ToEvent(Cancelled, "Production Order Cancelled"),
EventLog = Table.Combine({EventsCreated, EventsEstimated, EventsScheduled, EventsPicked, EventsReleased, EventsAdjusted, EventsStarted, EventsOperationCompleted, EventsReportedFinished, EventsQualityGenerated, EventsQualityPassed, EventsEnded, EventsCancelled}),
Typed = Table.TransformColumnTypes(EventLog, {{"ProductionOrderNumber", type text}, {"ActivityName", type text}, {"EventTime", type datetime}, {"SourceSystem", type text}, {"LastDataUpdate", type datetime}, {"ProductionOrderStatus", type text}, {"PlannedStartDate", type datetime}, {"PlannedEndDate", type datetime}, {"UserId", type text}, {"ProductionPlant", type text}, {"ProductNumber", type text}, {"ProductionType", type text}, {"ActualQuantity", type number}, {"ProductionPriority", type text}}),
Sorted = Table.Sort(Typed, {{"ProductionOrderNumber", Order.Ascending}, {"EventTime", Order.Ascending}, {"ActivityName", Order.Ascending}})
in
Sorted 시작할 준비가 되셨나요?
이 템플릿을 활용하면 생산 계획 데이터를 추출하고 분석하는 데 필요한 준비를 마칠 수 있습니다. 지금 운영을 최적화해 효율성을 높이세요.
생산 계획을 간소화해 효율을 높이세요
병목을 찾아 생산 주기를 30% 이상 단축하세요.
신용카드 없이 몇 분 만에 설정할 수 있습니다.