안녕하세요,
각 모델에 대한 기준선을 보유하는 테이블을 만들려고 합니다. 각 기준선은 각 모델의 예상 수율입니다. 중앙 테이블에서 기준선을 가져오고 각 모델의 수율 추세를 볼 때 관리 차트 또는 변동성 차트에 기준선을 그릴 수 있는 스크립트를 만들려고 합니다.
다음은 수익률 테이블에 대한 더미 데이터입니다.
| 모델 | 웨이퍼 ID | 생산하다 |
| IC1 | ㅏ | 50 |
| IC1 | 비 | 60 |
| IC1 | 씨 | 70 |
| IC2 | 이자형 | 30 |
| IC2 | 에프 | 40 |
| IC2 | G | 50 |
| IC2 | 시간 | 60 |
| IC3 | 아르 자형 | 80 |
| IC3 | 에스 | 90 |
| IC3 | 티 | 70 |
| IC3 | 지 | 65 |
다음은 컨트롤 차트로 가져와야 하는 더미 참조 라인 테이블입니다.
| 모델 | 수익률 기대치에 대한 기준선 |
| IC1 | 50 |
| IC2 | 45 |
| IC3 | 70 |
플롯하려는 컨트롤 차트 또는 가변성 차트의 y축에는 "수율"이 있고 x축에는 "WaferID"가 있습니다. 따라서 "수율" 열의 "열 속성" 기능을 사용하여 기준선을 설정할 수 없습니다. 볼 IC가 60개가 넘고 수동으로 입력하는 것보다 자동화할 수 있는 부분에 대한 도움을 찾고 있습니다. 다음은 내가 달성하려는 것의 샘플 스냅 샷입니다. 도움을 주시면 감사하겠습니다.

나는 다른 길을 택했다. Yield 열을 모델별로 분할하여 모델별로 별도의 열을 생성했습니다. 그런 다음 Column Properties > Spec Limits > Target을 사용하여 예상 값을 입력했습니다(본질적으로 대상이 아니겠습니까?). 첨부 파일을 참조하십시오.
JSL을 JMP가 지원하는 다른 언어로 현지화하는 것은 완벽하게 가능하지만 약간의 추가 노력이 필요합니다. 이 작업을 수행할 수 있는 방법에 대한 자세한 내용은 다음을 참조하십시오. 디스커버리 페이퍼 ~에 의해 @hecht_jmp . 예를 들어, 아웃라인 노드로 작업하고(위의 코드에서와 같이) 이름으로 노드를 참조하는 경우 이 작업은 거의 실패할 것입니다. 반면에 숫자 참조(위의 코드에서와 같이)는 보고서의 구조가 변경되는 경우(예: 보고서 내용이 릴리스 사이에 더 풍부해진 경우) 실패할 수 있습니다.
support@jmp.com으로 이메일을 보내서 이 스레드를 알려주는 것이 가장 좋습니다.
이 JSL을 중국 JMP11에서 테스트했습니다. 로그에서 다음 보고서를 가져옵니다. 여전히 기준선을 그릴 수 없습니다. 설명해 주시겠습니까?
지맨
정말 고마워 이안. 이것은 훌륭하게 작동합니다.
아래 코드는 다음을 생성합니다.

시작해야 합니다. '도움말 > 책 > 스크립팅 가이드' 및 '도움말 > 스크립팅 색인'을 사용하여 수행 중인 작업을 파악할 수 있습니다. 개요 노드의 제목을 사용하는 것은 현재 그다지 강력하지 않지만 개선되거나 다르게 수행될 수 있습니다.
NamesDefaultToHere(1);
// Yield table
dt1 =
New Table( "Yield",
Add Rows( 11 ),
New Column( "Model",
Character,
"Nominal",
Set Values(
{"IC1", "IC1", "IC1", "IC2", "IC2", "IC2", "IC2", "IC3", "IC3", "IC3",
"IC3"}
)
),
New Column( "WaferID",
Character( 16 ),
"Nominal",
Set Values( {"A", "B", "C", "E", "F", "G", "H", "R", "S", "T", "Z"} )
),
New Column( "Yield",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values( [50, 60, 70, 30, 40, 50, 60, 80, 90, 70, 65] )
)
);
// Reference table
dt2 =
New Table( "Reference",
Add Rows( 3 ),
New Column( "Model", Character, "Nominal", Set Values( {"IC1", "IC2", "IC3"} ) ),
New Column( "Value",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values( [50, 40, 70] )
)
);
// Start here . . .
// Get the values in dt2 into lists for later
modelVal = Column(dt2, "Model") << getValues;
refVal = Column(dt2, "Value") << getValues;
// Control Charts
cc = dt1 << Control Chart(
Sample Label( :WaferID ),
Chart Col( :Yield, Individual Measurement ),
By( :Model )
);
// Loop over the control chart reports
for(r=1, r<=NItems(cc), r++,
ccRep = Report(cc[r]);
// Extract the level of 'Model' from the title of the outline node
title = ccRep[OutlineBox(1)] << getTitle;
delimPos = Munger(title, 1, "=");
level = Substr(title, delimPos+1, Length(title)-delimPos);
// Get the reference value and plot it using a graphics script
ref = refVal[Loc(modelVal, level)];
Eval(
Substitute(
Expr(ccRep[FrameBox(1)] << addGraphicsScript(PenColor("Blue"); HLine(TBD))),
Expr(TBD),
ref[1]
);
);
);