여기서 목표는 일련의 컨트롤 차트(또는 다른 보고서)를 다른 곳에서 사용할 수 있는 그래픽 파일로 저장하는 것입니다.
예를 들어, 10개의 컨트롤 차트가 포함된 PowerPoint 슬라이드 데크가 있습니다. 매주 월요일 슬라이드 데크의 컨트롤 차트를 업데이트해야 합니다. JMP에서 차트를 만든 다음 매주 데크에 복사하여 붙여넣거나 대부분의 MS 제품에서 사용할 수 있는 삽입 및 연결 기능을 활용할 수 있습니다.

이렇게 하려면 컨트롤 차트를 만들고 figure1.png로 저장한 다음 "삽입 및 연결" 옵션(삽입 단추의 작은 아래쪽 화살표)을 사용하여 그림을 삽입할 PowerPoint를 엽니다. 10개의 슬라이드 각각에 대해 이 작업을 수행합니다. 다음 주에는 각 컨트롤 차트를 만들고 각각을 그래픽 파일(예: figure1.png, figure2.png...)에 저장합니다. 그런 다음 PowerPoint에서 슬라이드 데크를 열면 figure1.png 등의 새 버전이 데크로 들어갑니다.
지루하게 들리나요? 예, 끔찍할 것입니다. JMP에서 차트 10개를 모두 PowerPoint 파일로 저장하고 그래프를 복사하여 붙여넣는 것이 더 쉬울 것입니다. 하지만! 약간의 JSL을 사용하면 이 모든 것이 정말 쉬워집니다. 그 방법을 보여드리겠습니다.
시작하기 전에 관리 차트를 만들고 무슨 일이 일어나는지 이해하기 위한 간단한 스크립트를 살펴보겠습니다.
컨트롤 차트 ( 그룹 크기( 1 ), 차트 열 ( :메트릭 1, 개별 측정 ))
이것을 벗겨보자:
가장 바깥층은 컨트롤 차트() , 해당 레이어 내부에는 두 부분이 있습니다. 그룹 규모(1) , 그리고 차트 열() .
각 요소에는 인수가 있습니다. 예를 들어 그룹 크기에는 하나의 인수 "1"이 있습니다. Chart Col()에는 두 개의 인수가 있습니다. 첫 번째는 열 참조와 해당 열로 만들 컨트롤 차트의 유형입니다. 개념적으로 기능 계층이 있으며 스크립트를 작성하는 한 가지 방법은 내부에서 "양파"를 빌드하는 것입니다.
이 스크립트를 작성하는 데는 100가지 방법이 있을 수 있으며 일부는 여기서 수행하려는 작업보다 더 쉽고 덜 장황할 수 있습니다. 여기에서 사용하는 접근 방식은 JMP의 거의 모든 플랫폼에서 작동하는 경향이 있지만 스크립팅에 대해 약간 다른 사고 방식이 필요합니다.
1. 목록={}; 여기에서 컨트롤 차트를 만들고자 하는 열 이름 목록을 제공합니다. 더 복잡한 예에는 목록을 생성하는 데 사용되는 대화 상자가 있거나 테이블에서 연속 열을 선택하는 논리 필터가 있을 수 있지만 이는 다른 블로그 게시물을 위한 것입니다.
2. a=expr(); 여기서는 컨트롤 차트에 사용된 각 함수를 가져와서 정의하고 비워 둡니다.
a=expr(컨트롤 차트()); 나에게 논쟁을 할 장소를 제공합니다. b=expr(그룹 크기(1)); 에 삽입할 요소 중 하나입니다. 관리도( ) , 그리고 c=expr(차트 열(... 또한 "a"에 삽입될 것입니다. " 특급( ) " 기능을 이해하는 것이 중요합니다. 내부에 있는 것은 평가되지 않고 "읽히지" 않으며 무언가로 만들어지지 않습니다. 예를 들어 말하다 ( "안녕하세요" ); 스크립트에 있으면 JMP는 "hello"라고 말하지만 s=expr( 말하다 ( "안녕하세요" ) ); 가 스크립트에 있으면 "s"를 평가하거나 명시적으로 스크립트로 eval(s)을 작성할 때까지 아무 일도 일어나지 않습니다. (요점은 "s;"가 코드의 한 줄에 있으면 JMP가 이를 평가하고 "hello"라고 말합니다). 여기 내가 사용하고 있습니다 특급( ) 나중에 사용하고 싶은 부분을 붙잡기 위해.
삼. (c, alist[i],1)에 삽입; 여기서 "c"는 평가되지 않은 인수이며, chartcol(개별 측정).Insert into, 목록 변수 "alist"의 첫 번째 항목을 "c"의 내용에 삽입합니다. 그래서 이제 c는 chartcol(:메트릭 1, 개별 측정).
이것은 한 걸음 물러서서 "alist[i]"의 "i"가 어디에서 왔는지 설명하기에 좋은 곳입니다.
For (i=1, i<=항목(alist), i++ For Next 루프의 시작이거나 이 조건 집합의 경우 조건이 참이 아닐 때까지 이 작업을 계속합니다. 따라서 i=1이고 i가 "alist"의 개수보다 작거나 같으면 다음 작업을 수행합니다. 변수 "i"는 각 루프에서 하나씩 증가하며 이 카운터 변수를 루프의 다른 항목에 사용할 수 있습니다. 첫 번째 루프에서 i=1이므로 "alist, subscript, i"라고 말하여 "alist"의 첫 번째 항목을 가져오는 데 사용합니다. 나중에 스크립트에서 저장하는 파일의 이름에 i를 사용할 것입니다. 파일 이름의 일련 목록을 원합니다(figure1, figure2, figure3...). 이것을 얻기 위해 접두사를 I와 연결합니다. 문제가 있는 경우를 제외하고는 숫자를 연결할 수 없으므로 " 경로/그림"||char(i)||".png "숫자 i를 감싸야 합니다. 문자( ) , 그런 다음 문자로 다른 문자와 연결될 수 있습니다. (따옴표로 묶인 것.)
4. obj=평가(a); 스크립트의 이 시점에서 컨트롤 차트() 함수는 내가 필요로 하는 모든 인수와 그것을 평가할 시간을 압축할 것입니다. 변수인 "obj"는 방금 생성된 컨트롤 차트와 통신하기 위한 "핸들"로 사용될 수 있습니다.
5. obj<<사진 저장(... 이 마지막 단계는 obj의 내용을 png 그림 파일로 저장합니다. 파일 이름의 확장자는 .png이고 파일 이름 바로 뒤에 오는 다음 인수는 "png"입니다. 즉, .gif 확장자를 가진 파일을 .png 파일 형식으로 저장할 수 있습니다. 적극 추천합니다 ~ 아니다 확장자와 파일 유형이 일치하지 않습니다.
6. obj<<창 닫기; 이것은 바로 정리입니다. 자신이 만든 JMP 보고서를 보려면 주석 처리됩니다.
7. 마지막 비트는 ");"입니다. 이것은 시작 For(에 대한 닫는 괄호입니다. 실제로 코딩을 할 때 "//end of i loop"와 같이 루프가 끝날 때 자신에게 주석을 남기는 것이 좋습니다. 이것은 다른 루프 내에서 반복하는 경우에 특히 중요합니다. , 일이 반복되는 것을 방지하는 데 도움이 됩니다.
alist={:Metric 1, :Metric 2, :Metric 3};
for(i=1, i<=nitems(alist), i++,
a=expr(control chart());
b=expr(group size(1));
c=expr(chart col(individual measurement));
insert into(c,alist[i],1);
insert into(a,nameexpr(b));
insert into(a,nameexpr(c));
obj=eval(a);
obj<< Save Picture( "/Users/bywing/Byron Wingerd/Examples/example"||char(i)||".png", "png" );<BR /> obj<< Close Window;
);