Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istIst es möglich, einen Zeilenstatus-Handler auf eine Datentabelle anzuwenden und dafür zu sorgen, dass dieser Handler weiterhin funktioniert, wenn die Datentabelle geändert wird? Wenn zum Beispiel eine Spalte durch ein Skript oder interaktiv durch einen Benutzer sortiert wird?
Ich habe derzeit zwei Datentabellen: eine Tabelle mit zusammenfassenden Statistiken, eine mit Rohdaten. Der Benutzer wählt eine Zeile in der Übersichtstabelle aus, der Zeilenstatus-Handler erkennt, welche Zeile ausgewählt ist, extrahiert den Parameternamen und erstellt unter Verwendung des ausgewählten Parameters ein Diagramm aus der Rohdatentabelle.
Es funktioniert einwandfrei (obwohl es zunächst die Zeile aufnimmt, deren Auswahl aufgehoben wurde, bevor es dann die neu ausgewählte Zeile findet), es bricht jedoch ab, wenn der Benutzer die Übersichtstabelle sortiert (z. B. wenn er sich den niedrigsten Cpk oder eine andere Metrik ansehen möchte). ).
Ich sehe das gleiche Problem im folgenden einfachen Beispiel, das auf der Skripthilfe basiert:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << Select Rows( 1 );
dt << sort( by( :weight ), replace table, order( ascending ) );
dt << Select Rows( 9 );Die Ausgabe lautet:
Scriptable[]
[1]
Ich denke, das könnte mit diesem Wunschlisteneintrag zusammenhängen: https://community.jmp.com/t5/JMP-Wish-List/Improve-JMP-s-state-handlers-hover-label-row-state-handler/idi-p/527992 . Gibt es eine Problemumgehung?
Ich verwende JMP17.0 unter MacOS.
Danke schön!
Automatisierung und SkripterstellungBetreff: Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istMir ist übrigens klar, dass das von mir angegebene Skriptbeispiel durch Hinzufügen leicht gelöst werden könnte
rs = dt << make row state handler( f );
unmittelbar nach meinem Sort()-Befehl. Es ist der interaktive Fall (bei dem ein Benutzer die Tabelle manuell nach einer Spalte sortiert und dann eine Zeile auswählt), der das Problem darstellt.
Ich habe versucht, dieses Problem zu umgehen, indem ich der Tabelle ein Skript hinzugefügt habe, das den Zeilenstatus-Handler zurücksetzt:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << new script("Fix Row State Handler",
rs = dt << make row state handler( f );
); // errors when the script is run!
dt << Select Rows( 1 );
wait(0);
dt << sort( by( :weight ), replace table, order( ascending ) );
rs = dt << make row state handler( f ); // fixes issue when scripting
dt << Select Rows( 9 );aber ich erhalte eine Fehlermeldung, wenn ich auf das grüne Dreieck klicke, um das Skript auszuführen:
Send Expects Scriptable Object in access or evaluation of 'Send' , dt << /*###*/make row state handler( f ) /*###*/ at line 6 in ...
Selbst wenn dies funktionieren würde, wäre es jedoch nicht ideal, da der Benutzer nach dem Sortieren der Tabelle daran denken muss, dies zu tun.
Danke,
Matthew.
Betreff: Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istHallo,
Möglicherweise können Sie einen Bericht verwenden, um das Skript zu steuern. Tabellenfelder können Skripts ausführen, wenn Zeilen ausgewählt sind, und scheinen beim Sortieren der Übersichtstabelle nicht abzubrechen. Probieren Sie die folgenden Schritte aus, um sich ein Bild zu machen.
Names Default To Here(1);
dt = open ("$Sample_Data\Car Physical Data.jmp");
dtSum = dt << summary( group(:Country), mean(:weight) );
nw = new window("ex",
dtb = Data Table Box( dtSum,
<< Set Selectable rows,
<< Set Click Sort )
);
//do something when a row is selected. Here, we just print the country.
dtb << Set Row Change Function ( function( { this },
selCountry = this[1][this << get selected rows];
print(evalinsert("Selected country is: ^selCountry[1]^."))
) );
Beifall,
Brady
Betreff: Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istHallo Brady, das ist brillant, danke! Dadurch habe ich eine viel robustere und benutzerfreundlichere Lösung erhalten als zuvor.
Eine Frage: Ist es möglich, die Datentabellenbox von JSL abzufragen, um herauszufinden, nach welcher Spalte (falls vorhanden) der Benutzer die Tabelle sortiert hat?
Grüße,
Matthew.
Betreff: Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istHallo Matthew,
Ich kenne keine Möglichkeit, abzufragen, welche Spalte (falls vorhanden) zum Sortieren der Tabelle verwendet wurde. Sie könnten dies brutal erzwingen, indem Sie die Spalten überprüfen, aber je nach Tabellengröße kann es teuer werden.
Betreff: Make Row State Handler funktioniert nicht mehr, wenn die Tabelle sortiert istHallo Brady,
Danke für den Tipp.
Ich kenne keine Möglichkeit, abzufragen, welche Spalte (falls vorhanden) zum Sortieren der Tabelle verwendet wurde. Sie könnten dies brutal erzwingen, indem Sie die Spalten überprüfen, aber je nach Tabellengröße kann es teuer werden.
Könnten Sie mir bei der Brute-Force-Methode helfen? Ich habe versucht, mir die Eigenschaften der DataTableColBox und des Fensters selbst anzusehen, habe aber nichts gefunden, anhand dessen ich feststellen könnte, ob es sortiert ist.
Danke,
Matthew.