"로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?다음 예제 스크립트는 샘플 반도체 성능 데이터 테이블을 사용하여 "로트 ID의 웨이퍼 ID"당 "프로세스 매개변수" 수율을 가져옵니다.
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp"); // My actual data is similar
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID );
);
cdt_ps = Report(ps)[Outline Box( "Process Screening" )][Table Box( 1 )] << Make Combined Data Table;
Wait(1 );
ps<< SendToReport( Dispatch( {}, "Process Screening", OutlineBox, {Close( 1 )} ) );
Wait (1);
ps << close window;
cdt_ps << New Column( "PassingDie", Numeric, "Continuous", Format( "Best", 12 ), Formula(:Count - :Out of Spec Count));
cdt_ps << New Column( "ParaYield [%]", Numeric, "Continuous", Format( "Best", 12 ), Formula(100*(:PassingDie / :Count)));
cdt_ps:Column << Set Name( "Process Parameter" );이제 프로세스 매개변수 "PP", 프로세스 매개변수 그룹 "PPG" 및 로트 ID "wfrIDinLotID"의 웨이퍼 ID를 호출해 보겠습니다.
다음으로 PPG가 다음과 같이 정의된 wfrIDinLotID당 PPG 수율을 추출하려고 합니다.
- 한 그룹의 모든 PNP
- 다른 그룹의 모든 NPN
- 모든 INM은 다른 그룹에 속해 있습니다.
즉, 아래 줄에 의해 생성되었지만 끝에 숫자가 없는 모든 PP는 PPG 이름을 형성합니다.
cdt_ps << Summary(Group( :Process Parameter ), Freq( "None" ), Weight( "None" ));
JSL의 새 열에서 PPG 이름을 가져오는 방법을 아직 모르겠습니다. 그래서 여기에 도움이 필요합니다.
일부 PPG에는 회원이 하나만 있을 수도 있습니다.
내 생각에 특정 PPG의 실패 횟수는 각 구성원의 실패 횟수 합계이며 나중에 위 스크립트에서 사용할 수 있습니다.
따라서 특정 wfrIDinLotID의 경우 지정된 PPG에 대한 "사양 범위를 벗어난 수"는 단일 숫자 값을 가질 것으로 예상됩니다. 이것은 새 열로 이동합니다. OOSC_PPG라고 부르겠습니다.
주어진 wfrIDinLotID에 대한 PPG 수율은 100*(OOSC_PPG = 0인 사이트 수)/테스트된 총 사이트 수입니다.
예제 데이터 표에서 wfrIDinLotID당 테스트된 총 사이트는 5개입니다.
마지막으로 wfrIDinLotID, PPG, PPG Yield라는 3개 열이 있는 보고서를 생성하고 싶습니다.
JSL을 진행하는 방법에 대한 지침을 좀 알려주실 수 있나요?
자동화 및 스크립팅윈도우Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?무엇을 시도해 보셨나요?
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?
멋진 트릭: 프로세스 스크리닝 플랫폼을 "남용"하여 웨이퍼당 사양 수를 벗어나세요.
매우 도움이 됩니다 
@Neo는 다음과 같이 썼습니다.
특정 PPG의 실패 횟수는 각 구성원의 실패 횟수의 합이라고 생각합니다.
나는 두려워한다: 아니
- 적어도: 일반적으로는 그렇지 않습니다.
다음은 NPN5 및 NPN6의 예입니다. 실패 횟수를 합산하면 파란색+주황색 점을 두 번 계산하게 됩니다.
(그룹화된 통과/실패 정보를 통해) 그룹화된 수익률을 생성하려면 원시 데이터에서 시작해야 합니다.

Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@jthi . 먼저 프로세스 매개변수 이름의 숫자와 문자를 분리하여 그룹으로 정렬해야 합니다. JSL에서 숫자와 텍스트를 분리하는 방법을 모릅니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@호기 . 흠..
>>>그룹화된 수익률을 생성하려면(그룹화된 통과/실패 정보를 통해) 원시 데이터에서 시작해야 합니다.
너무 무서웠어....
하지만 다시 생각해 보면 이전에 생각했던 것과 반대로 특정 PPG의 구성원 중 하나라도 사양을 벗어나면 테스트된 사이트는 특정 PPG에 대해 실패합니다.
제 생각에는 원시 데이터로 돌아가지 않고도 이 문제를 처리할 수 있을 것 같습니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?
@Neo는 다음과 같이 썼습니다. 테스트된 사이트는 특정 PPG에 대해 실패합니다.
그러나 현재 접근 방식을 사용하면 프로세스 스크리닝 플랫폼에 집계되어 사이트 정보가 손실됩니다.
웨이퍼 중 하나에 대해 NPN5가 사이트 1, 2, 3에서 실패하고 NPN6이 2, 3, 4에서 실패했다고 가정해 보겠습니다.
그런 다음 프로세스 스크리닝 플랫폼에서 다음 웨이퍼를 얻을 수 있습니다.
- 사양 개수 NPN5 초과 : 3
- 사양 개수 NPN6 초과 : 3
이 웨이퍼(NPN5 또는 NPN6)에 대해 실패한 사이트 수를 알아내는 유일한 방법은 다음과 같습니다.
원래 테이블로 이동하여 개수: 1,2,3,4
-> #실패 = 4
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@hogi 님의 의견에 동의합니다. 사이트에 계속 액세스할 수 있는 수준에서 계산을 수행해야 합니다. 프로세스 선별을 사용하면 중복을 구별할 수 없습니다. 웨이퍼에 5개의 사이트가 있고 10개의 테스트가 있다고 가정합니다. 웨이퍼가 모든 테스트 중 사이트 1에서만 오류가 있는 경우 이를 실패한 사이트 1개로 계산하시겠습니까, 아니면 테스트 실패 10개로 계산하시겠습니까( hogi의 게시물에 다른 예가 있음). 나는 이것을 실패한 사이트 10개로 계산하고 싶지 않다고 생각합니까?
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@jthi @hogi 감사합니다. 다음을 사용하여 OOS 값에 색상을 지정할 수 있습니다.
Names Default To Here (1);
clear log ();
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
col_names = dt << Get Column Group("Processes");
ps = dt << Process Screening (Process Variables( Eval( col_names )),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type ("Indiv and MR"),
Grouping (:Wafer ID in lot ID ),
Color Out of Spec Values
); 그런 다음 다음을 수행해야 합니다.
1. PPG를 위한 칼럼을 구성하세요
2. 멤버 중 하나라도 색상이 지정된 셀이 있는 경우 특정 PPG에 실패를 할당합니다.
여기에는 원시 데이터만 필요합니다.
위의 두 단계 중 하나를 수행하는 방법을 아직 모르므로 여기에 지침을 요청합니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@jthi . 특정 웨이퍼에 대해 특정 PPG의 구성원 중 하나가 OOS인 경우 해당 PPG에 대한 테스트는 실패합니다. 사이트는 특정 PPG 테스트에 실패할 수 있지만 다른 모든 PPG에 대한 테스트는 통과할 수 있습니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?셀에 색상을 지정한 다음 색상으로 모든 행을 수집합니다. 정말 창의적인 해결 방법입니다!
JMP의 향후 버전에서는 훨씬 더 쉬워질 것입니다. 만약 이 바람이 충분한 칭찬을 받는다면...
:folded_hands:은 사양(값)에 있습니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법?JMP19++를 기다리는 동안 Kudo로 << 셀 색상 가져오기를 지원한 후,
보조 하위 집합을 생성하고 값을 통과/실패 0/1 정보로 덮어쓰고 PPG로 합산할 수 있습니다.
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group( "Processes" );
ps = dt << Process Screening(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
dt sub = dt << Subset( All rows, Selected columns only( 0 ) );
For Each( {col}, col_names,
specs = col << Get Property( "Spec limits" );
If( Not( Is Empty( specs ) ),
lsl = specs["LSL"];
usl = specs["USL"];
Eval( Eval Expr( col << set each value( Not( lsl < Expr( Name Expr( col ) ) < usl ) ) ) );
);
);
prefixes = {"NPN","PNP","INM"};
PPGs = transform each ({prefix},prefixes,prefix || " fail");
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);
dt sub << Group Columns( "PPGs", PPGs );
ps = dt sub << Process Screening(
Process Variables( Eval( PPGs ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Control Chart Type( "Indiv and MR" ),
Grouping( :Wafer ID in lot ID ),
Color Out of Spec Values
);
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@hogi 내 JMP 16.2에서 스크립트 테스트하기
두 번째 줄에 오타가 있는 것 같습니다. 그것은해야한다
col_names = dt << Get Column Group( "Processes" );
이 부분에서 오류가 발생하고 있습니다.
dt sub << Group Columns( "PPGs", failcols );
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?죄송합니다 -> 수정했습니다.
제출된 코드가 작동하는지 다시 확인하기 전에 기호를 지워야 했습니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?그룹 생성은 Regex()를 사용하여 수행할 수 있으며 색상이 지정된 셀을 가져오는 문제는 커뮤니티에서 여러 번 해결되었습니다. 여기에 이전 게시물이 있습니다 . 열에서 색상이 지정된 셀의 행 번호를 가져오고 태그를 할당하는 방법(예: "1") ") 새로 생성된 열에 있습니까? . 그룹을 어떻게 만들어야 하는지 잘 모르기 때문에 이 패턴이 정확하지 않을 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
rgx_pattern = "^(.+?)\d*$";
For Each({colname}, cont_cols,
groupname = Regex(colname, rgx_pattern, "\1");
Write("\!N'", colname, "' belongs to '", groupname, "' group");
);
패턴을 이해하려면 https://regex101.com/ 또는 일부 대규모 언어 모델을 사용하는 것이 좋습니다(정규식 패턴을 설명하는 데 꽤 능숙합니다).
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?또한 이와 같은 스택 테이블을 활용하는 것이 더 쉬울 수 있습니다.

다른 것이 없다면 무슨 일이 일어나고 있는지 시각적으로 확인하는 것이 더 쉽습니다(이 계산은 확인하지 않았습니다).

Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@hogi 귀하의 스크립트를 테스트했는데 예상대로 작동합니다. 그런데 왜 여기서 sum()(실패 횟수의 합?)이 필요한지 이해가 되지 않습니다.
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);좀 밝혀 주시겠습니까?
감사해요
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?ColGroup에는 함께 합산되는 열 이름 목록이 포함되어 있습니다. "NPN Fail"이라는 열의 경우 Sum() 함수가 다음으로 확장됩니다.
sum( :NPN1, :NPN2, :NPN3, :NPN4, :NPN5, :NPN6, :NPN7, :NPN8, :NPN9, :NPN10, :NPN11 )
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@hogi @txnelson 감사합니다. 스크립트의 이 부분에서는 특정 PPG의 각 구성원에 대한 사이트당 실패 횟수를 추가합니다. 내가 이것을 이해하는지 잘 모르겠습니다.
for each ({myName,i},prefixes,
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);
Eval (Eval Expr(dtsub << new column (PPGs[i], << Set Property( "Spec Limits", {LSL( 0 ), USL(0)} ), set each value (sum (Expr(Name Expr(colGroup)))))))
);특정 PPG의 한 구성원에 대해 사이트가 실패하면 이 사이트는 지정된 PPG에 실패하며 이 PPG 아래의 더 많은 구성원이 이 사이트에서 실패하더라도 많은 PPG 수율/웨이퍼에 대해 문제가 되지 않습니다(또는 그것이 중요합니까?). ?
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?안녕하세요 @Neo
예, 정확히 말하면 PP 그룹당 생산량을 지정하는 데 적용되는 논리입니다.
실패를 합산하고 USL = 0을 사용합니다.
특정 사양에 대해 사이트가 실패하면 실패입니다.
모든 후보의 합계가 0이면 그 중 어느 것도 실패하지 않으므로 특정 사이트의 전체 그룹에 대해 통과합니다 .
다른 논리를 선호하시나요?
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@호기 . 교활한!! 이제 이해가된다. 나는 당신의 이전 진술 에 더 이상 동의할 수 없습니다. 그런데 원래는 여기에서 얻었습니다.
나는 여전히 "착취"라는 단어를 선호합니다 ...

Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@hogi 이제 실제 데이터 테이블을 사용하여 스크립트를 테스트하고 있습니다.
내 경우 매개변수 이름은 ABCD_1_X_Y_1_Z 형식이고 PPG는 ABCD...GH의 다양한 조합으로 정의됩니다(A는 항상 문자이고 나머지는 문자 또는 숫자일 수 있음).
X와 Y는 숫자이고 Z는 숫자, 문자 또는 조합일 수 있습니다.
이름이 왜 그런 형식인지 묻지 마십시오. 제가 한 것이 아닙니다.
PPG는 다음과 같은 방식으로 형성됩니다.
- U33P_1_0_0.... PPG "U33P"에 포함됩니다.
- CASMAPUL23Out_1_0_1_...PPG "CASMAPUL23Out"에 포함됩니다.
따라서 PPG 이름을 얻으려면 매개변수 이름의 첫 번째 밑줄 앞에 있는 문자 조합을 가져와야 합니다. 내 경우에 작동하도록 다음을 수정하는 방법.
colGroup = Filter Each({col}, col_names, Substr(col << getname(),1,3) == myName);Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?Word() 및 Words() 함수를 확인하세요. 일반적으로 이와 같은 작업에 매우 유용합니다.
Re: "로트 ID의 웨이퍼 ID"별로 프로세스 매개변수 그룹 수율을 얻는 방법은 무엇입니까?@jthi 가 말했듯이,
colGroup = Filter Each({col}, col_names, Word(1, col << getname(),"_") == myName);그 일을 할 것입니다 