¿Qué inspiró esta solicitud de lista de deseos?
Tengo que desarrollar mis propias herramientas sobre las plataformas JMP existentes para asegurar su agilidad. En este caso, los cálculos pueden tardar mucho tiempo (MSA) y los usuarios podrían tener que alternar entre diferentes columnas, lo que generará recálculos.
¿Cuál es la mejora que le gustaría ver?
Implementar la caché para el selector de columnas, la cual se utilizaría si no se han realizado cambios en los datos. Por ejemplo, en el siguiente script, si se cambian las columnas y se regresa a las columnas ya visitadas, JMP recalculará los valores, lo que tardará un tiempo. Me gustaría que JMP tuviera algún tipo de memoria de las columnas ya calculadas, la cual utilizaría si no se han realizado cambios que justifiquen un nuevo cálculo. Además, se debería ofrecer una opción para precalcular todas las columnas en el selector de columnas.
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}
)
);
Un ejemplo muy rápido, pero que demuestra lo rápido que es. Nota: Si habilita pre_calculate, el script será bastante lento, ya que el ajuste no es muy rápido en JMP. Sin embargo, al final, hay una recompensa, ya que permite revisar rápidamente todos los informes (dejar que se ejecute el análisis, ir a buscar agua, volver y ver los resultados rápidamente).
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);
¿Por qué es importante esta idea?
Facilita el intercambio entre diferentes columnas cuando se utiliza el conmutador de columnas sin tener que esperar a que JMP vuelva a calcular todo.