이러한 위시리스트 요청은 무엇에서 비롯된 것일까요?
JMP의 빠른 작동을 위해 기존 JMP 플랫폼 위에 자체 툴을 개발해야 했습니다. 이 경우, 잠재적으로 오랜 시간이 걸릴 수 있는 계산(MSA)이 발생하고, 사용자가 여러 열을 오가며 계산을 반복해야 할 수도 있습니다.
어떤 개선을 원하시나요?
데이터 변경 사항이 없을 때 활용되는 열 전환기 캐시를 구현합니다. 예를 들어, 다음 스크립트에서 열을 변경한 후 이미 방문했던 열로 돌아오면 JMP가 값을 다시 계산하는데, 이 과정에서 시간이 소요됩니다. JMP가 이미 계산된 열에 대한 메모리를 확보하여 변경 사항이 없어 새로운 계산이 필요한 경우 사용할 수 있도록 하고 싶습니다. 또한, 열 전환기에서 모든 열을 "미리 계산"하는 옵션을 제공하십시오.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
dist = dt << Distribution(
Continuous Distribution(
Column(:NPN1),
Always use column properties(1),
Process Capability(0),
Fit Normal(Goodness of Fit(1))
),
Histograms Only,
Column Switcher(
:NPN1,
{:NPN1, :PNP1, :PNP2, :NPN2, :PNP3, :IVP1, :PNP4, :NPN3, :IVP2, :NPN4, :SIT1,
:INM1, :INM2, :VPM1, :VPM2, :VPM3, :PMS1, :SNM1, :SPM1, :NPN5, :EP2, :ZD6,
:PBA, :PLG, :CAP, :PBA3, :PLG2, :PNP5, :NPN6, :PNP6, :PNP7, :NPN7, :PNP8,
:IVP3, :IVP4, :IVP5, :IVP6, :PNP9, :NPN8, :NPN9, :IVP7, :NPN10, :N_1, :PBA1,
:WPR1, :B10, :PLY10, :VBE210, :VTN210, :VTP210, :SIT2, :SIT3, :INV2, :INV3,
:INV4, :INV5, :FST1, :FST2, :RES1, :RES2, :PNM1, :PPM1, :FNM1, :FPM1, :FST3,
:FST4, :RES3, :RES4, :A1, :B1, :A2N, :A2P, :A2P1, :IVP8, :IVP9, :DE_H1,
:NF_H1, :ESM1, :ESM2, :ESP1, :YFU1, :VPM4, :PBA2, :PBB1, :LYA1, :LYB1, :DEM1,
:DEP1, :NFM1, :PLY1, :VDP1, :VDP2, :SNW1, :RSP2, :PLY2, :RSP1, :VDP3, :PBL1,
:PLG1, :VDP4, :SPW1, :VIA1, :INM3, :VPM5, :VPM6, :INM4, :VPM7, :M1_M1,
:M2_M2, :P1_P1, :E2A1, :E2B1, :NPN11, :IVP10, :PNP10, :INM5, :VPM8, :VPM9,
:INM6, :VPM10, :N2A1, :N2B1, :NM_L1, :P2A1, :P2B1, :PM_L1, :P1, :M1}
)
);
매우 빠르게 만든 예시이지만, 얼마나 빠른지 보여줍니다. 참고: pre_calculate를 활성화하면 JMP에서 피팅 속도가 그다지 빠르지 않기 때문에 스크립트가 상당히 느려질 수 있습니다. 하지만 결국에는 모든 보고서를 매우 빠르게 검토할 수 있으므로 (분석을 실행하고, 물 한 잔 마시고, 돌아와서 결과를 빠르게 확인할 수 있으므로) 당연히 보람이 있습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
numcols = dt << Get Column Names("Numeric", "String");
pre_calculate = 0;
aa_memory = Associative Array(numcols, Repeat({Empty()}, N Items(numcols)));
nw = New Window("",
H List Box(
lb = List Box(numcols, << Set Max Selected(1)),
dist_collector = V List Box()
)
);
lb << Set Function(Function({this},
sel = this << get selected;
If(N Items(sel) == 0,
return(0);
,
sel = sel[1];
);
If(Is Empty(aa_memory[sel]),
dist_collector << Append(
aa_memory[sel] = V List Box(dt << Distribution(
Continuous Distribution(
Column(Eval(sel)),
Always use column properties(1),
Process Capability(0),
Fit Normal(Goodness of Fit(1))
),
Histograms Only
);
));
);
objs = Filter Each({obj}, aa_memory << get values,
!Is Empty(obj) & obj != aa_memory[sel];
);
objs << Visibility("Collapse");
aa_memory[sel] << Visibility("Visible");
wait(0);
));
If(pre_calculate,
nw << Show Window(0);
For(i = 1, i <= N Items(aa_memory), i++,
lb << Set Selected(i, 1, run script(1));
);
nw << Show Window(1);
,
lb << Set Selected(1, 1, run script(1));
);
wait(0);
이 아이디어가 왜 중요한가요?
JMP가 모든 것을 다시 계산할 때까지 기다릴 필요 없이 열 전환기를 사용하여 여러 열 간에 쉽게 전환할 수 있습니다.