是什么启发了这个愿望清单请求?
为了确保 JMP 能够快速运行,我必须在现有的 JMP 平台上编写自己的工具。在这种情况下,计算可能需要很长时间(MSA),用户可能需要在不同的列之间来回切换,从而触发重新计算。
您希望看到什么改进?
为列切换器实现缓存,如果数据没有更改,缓存就会被使用。例如,在下面的脚本中,如果您更改了列并返回到已经访问过的列,JMP 将重新计算这些值,这将需要一些时间。我希望 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 重新计算所有内容。