Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenSie müssen eine Funktion (oder ein Skript) hinzufügen, um die Optionen im zweiten Kombinationsfeld einzuschränken. Eine Option unten (ich denke, es sollte mit JMP14 funktionieren)
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)
)
);
Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenDanke Jarmo! Du hast es einfach aussehen lassen. 
Es funktionierte.
Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenHallo Jarmo,
Ein weiteres Problem, das ich mit dem Dialogfeld hatte, ist die Annahme einer Liste als Eingabe.
Wenn ich den folgenden Code verwende.
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>
Es nimmt die Liste nicht als Eingabe. Mache ich etwas falsch?
Danke!
Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenSelbst wenn Sie mit JMP die Liste in das Textfeld einfügen können (nicht sicher warum, ich denke, es sollte einen Fehler auslösen), ist es immer noch eine Zeichenfolge (JMP führt höchstwahrscheinlich eine Konvertierung durch), sodass Sie nicht direkt mit dem Index darauf verweisen können.
Sie können es entweder mit Wörtern in eine Liste aufteilen (und möglicherweise ersetzen, um zusätzliche Zeichen wie Klammern zu entfernen) oder es in eine Liste parsen ().
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)));Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenHallo Jarmo,
Wenn ich versuche, die Lösung auf drei Spalten anzuwenden, funktioniert es. Ich kann jedoch keine eindeutige Auswahl basierend auf der ersten UND zweiten Spalte erstellen.
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)
)
);Der obige Code funktioniert. Wenn Sie sich jedoch die beigefügten Bilder ansehen, kann ich keine eindeutigen Listen für Col2 und Col3 erstellen.
Es gibt wahrscheinlich eine einfache Lösung, die mir fehlt.
Danke!
Betreff: GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenSie könnten eine neue Spalte erstellen, die eine Kombination aus :Column 1 und :Column 2 ist, und diese für die Schlüssel verwenden
GUI-Kombinationsfeld basierend auf zwei verwandten SpaltenHallo,
Wenn ich zwei Spalten in einer Datei habe, kann ich ein Kombinationsfeld erstellen, indem ich die beiden Spalten separat verwende (siehe angehängte JSL-Datei). Was ich jedoch wirklich möchte, ist, dass, sobald ich die erste Option (z. B. „a“) auswähle, meine zweiten Boxoptionen nur auf „a1“, „a2“ und „a3“ beschränkt werden. Siehe die beigefügte Excel-Datei.
Jede Hilfe wäre dankbar.
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)
)
);
JMP-Version – JMP Pro 14
Automatisierung und SkripterstellungQualitäts- und Verfahrenstechnik