안녕하세요,
수십만 줄의 데이터 테이블이 있습니다.실행 ID 열, 장치 이름 열(현재 관심 있는 항목 29개) 및 관련 값 열이 있습니다.따라서 각 실행마다 데이터를 기록하는 여러 장치가 있으며 실행 ID를 x축으로 사용하여 각 장치에 대한 실행 차트를 만들고 싶습니다.그러나 부분적으로는 개별적으로 해결할 수 있지만 함께 해결할 수는 없는 두 가지 문제가 있습니다.
먼저 JMP 13을 사용하고 있습니다.JMP 16에 액세스할 수 있지만 현재 설치되어 있지 않습니다.JMP의 다른 버전으로 변경하여 중단하고 싶지 않은 기존 스크립트가 잔뜩 있는데, 무엇을 하려고 합니까? ~해야 한다 쉽게 할 수 있습니다.
둘째, 내가 취하려는 일반적인 접근 방식은 다음과 같습니다.
- 고유한 장치 이름 목록을 반복하고 실행 차트를 생성합니다. 각 장치의 데이터에서 결정된 각 개별 실행 차트 제어 및 사양 제한을 입력합니다. (제어 및 사양 제한을 관리 차트에 충분히 쉽게 입력할 수 있습니다.)
- 모든 차트를 새 창에 집계
그래프 작성을 위해 내가 가지고 있는 스크립트는 다음과 같습니다.
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);이렇게 하면 각각 상단에 "Where Device == curDev"라고 적힌 상자가 있는 여러 그래프 창이 생성됩니다.
따라서 불필요하고 보기 흉한 상자를 사용하더라도 그래프를 그릴 수 있지만 29개의 그래프 창이 열립니다.
이제 모든 항목을 하나의 창에 집계하고 상단의 "Where Device ==" 상자를 제거해야 합니다.
포럼에 도움이 될 것이라고 생각되는 답변이 있습니다. Graph Builder 보고서 창에서 "Where"를 제거하는 방법 - JMP User Community .실제로 29개의 개별 그래프를 생성하면 상단의 상자가 제거됩니다.
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)그러나 링크된 포럼 게시물에 설명된 것과 동일한 작업을 수행하려고 하면 창에 차트 1개가 표시되고 스크립트 오류가 발생합니다. "Send는 'Send' 액세스 또는 평가에서 스크립트 가능한 개체{75240}를 예상합니다. tp[Text Box( 1 )] << delete/*###*/"
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>Build_Chart 함수에서 tp << delete를 사용하여 패널 상자에 차트를 추가하는 것이 왜 문제가 됩니까?
제가 시도한 또 다른 접근 방식은 다음과 같은 것입니다. 여기서 보고서 개체를 얻습니다.
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);이렇게 하면 "Where ==" 상자 없이 29개의 그래프가 있는 별도의 창이 생성됩니다. 또한 29개의 별도 그래프 창을 생성합니다.cco << 창 삭제는 작동하지 않습니다. cco는 창에 대한 참조가 아니기 때문입니다.나 ~할 수 있었다 Window() << Window 삭제를 수행하지만 창 이름이 무엇인지 모르고 명백한 추측이 작동하지 않으므로 JSL에서 창을 삭제할 수 없습니다.
따라서 제가 도움이 필요한 것은 다음과 같습니다.
- 차트 창 위에 "Where :Device == curDev" 상자 없이 모든 그래프가 포함된 창을 만듭니다.
- 모든 차트를 단일 창으로 집계
- 29개의 다른 창을 생성하지 않습니다.
귀하의 도움에 미리 감사드립니다.
컨트롤 차트에서 표시되지 않음 옵션을 사용한 다음 보고서를 독립 저널 창에 추가하여 솔루션으로 이동할 수 있다고 생각합니다.다음은 이를 수행하는 접근 방식을 보여주는 코드 수정입니다.샘플 데이터 테이블이 없어서 스크립트를 테스트할 수는 없었지만, 제 접근 방식이 효과가 있을 것이라는 것을 여러분도 보실 수 있을 것이라고 믿습니다.
Build_Chart = Function({var},
cco = dt << Control Chart(invisible,
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
NW = New Window("Results",<<JOURNAL></JOURNAL>