Ri: Casella combinata GUI basata su due colonne correlateÈ necessario aggiungere una funzione (o uno script) per limitare le opzioni nella seconda casella combinata. Un'opzione di seguito (penso che dovrebbe funzionare con JMP14)
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("$DOWNLOADS/JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(aa_options[uniqvals[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
nw << close window;
show(v1, v2);
),
Button Box("Cancel", nw << close window)
)
);
Ri: Casella combinata GUI basata su due colonne correlateGrazie Jarmo! L'hai fatto sembrare facile. 
Ha funzionato.
Ri: Casella combinata GUI basata su due colonne correlateCiao Jarmo,
Un altro problema che ho riscontrato con la finestra di dialogo è prendere un elenco come input.
Se utilizzo il seguente codice.
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(
uniqvals,
<<SET function=""></SET>
Non prende l'elenco come input. Sto facendo qualcosa di sbagliato?
Grazie!
Ri: Casella combinata GUI basata su due colonne correlateAnche se JMP ti consente di inserire l'elenco nella casella di testo (non sono sicuro del motivo, penso che dovrebbe generare un errore), è comunque una stringa (molto probabilmente JMP esegue la conversione su di essa), quindi non puoi fare riferimento direttamente con l'indice.
Puoi dividerlo in un elenco usando Words (e forse Substitute per rimuovere caratteri extra come parentesi) o Parse () in un elenco
Names Default To Here(1);
nw = new window("",
tb = Text Edit Box({"list1", "list2", "list3"}),
);
tb_txt = tb << get text;
show(tb_txt);
show(type(tb_txt));
show(Parse(tb << get text));
show(type(Parse(tb << get text)));Ri: Casella combinata GUI basata su due colonne correlateCiao Jarmo,
Se provo ad applicare la soluzione a tre colonne, funziona. Tuttavia, non sono in grado di creare una selezione univoca basata sulla prima E sulla seconda colonna.
Names Default To Here(1);
v1 = "";
v2 = "";
v3 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals_1 = by(:Column 1));
Summarize(dt, uniqvals_2 = by(:Column 2));
Summarize(dt, uniqvals_3 = by(:Column 2,:Column 3));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals_1[i]] = col2_vals;
);
ab_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_2), i++,
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[i]);
col3_vals = dt[col2_idx, "Column 3"];
ab_options[uniqvals_2[i]] = col3_vals;
);
/*
ac_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
For(j=1, j<=N Items(uniqvals_2),j++
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[j]);
col3_vals = dt[col2_idx, "Column 3"];
ac_options[uniqvals_2[j]] = col3_vals;
);
);
*/
print(ac_options);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals_1, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(uniqvals_2, << set function(function({this},
cb3_vals = ab_options[(this << get selected)];
cb3 << Set Items(cb3_vals);
)), << Set(1)
),
Text Box("Col3"),
cb3 = Combo Box(ab_options[uniqvals_2[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
v3 = cb3 << get selected;
nw << close window;
show(v1, v2, v3);
),
Button Box("Cancel", nw << close window)
)
);Il codice sopra funziona. Tuttavia, se guardi le immagini allegate, non sono in grado di creare elenchi univoci per Col2 e Col3.
Probabilmente c'è una soluzione semplice che mi manca.
Grazie!
Ri: Casella combinata GUI basata su due colonne correlatePotresti creare una nuova colonna che è una combinazione di :Column 1 e :Column 2 e usarla per le chiavi
Casella combinata GUI basata su due colonne correlateCiao,
Se ho due colonne in un file, posso creare una casella combinata utilizzando le due colonne separatamente (vedi file JSL allegato). Tuttavia, quello che voglio veramente è che una volta selezionata la prima opzione (diciamo "a"), dovrebbe limitare le mie opzioni della seconda casella solo a "a1", "a2" e "a3". Vedere il file Excel allegato.
Qualsiasi aiuto sarebbe apprezzato.
v1 = "m";
v2 = "n";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
subDt1 = dt << Subset(Columns(:Column 1), invisible);
Summarize(col1_unique_vals = by(Column 1));
subDt2 = dt << Subset(Columns(:Column 2), invisible);
Summarize(col2_unique_vals = by(Column 2));
win = New Window("Set the Value",
H List Box(Text Box("Col1"), combo_box1 = Combo Box(col1_unique_vals)),
H List Box(Text Box("Col2"), combo_box2 = Combo Box(col2_unique_vals)),
H List Box(
Button Box("OK",
v1 = combo_box1 << get selected;
v2 = combo_box2 << get selected;
win << close window;
),
//a cancel button that closes the window and doesn't store store the results
Button Box("Cancel", win << close window)
)
);
Versione JMP - JMP Pro 14
Automazione e scriptingQualità e ingegneria di processo