구성 열을 사용하여 제어 차트에 규칙을 선택적으로 적용안녕하세요,
JSL을 사용하여 적절한 추세 규칙 또는 "테스트"를 제어 차트에 적용하는 데 문제가 있습니다. 제 데이터는 작년에 특정 제품의 모든 측정 로트에 대한 다중 분석 결과로 구성되어 있습니다. 제가 작업하는 데이터는 스택 형식이며, 테이블에는 제어 및 사양 한계를 포함하는 열과 모든 8개 테스트에 대한 8개 열이 있습니다. 테스트 열에서 각 행에는 규칙이 적용되는지 여부를 나타내는 1 또는 0이 있습니다. 참조를 위해 비슷한 형식으로 아래에 샘플 테이블을 설정했습니다.
| 로트 ID | 분석 | 결과 | 엘씨엘 | 유씨엘씨 | 규칙1 | 규칙3 | 규칙5 |
| A | X | 12 | 10 | 18 | 1 | 0 | 0 |
| A | Y | 204 | 200 | 215 | 1 | 0 | 1 |
| A | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
| B | X | 13 | 10 | 18 | 1 | 0 | 0 |
| B | Y | 209 | 200 | 215 | 1 | 0 | 1 |
| B | Z | 0.7 | 0.5 | 1 | 1 | 1 | 1 |
| C | X | 15 | 10 | 18 | 1 | 0 | 0 |
| C | Y | 205 | 200 | 215 | 1 | 0 | 1 |
| C | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
이 예에서 3개의 고유한 로트에 대한 3개의 고유한 분석이 있습니다. 결과 열은 각 로트의 각 분석에 대해 고유하지만, 관리 한계와 추세 규칙은 일치하는 분석에 대해 일치하므로 분석 X의 경우 규칙 1만 적용해야 하지만 분석 Z의 경우 3개의 규칙이 모두 적용되어야 합니다. 아래 코드를 사용하여 관리 차트를 플로팅하고, 예를 들어 열 이름을 약간 수정했습니다.
dt << Control Chart(
Sample Label( :Lot ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col( :Result, Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( :Rule1[1] ), Test 3( :Rule3[1] ), Test 5( :Rule5[1] ) ) ),
SendToReport(
Dispatch(
{},
"Levey Jennings of Result",
OutlineBox,
{Set Title("Parameter: "||char(:Analysis))}
),나머지 코드는 참조선을 추가하고 프레임 크기를 조정하는 등의 Dispatch 명령입니다. 해당 코드 섹션에는 문제가 없으므로 간결하게 하기 위해 생략했습니다. 위에 표시된 대로 Levey Jennings 명령에 "Test 1", "Test 3" 및 "Test 5" 줄을 추가할 때 해당 구성 열의 첫 번째 행 값을 참조하려고 했습니다. 이렇게 하면 스크립트가 Analysis에 따라 차트를 그릴 때 첫 번째 행에는 현재 그려지는 분석의 추세 규칙 구성이 포함됩니다. 그러나 스크립트를 실행하면 해당 특정 매개변수에 적용해야 하는지 여부에 관계없이 모든 3가지 규칙이 적용됩니다. 누군가 JMP에서 해당 구성 열의 값을 구문 분석하고 Analysis에 따라 특정 규칙을 각 차트에 적용해야 하는지 여부를 결정하는 방법을 설명해 줄 수 있습니까?
이전에 분할 테이블에서 이 작업을 했지만, for 루프를 사용하여 문자열을 만들고 값을 문자열에 연결한 다음 Parse 및 Eval 명령을 사용하여 실행했습니다. 가능하다면 for 루프를 사용하지 않는 것이 좋습니다. 처음부터 데이터를 스택 형식으로 가져오는 이유가 바로 이 때문입니다.
자동화 및 스크립팅데이터 탐색 및 시각화Re: 구성 열을 사용하여 제어 차트에 규칙을 선택적으로 적용나는 당신의 JSL을 2개의 수정으로 실행했습니다
- Lot이라는 열을 지정했고 실제 이름은 Lot ID입니다.
- 보고서로 보내기 섹션을 제거했습니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
);
코드가 실행되어 다음과 같은 출력이 생성되었습니다.

지정된 테스트가 적절하게 처리되었는지 확인하기 위해 Control Chart 출력에서 스크립트를 저장했습니다.
Control Chart(
SendToByGroup( {:Analysis == "X"} ),
Sample Label( :Lot ID ),
KSigma( 3 ),
SendToByGroup(
{:Analysis == "X"},
Chart Col(
:Result,
Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( 1 ) )
)
),
SendToByGroup(
{:Analysis == "Y"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 5( 1 )
)
)
),
SendToByGroup(
{:Analysis == "Z"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
)
),
By( :Analysis )
);
생성된 스크립트에서 볼 수 있듯이 Control Chart는 각 분석에 대해 실행할 테스트에 대한 정보를 수신했습니다.
저는 JMP 18.1.0을 사용하여 Windows 11에서 코드를 실행했습니다.
나는 문제가 보이지 않는다
Re: 구성 열을 사용하여 제어 차트에 규칙을 선택적으로 적용좋아요. 제가 설명한 대로 정확히 복제하려고 했습니다. 제가 실행한 스크립트는 다음과 같습니다.
Names Default to Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
)
);
하지만 내 출력은 각 분석에 대해 세 가지 규칙을 모두 활성화하는 것으로 기본 설정됩니다. 다음은 X 분석에 대한 스크립트로, 구성 열에 따라 테스트 1만 적용해야 합니다.
Control Chart(
Sample Label( :Lot ID ),
KSigma( 3 ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
),
Where( :Analysis == "X" )
);
저는 Windows 11에서 JMP 17.0.0을 실행하고 있으므로, 아마도 이 문제는 저희 버전 간의 업데이트 중 하나에서 해결되었을 것입니다. 다른 문제 해결을 하기 전에 IT 부서를 통해 업데이트하는 것에 대해 알아보겠습니다. 코드를 테스트해 주셔서 감사합니다. 코드가 원칙적으로 작동할 것으로 보고 기쁩니다!
Re: 구성 열을 사용하여 제어 차트에 규칙을 선택적으로 적용저는 JMP 17에서 귀하의 결과를 재현했습니다. 아래는 각 분석 수준을 한 번에 하나씩 실행하여 원하는 결과를 얻는 한 가지 방법입니다.
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( dt, byGroup = By( :Analysis ) );
For Each( {level}, byGroup,
dt << select where( :Analysis == level );
dtTemp = dt << Subset( selected columns( 0 ), selected rows( 1 ) );
Eval(
Eval Expr(
dtTemp << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
//By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( Expr( dtTemp:Rule1[1] ) ),
Test 3( Expr( dtTemp:Rule3[1] ) ),
Test 5( Expr( dtTemp:Rule5[1] ) )
)
)
)
)
);
);Re: 구성 열을 사용하여 제어 차트에 규칙을 선택적으로 적용이것은 분할된 테이블로 작업할 때 열 번호로 루핑하고 결국 JSL로 구문 분석되고 평가되는 표현식을 만들 때 달성한 방식과 유사합니다. 저는 쌓인 테이블로 작업할 때 For 문을 사용하지 않고 By 및 Where 함수를 사용하여 분석별로 분리하기를 바랐을 뿐입니다. 궁극적으로 이 JMP17 코드는 여전히 분할된 테이블용으로 개발한 코드보다 훨씬 간단합니다. 의견을 주셔서 다시 한번 감사드립니다! JMP18로 업그레이드할 수 있을 때까지 현재 스크립트에 통합하려고 노력하겠습니다.