초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약을 사용자 정의하는 방법안녕하세요. 저는 아주 초보입니다. 스크립팅을 배우기 전에 제가 이 문제에 올바르게 접근하고 있는지 확인하고 싶습니다. 사용자가 선택한 열(일반적으로 30개의 데이터 포인트)에 대해 만들 수 있는 아래의 간단한 분포 보고서를 쉽게 만들 수 있는 방법을 원합니다. 아래 그림과 같고 빨간색 선이 있는 항목을 제거하고 싶습니다.

데이터 테이블의 예는 다음과 같습니다.

아래는 내가 다음을 사용했을 때 시스템이 생성한 스크립트입니다: 스크립트 저장/데이터 테이블:
분포(
연속분포(
열( :OD ),
수평 레이아웃(1),
히스토그램( 0 ),
수직( 0 ),
공정능력(
열 속성 사양을 사용하세요.
공정능력분석(불합격(0))
)
),
히스토그램만,
보고서 보내기(
Dispatch( {"OD", "공정능력", "OD능력", "히스토그램"}, "1",
스케일박스,
{최소( 2.1388234375 ), 최대( 2.1636765625 ), 증가( 0.005 ),
작은 진드기( 5 )}
)
)
);
스크립팅 없이는 이 작업을 수행할 수 없다고 가정합니다. 사실이 아니라면 알려주세요.
제가 계획하고 있는 것은 사용자가 사용할 열을 선택할 수 있도록 스크립팅하는 방법을 배우는 것입니다. 위의 스크립트는 열 "OD"만 사용합니다. 이렇게 하면 스크립트를 실행하여 위의 기본 보고서를 제공할 수 있기를 바랍니다.
그런 다음 빨간색으로 취소선으로 표시한 항목을 제거하기 위해 스크립트 변경 사항을 찾아보세요.
이 접근 방식이 순진한가요? 더 나은 접근 방식이 있을까요?
모든 의견을 감사드립니다.
승인하다
품질 및 공정 엔지니어링Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법기능 테이블의 경우 필터를 사용할 수 있으므로 매우 쉽습니다.
Contains({"Cpk", "Cp"}, Index)
하지만 이 방법은 프로세스 요약 아래의 테이블 상자에서는 작동하지 않습니다. 열 이름이 없기 때문입니다. 따라서 예를 들어 사전 설정을 쉽게 활용할 수 없습니다.
따라서 스크립팅을 활용하세요. 스크립팅을 사용하면 해당 헤더를 테이블 상자에 추가한 다음 필터링에 사용할 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
mycol = "NPN1";
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(
Use Column Property Specs,
Process Capability Analysis(Nonconformance(0))
)
)
);
// modify axis
Report(dist)[OutlineBox("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[OutlineBox("Within Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[OutlineBox("Overall Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[OutlineBox("Process Summary"), TableBox(1), StringColBox(1)] << Set Heading("Stat");
Report(dist)[OutlineBox("Process Summary"), TableBox(1), NumberColBox(1)] << Set Heading("Value");
Report(dist)[OutlineBox("Process Summary"), TableBox(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));

Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법시간을 내주셔서 감사합니다, Jarmo. 우리 테이블에 적용할 수 있는 좋은 기초가 생겼습니다. 도와주셔서 감사합니다.
저는 그것을 가지고 놀면서 대상 열에 대한 사용자 프롬프트를 만들 수 있는지 알아낼 수 있는지 알아볼 것입니다. 이름이 다양하기 때문에 그걸 기반으로 구축할 것입니다. 최소한 현재의 (제한된) 지식으로 특정 부분 시나리오에 대한 스크립트를 사용자 정의할 수 있습니다. 우리 사용자에게는 그것이 더 나을 수도 있습니다. 어쨌든 다시 한번 감사드립니다.
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법JSL을 시작한 후, 이와 같은 간단한 UI를 만드는 것은 꽤 간단합니다( Column Dialog()를 사용하면 더욱 그렇지만 개인적으로는 좋아하지 않습니다). 이 예제에는 몇 가지 고급 기술이 포함되어 있지만 원하는 작업을 대부분 수행할 수 있습니다. 추가하고 싶을 수 있는 몇 가지 정신 건강 검사가 있습니다(예: 사양 제한 확인). 그러나 이와 같은 것이 시작점으로 사용될 수 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
스크립팅 가이드는 JSL을 시작하기 위한 좋은 자료입니다.
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법Jarmo, 고맙습니다! 스크립팅 가이드를 시작했습니다. 아마도 인내심이 부족한 듯하지만, 계속해서 작업하고 있습니다.:)
변경 사항을 하나 더 보여달라고 부탁드릴 수 있나요? 제게 많은 도움이 될 것 같아요. 스크립트에 이동 평균 차트를 Sigma Capabilities 아래(기본적으로 맨 아래)에 추가하도록 추가할 수 있나요? 저는 Semiconductor 파일의 NPN1로 아래 예를 만들었습니다. 스크립트 콜아웃에서 뭔가 빠졌는데, 제가 이해하는 데 도움이 될 것 같아요.

당신이 눈을 굴릴 것이라고 상상할 수 있습니다 다음 질문은 제가 JMP를 잘 이해하지 못한다는 것을 근본적으로 보여줍니다. 이런 스크립트는 사용자가 열어서 실행하는 스크립트 파일이 되는 것이 더 합리적인가요? 아니면 이 스크립트를 데이터 테이블에 저장해서 거기서 실행하는 것이 더 합리적인가요? 그냥 선호도인가요? 아니면 어떤 이점이 있나요?
쿠도 외에 당신의 도움을 인정할 다른 방법이 있다면 알려주세요. 당신의 도움 덕분에 많은 골치 아픈 일을 피할 수 있었습니다.
다시 한번 감사드립니다.
승인하다
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법Workflow Builder를 사용하여 이와 유사한 것을 만들 수 있으므로, 수행하는 작업에 따라 이를 활용하는 것이 좋을 수 있습니다(JMP를 사용하는 것도 좋은 연습입니다).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
vlb = V List Box(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
),
ccb = dt << Control Chart Builder(
Show Two Shewhart Charts(0),
Include Missing Categories(0),
Show Limit Summaries(0),
Show Capability(0),
Variables(Y(Eval(mycol))),
Chart(Points(Statistic("Moving Range")), Limits(Sigma("Moving Range"))),
Show Control Panel(0)
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
nw = new window("",
vlb
);
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
이런 것을 어떻게 사용할지는 전적으로 여러분에게 달려 있습니다. 저는 아마도 이를 위한 워크플로를 갖는 것이 가장 합리적일 것입니다(워크플로에 JSL이 없으면 배포를 수정하는 것이 약간 어려울 수 있음) 또는 사용자가 필요에 따라 자신의 테이블에서 실행할 수 있는 애드인을 만드는 것입니다. 애드인 목적으로는 사용자가 두 개 이상의 열을 선택하거나 열 전환기를 활용하고 몇 가지 추가 검사를 구현하는 것이 좋습니다(테이블이 열려 있는지, 선택한 열에 사양 제한이 있는지 등).
편집: Control Chart Builder에서 하드코딩된 값 고정
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법Jarmo, 고맙습니다. 그러면 작업을 시작할 수 있는 좋은 기초가 됩니다. 저는 그 코드를 수정해 왔고 정말 도움이 됩니다. 새로운 창 코드를 보고 제가 놓친 것을 정말 많이 알게 되었습니다.
저는 또한 그 Workflow 빌더를 살펴볼 것입니다. 저는 아직 그것을 전혀 보지 못했습니다. 궁극적으로, 제가 지금 알고 있는 바에 따르면, 제가 거기에 도착하면 Addin이 우리 그룹에 가장 좋을 것 같습니다...
다시 한번, 여러분의 도움에 진심으로 감사드리며, 감사의 말씀을 얼마나 드려도 모자랄 정도입니다.
승인하다
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법새로운 주제를 만드는 것보다 여기에 질문하는 것이 더 의미가 있을 것 같았습니다.
저는 좋은 프로세스를 만들었고, 사용 중인 저희 그룹을 위한 추가 기능을 만들었습니다. 더 자세히 알아보려고, 저는 "Total Outside" 행과 Nonconformance 섹션(아래 캡처에서 빨간색 밑줄)에서 "Expected Overall PPM" 열만 추가하려고 합니다.

상자는 표시할 수 있지만 값은 표시되지 않습니다. 아래는 이에 대한 스크립트 섹션(50-52행)과 화면 캡처입니다.
Report(dist)[Outline Box("Nonconformance"), Table Box(1), String Col Box(1)] << Set Heading("Portion");
Report(dist)[Outline Box("Nonconformance"), Table Box(1), Number Col Box(1)] << Set Heading("Expected Overall PPM");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Expected Overall PPM));
화면 캡처에서 원하지 않는 "예상 범위 %" 및 "예상 전체 %" 열이 추가된 것을 확인하세요.

기본적인 것을 놓치고 있다는 걸 알아요... 아이템의 속성을 사용해 무엇이 다른지 비교하려고 했지만 값에 아무것도 보이지 않아요. 또한 Save Script 도구를 사용해 단서를 제공하는지 확인하려고 했지만 Dispatch 명령을 사용하는데 그것도 작동하지 않아요...
또한, "Noncomformance" 섹션을 "Process Summary" 바로 아래, "Overall Sigma Capability" 위에 배치할 수 있을까요? 제가 검색한 내용으로는 그럴 수 없을 것 같았지만, 제가 뭔가를 놓친 것 같습니다.

감사합니다,
승인하다
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법JMP를 사용하여 먼저 표시하려는 열을 수정하고 JMP가 생성하는 스크립트를 확인하여 JMP가 원하는 작업을 캡처할 수 있는지 확인할 수 있습니다(이 경우 가능합니다). 그런 다음 배포 스크립트에 맡기거나 스크립트 밖으로 옮길 수 있습니다.

그리고 스크립트에서는 다음과 같이 보일 수 있습니다.
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Observed %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Within %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall PPM")] << Visibility("Visible");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Portion == "Total Outside");
불일치 항목을 "복사"하려면 복제 상자를 사용할 수도 있습니다.
ncob = Report(dist)[Outline Box("Nonconformance")];
(Report(dist)["Process Capability","? Capability","Process Summary"] << parent) << Append(
ncob << clone box;
);
(ncob << parent) << Set(0);
</CODE><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1729017828517.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><img src="https://us.v-cdn.net/6038925/uploads/images/69147iBECE0693438ABAB9/jthi_1-1729017828517.png" role="button" title="jthi_1-1729017828517.png" alt="jthi_1-1729017828517.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P>하지만 JMP 플랫폼의 기능이 필요하지 않다면, 저는 다양한 부분에서 사용자 정의 보고서를 만드는 것을 고려할 것입니다. 이렇게 하면 보고서가 어떻게 보일지 더 쉽게 제어할 수 있고, 사용자는 제대로 작동하지 않을 수도 있는 기능을 실수로 사용하려고 하지 않을 것입니다.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-805889" slang="en-US" mode="CREATE">Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법</LINGO-SUB><LINGO-BODY id="lingo-body-805889" slang="en-US" mode="CREATE"><P>아! 당신의 메시지를 이해하고 그것을 어지럽히려고 노력할 것입니다. Dispatch 스크립트에서 가시성 플래그를 보았지만(당신이 가진 것과 똑같아 보임), 당신처럼 메시하는 방법을 이해하지 못했습니다.</P><P> </P><P>당신이 사용하게 된 동기는 무엇입니까?</P><PRE class="language-jsl"><CODE>Filter Where(Portion == "Total Outside");
그리고 다른 것들과 같은 목록 콜아웃이 아닙니다. 예를 들어:
Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat))
고맙습니다, 자르모!
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법나는 사용했다
Filter Where(Portion == "Total Outside");
하지만 원하는 경우 여전히 Contains를 사용할 수 있습니다(스크립트에서 문제가 발생한 것은 contains가 아니라 비교를 위해 Portion 대신 Expected Overall PPM이라는 잘못된 열을 사용한 것입니다)
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Portion));
저는 여러분이 테이블의 한 줄만 보여주고 싶어서 equal 비교를 사용했습니다. 포함은 여러 항목에 사용할 수 있으며, 단일 항목만 있는 경우(이 경우처럼) 불필요합니다.
제가 변경한 이유는 다음과 같습니다.
"하지만 작동하면 중요한가?"라고 생각할 수도 있습니다. 기본적으로 중요하지 않지만 (적어도 제가 그렇게 생각할 때) 코드에 대해 생각하기 시작하면 약간 중요해질 것입니다. 저에게는 이제 그 테이블에는 단일 항목 이상이 없을 것이라는 것이 분명합니다(또는 두 개 이상인 경우 필터링의 개념을 변경해야 하며 잠시 멈추게 될 것입니다).
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법Jarmo, 훌륭한 설명 감사합니다.
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법좋은 커뮤니티 게시물을 위한 기본은 좋은 질문 입니다.
@GM-FPP 감사합니다.
Re: 초보자를 위한 히스토그램, 시그마 기능 및 프로세스 요약 사용자 정의 접근 방법감사합니다 @hogi 귀하의 메시지에 감사드립니다.