このウィッシュリストのリクエストのきっかけは何ですか?
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 がすべてを再計算するのを待たずに、異なる列を簡単に切り替えることができます。