Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Ich verwende JMP 17.1 und habe das unten gezeigte Skript, das dank funktioniert @jthi helfen.Wenn ich das Skript ausführe, wird in einem Fenster ein Tabellenfeld „Big Class.jmp“ angezeigt. Ich kann eine Zeile auswählen und es werden die Werte für „Höhe“ und „Gewicht“ aus der ausgewählten Zeile zurückgegeben.In meiner realen Anwendung habe ich eine viel größere Tabelle, die ich filtern möchte, indem ich mit der rechten Maustaste in das Fenster klicke und „Filtern nach …“ auswähle.Wenn ich die gefilterte Tabelle im Tabellenfeld erhalte, gibt die ausgewählte Zeile manchmal die Daten zurück und manchmal gibt sie einen Fehler zurück, der besagt: „Indexproblem beim Zugriff oder bei der Auswertung von 'hvals[/*###*/sel], hvals[ /*###*/sel]".In meinem Beispiel unten klicke ich mit der rechten Maustaste auf das Feld „Big Class Table“ und filtere nach Geschlecht == F.
Irgendwelche Ideen, wie ich Daten für alle Zeilen des Teilmengentabellenfelds abrufen kann?
names default to here(1);
//run this now
dt = open("$sample_data\big class.jmp", invisible);
rpt = dt << select where(row() <= 10) << get as report;
tb = rpt[Table Box(1)];
tb << Set Selectable Rows();
tb << set row change function( Function( {this}, sel = this << get selected rows ) );
sel = tb << get row change function;
nw = new window("test",
v list box(
outline box("Big Class", rpt),
text box("Click 'OK' to choose height and weight"),
Button box("OK",
hvals = tb[NumberColBox("height")] << get;
wvals = tb[NumberColBox("weight")] << get;
ht = hvals[sel][1];
wt = wvals[sel][1];
print(sel, ht,wt);
)
)
);Unten finden Sie Bilder der Originaltabelle (erste 10 Zeilen der Big Class), der Tabelle der Big Class nach der Filterung nach Geschlecht und der Auswahl der Zeile, in der der Fehler zuerst auftritt, sowie der Fehlermeldung.Bitte beachten Sie, dass das Skript für die gefilterte Tabelle in den ersten fünf Zeilen funktioniert, nicht jedoch in den Zeilen 6 oder 7.
Automatisierung und SkripterstellungBetreff: Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Scheint ein Fehler zu sein, bei dem Sie die Zeilen nicht abrufen können, die NACH gefilterten Zeilen sind
Names Default To Here(1);
//run this now
dt = Open("$sample_data\big class.jmp", invisible);
rpt = dt << select where(Row() <= 10) << get as report;
Close(dt, no save);
tb = rpt[Table Box(1)];
tb << Set Selectable Rows(1);
nw = New Window("test",
V List Box(
Outline Box("Big Class", rpt),
Text Box("Click 'OK' to choose height and weight"),
Button Box("OK",
hvals = tb[Number Col Box("height")] << get;
wvals = tb[Number Col Box("weight")] << get;
sel = tb << get selected rows;
ht = hvals[sel][1];
wt = wvals[sel][1];
Print(sel, ht, wt);
)
)
);
wait(1);
tb << Filter Where(:sex == "F");
tb << Set Selected Rows([2]);
sel = tb << get selected rows;
show(sel);
wait(1);
tb << Set Selected Rows([6]);
sel = tb << get selected rows;
show(sel);
wait(1);
tb << Reset Filter;
sel = tb << get selected rows;
show(sel);
Betreff: Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Ich empfehle Ihnen, sich diesbezüglich an den JMP-Support zu wenden (auf Wunsch kann ich das auch tun). Es gibt höchstwahrscheinlich eine ganze Reihe verschiedener Problemumgehungen, aber hier ist eine, die zu funktionieren scheint (mithilfe von clone box()).
Names Default To Here(1);
//run this now
dt = Open("$sample_data\big class.jmp", invisible);
rpt = dt << select where(Row() <= 10) << get as report;
Close(dt, no save);
tb = rpt[Table Box(1)];
tb << Set Selectable Rows(1);
nw = New Window("test",
V List Box(
Outline Box("Big Class", rpt),
Text Box("Click 'OK' to choose height and weight"),
Button Box("OK",
hvals = tb[Number Col Box("height")] << get;
wvals = tb[Number Col Box("weight")] << get;
sel = (tb << clone box()) << get selected rows;
ht = hvals[sel][1];
wt = wvals[sel][1];
Print(sel, ht, wt);
)
)
);
wait(1);
tb << Filter Where(:sex == "F");
Ich bin mir nicht sicher, ob diese geklonte Box irgendwo gespeichert wird. Daher ist es möglicherweise besser, sie in einer Variablen zu speichern, die ausgewählten Zeilen abzurufen und diese Variable dann auf „fehlend“ zu setzen.
Betreff: Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Ich werde dies dem JMP-Support melden.@jthi , vielen Dank für all Ihre Hilfe.
Betreff: Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Wenn Sie eine Antwort vom Support erhalten, fügen Sie diese bitte hier hinzu, wenn es Problemumgehungen gibt. Es könnte auch eine gute Idee sein, auch die Ticket-ID zu veröffentlichen (wenn jemand eine ähnliche Frage hat und mit diesem Thema verlinkt ist, können JMP-Mitarbeiter diese Ticket-ID nachschlagen und möglicherweise den Status überprüfen).
Betreff: Wie vermeide ich einen Fehler beim Auswählen einer Zeile aus einem gefilterten Tabellenfeld?Das JMP-Support-Ticket lautet: TS-00063284