테이블 분할 기능을 수행하기 전에 트리밍하는 직렬 개별 측정의 여러 행으로 구성된 데이터 테이블이 있지만 제거하고 싶은 일부 중복 측정에 문제가 있지만 현재 코드는 '를 사용하는 것은 내가 필요로 하는 것에 대해 매우 느리고 비효율적일 수 있습니다.
배경 정보:
- 각 행은 연속적으로 수행된 재료 조각에 대한 개별 자동화 측정의 결과이며 다음 열이 포함된 보고서를 생성합니다.
- 재료의 각 개별 조각에 할당된 고유한 부품 ID [ PartID ]
- 개별 자재를 생성하는 데 사용된 원자재와 연결된 로트 ID [ LotID ]
- 수행한 측정에 대한 실제 측정값 [ Value ]
- 측정값(Pass/Fail/Rework)을 기준으로 측정결과 지정 [ Result ]
- 측정 타임스탬프 [ Date_Created ]
내 장비는 재료당 수십 개의 측정 행을 생성하고 보고서당 수천 개의 재료를 처리합니다. 그런 다음 이러한 보고서는 원래 데이터 테이블로 JMP에 제공됩니다.또한 각 보고서에는 여러 로트가 포함되어 있으므로 데이터 테이블에는 "PartID = 1"에 대한 여러 참조가 있습니다. 각 로트에 1부터 시작하는 일련 번호가 부여되기 때문입니다. 따라서 주어진 재료를 참조하려면 PartID와 LotID를 모두 사용해야 합니다.결과가 "재작업"인 경우 측정 장비는 개별 재료 조각에 대한 추가 측정을 중지하고 재료 조각의 방향을 변경한 다음 라인의 시작 부분으로 반환하여 이전의 모든 테스트를 다시 측정합니다. 재료와 연관되어 있지만 여전히 동일한 고유 부품 ID를 유지합니다.
요망되는 결과:
재작업 후에 모든 측정이 반복되고 재작업이 측정 값에 영향을 미칠 수 있기 때문에 스크립트를 사용하여 데이터 테이블을 살펴보고 재작업 결과까지의 모든 측정을 제거하고 싶습니다.이를 위해 현재 JSL 스크립트를 사용하여 각 행을 반복하고 다음을 수행합니다.
- 결과가 "재작업"인지 식별합니다. 그렇다면 다음을 수행하십시오.
- 주어진 재료 조각에 대한 PartID를 "xPartID"로 식별합니다.
- 주어진 재료 조각에 대한 LotID를 "xLot"으로 식별합니다.
- 주어진 측정에 대해 Date_Created를 "xDate"로 식별합니다.
- (PartID = xPartID) 및 (LotID = xLot) 및 (Date_Created <= xDate)인 모든 행을 선택하고 삭제합니다.
- 결과가 "재작업"이 아니면 루프에서 빠져 나오므로 계속할 필요가 없습니다.
나는 계속해서 극심한 속도 저하를 겪고 있으며 기본적으로 코드는 프로그램 충돌로 이어집니다.단계별로 실행하면 작동하는 것처럼 보이지만 실행하도록 두면 결국 죽습니다. 실제 코드는 다음과 같습니다.
//Recoding the two potential "Rework" results into a shared value "aRework"; putting the letter "a" in front of it so if I sort by the column ascending then all of these values are at the start of the list, to hopefully make it easier and faster to process them.
dt << Recode Column(
dt:result,
{Map Value(
_rcOrig,
{"FailOnHighRework", "aRework",
"FailOnLowRework", "aRework"},
Unmatched( _rcNow )
)},
Update Properties( 1 ),
Target Column( :result )
);
//Sorting the table using the result column after the recode, so all of the rework rows are at the start of the table
SortColumn = "result";
dt << Sort( By( :result ), Replace Table, Order( Ascending ), Suppress formula evaluation( 1 ) );
//now run the row-by-row script
dt << begin data update;
for each row(
If( :result == "aRework",
xRow = Row();
xPartID=:PartID[Row()];
xLot=:lot[Row()];
xDate=:date_created[Row()];
dt <<SELECT where=""></SELECT>저는 JMP 16.2.0(570548)을 사용 중입니다.