저는 현재 다양한 변수에 대한 제어 및 처리 능력 차트를 생성하여 저널에 넣은 다음 저널을 PDF로 저장하는 스크립트를 가지고 있습니다. 문제는 내 스크립트 길이가 5000줄이고 냉동실에 있는 당밀보다 느리게 실행된다는 것입니다. 그래서 저는 제가 만든 각 유형의 차트에 대해 함수를 정의하고 그런 식으로 함께 연결하는 것이 더 합리적이라고 생각했습니다. 관리도용 함수를 성공적으로 생성했지만 공정 능력 차트를 작동시킬 수 없습니다.
다음은 공항 샘플 데이터(첨부됨)를 사용하여 제가 만들려는 것과 유사한 차트를 만드는 스크립트입니다.
Process Capability(
Process Variables( :Flight ), // select column for data
Spec Limits( :Flight( LSL( 0 ), /*Target( 30 ),*/ USL( 20 ) ) ), //Spec limits, dont need target
Individual Detail Reports( 1 ),
Capability Box Plots( 0 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ), // hide unnecessary info
{:Flight << Process Capability Analysis(
Overall Sigma Capability( 1 ),
Within Sigma Capability( 1 ),
Histogram( 1, Show Target( 1 ), Show Within Sigma Density( 1 ), Show Overall Sigma Density( 1 ) )
)},
);열 이름을 입력으로 사용하여 함수를 정의하고 싶습니다. 지금까지 내가 가진 것은 다음과 같습니다.
capability_chart = function({variable, low, up},
Process Capability(
Process Variables( eval(variable) ), // select column for data
Spec Limits( eval(variable)(LSL( low ), /*Target( 30 ),*/ USL( up )) ),
Individual Detail Reports( 1 ),
Capability Box Plots( 0 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ), // hide unnecessary info
{column(dt, element) << Process Capability Analysis(
Overall Sigma Capability( 1 ),
Within Sigma Capability( 1 ),
Histogram( 1, Show Target( 1 ), Show Within Sigma Density( 1 ), Show Overall Sigma Density( 1 ) )
)}
)
);
capability_chart("Flight", 0, 10)이것을 실행하면 사양 제한을 묻는 창이 나타납니다. 내 스크립트가 자동으로 사양 제한을 채우도록 하고 싶습니다. 또한 사양 제한 줄에서 eval() 대신에 column() 및 ascolumn()을 사용해 보았지만 동일한 작업을 수행했습니다. 이상적으로는 사양 테이블을 만들거나 사양 제한을 열 속성으로 추가할 필요가 없지만 다른 방법이 없으면 그렇게 할 수 있습니다. 또한 변경하기 혼란스러울 수 있는 보고서의 기존 형식이 있기 때문에 모든 열을 반복하면서 많은 프로세스 능력 차트를 만들고 싶지 않습니다. 도움을 주시면 감사하겠습니다.
한 번에 하나의 열에 대한 처리 기능만 필요한 경우 이와 같은 경우에는 Distribution Platform을 사용합니다.
Names Default To Here(1);
capability_chart = function({dt, colname, lowlimit, highlimit}, {Default Local},
dist = dt << Distribution(
Continuous Distribution(
Column(:Flight),
Quantiles(0),
Summary Statistics(0),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(LSL(lowlimit), Target(.), USL(highlimit))
)
);
return(dist);
);
dt = Open("$SAMPLE_DATA/Quality Control/Airport.jmp");
pc = capability_chart(dt, "Flight", 0, 10);
개요 상자로 인해 약간 다른 보고서가 생성되지만 필요한 경우 이를 "숨길" 수 있습니다(또는 관심 있는 개요 상자를 보고서로 가져가기).

다음은 JSL 표현식을 작동시키는 요령 목록입니다.
JMP의 표현식 처리: 팁과 트랩도어
힌트:
- 대부분의 플랫폼은 열 이름(=reference, :Flight ) 외에 열 이름(= string, "Flight" )을 허용합니다.:)
따라서 우리에게 필요한 유일한 트릭은 변수를 열 이름(문자열)으로 바꾸는 것입니다.
문제: 대부분의 경우 Jmp는 함수를 호출하기 전에 인수를 평가하지 않습니다. 따라서 함수 인수 주위에 Eval()을 넣으면 이를 평가하는 데 도움이 되지 않습니다.
-> 모든 것을 Eval(Eval Expr(()) 로 감싸고 Eval() 을 Expr() 로 바꿉니다.
... Jmp에게 먼저 평가하라고 지시합니다.
capability_chart = function({variable, low, up},
Eval Expr(Process Capability(
Process Variables( Expr(variable), // select column for data
Spec Limits( Expr(variable)(LSL( low ), /*Target( 30 ),*/ USL( up )) ),
Individual Detail Reports( 1 ),
Capability Box Plots( 0 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ) // hide unnecessary info
))
));
capability_chart("Flight", 0, 10)
그러나 Spec Limits("Flight"(LSL( low ), Target( . ), USL( up )) )은 작동하지 않으며 다음으로 변환됩니다.
Spec Limits( :Flight << {LSL( low ), Target( .), USL( up )} )
이제 Name Expr(As 열(열 이름))을 사용하여 트릭을 시도해 보겠습니다.
Spec Limits(Expr(Name Expr(As column(variable)))(LSL( low ), Target( .), USL( up )) ),
...그리고 다시 우리는 다음을 얻습니다:
Spec Limits( :Flight << {LSL( low ), Target( .), USL( up )} )우와! ... 그리고 아!
따라서 항상 작동하는 계획 B를 사용하겠습니다. Eval(Substitute())를 사용하십시오.
원래 아이디어: 대체 표현식으로 Name Expr(As 열(column_name)) 과 결합
... 하지만 거의 놀랍게도 기본 문자열(!)에서도 작동합니다.
capability_chart = function({variable, low, up},
Eval(Substitute(Expr(Process Capability(
Process Variables( _var_ ), // select column for data
Spec Limits( _var_(LSL( low ), /*Target( 30 ),*/ USL( up )) ),
Individual Detail Reports( 1 ),
Capability Box Plots( 0 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ) // hide unnecessary info
)),Expr(_var_), variable
)));
capability_chart("Flight", 0, 10)