So erstellen Sie ein Skript für die Datenfilter-GUIIch habe einen Datenfilter, der auf eine leere Spalte eingestellt ist.
Die Idee besteht darin, dass der Benutzer Dinge tut und diese Spalte Daten erhält und der Benutzer fortfährt, bis in dieser Spalte keine Elemente mehr fehlen.
Aber ich habe ein Problem. Wenn der Datenfilter auf „Bedingt“ eingestellt ist, sieht alles gut aus, aber in dem Moment, in dem der Benutzer die Bedingungsspalte aktualisiert, verliert JMP den Verstand und verwirft alle Filteroptionen, die es hatte!
Ich denke, mein „Ereignis“ sollte den aktuellen Filterstatus erfassen und dann die Filterauswahl ZURÜCKSETZEN, um dieser unerwünschten „Aktualisierung“ entgegenzuwirken.
Das Problem ist, dass ich keine Zeilenauswahlmechanismen verwenden möchte, da die GUI-Elemente von Data Fitler dann nicht mehr mit der Benutzererfahrung synchronisiert sind ...
Ich bin sogar so weit gegangen, REGEX für das Element „WHERE-KLAUSEL“ zu verwenden, um die Filtereinstellungen zu erhalten, die ich zurücksetzen muss, aber ich kann keinen Mechanismus finden, um die Datenfilter-GUI zu manipulieren.
Alle Antworten, die ich gefunden habe, beziehen sich lediglich auf JSL-Skript-Zeilenzustände.
Ich verwende JMP 16.1
Datenmischung und -bereinigungWindowsBetreff: So erstellen Sie ein Skript für die Datenfilter-GUISuper, danke
Betreff: So erstellen Sie ein Skript für die Datenfilter-GUIIn Ihrem Beispiel befindet sich der lokale Datenfilter im Graph Builder. Sie haben etwas mehr Flexibilität, wenn Sie ihn in ein separates Element verschieben.Sie könnten es beispielsweise löschen und neu zeichnen, nachdem Ihre Funktion ausgeführt wurde, etwa so:
Names Default To Here(1);
dt = open("$sample_data\Iris.jmp");
dt << New Column( "MY_COL",Character);
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
close(dt2,nosave);
a_window << Bring Window to Front;
);
a_window = New Window( "a_window",
data filter context box(
H List Box(
ldflb = h list box(
ldf = dt << data filter(
Local,
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
),
MY_GRAPH_BUILDER = dt << Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
),
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter",
wc = ldf << get script;
break_the_filter_fn();
(ldflb << Child) << Delete Box;
ldfExpr = Eval Expr( ldflb << Append( ldf = dt << Expr( Name Expr(wc) ) ) );
Eval( ldfExpr );
)
)
);
);
)
);
Betreff: So erstellen Sie ein Skript für die Datenfilter-GUIJa genau, ich möchte, dass der 12-Filter auch dann erhalten bleibt, wenn die Tabellenzeilen mit neuen Daten aktualisiert werden UND-Bedingung ist auf wahr gesetzt
Derzeit löscht JMP den Datenfilter bei der Tabellenaktualisierung vollständig, wenn die Bedingung auf „Wahr“ gesetzt ist. Wenn die Bedingung deaktiviert ist, ist alles in Ordnung und das Verhalten ist wie erwartet.
Ich habe also ein vorhandenes Diagramm und der Benutzer interagiert mit dem Diagramm, um einen neuen Status für die Hauptdatentabelle hinter dem Diagramm zu generieren. Wenn der Benutzer den neuen Status festschreibt, erstelle ich eine neue Tabelle mit ihren Änderungen und aktualisiere die Haupttabelle mit dem neuen Tisch.
Dieses Ereignis führt dazu, dass JMP die in der Haupttabelle vorgenommenen Filterauswahlen verwirft.
Was ich also tun würde, wäre, den Datenfilterstatus vor meinem Aktualisierungsereignis zu erfassen, die Aktualisierung durchzuführen und dann den Datenfilterstatus zurückzusetzen, damit der Benutzer nicht bemerkt, dass die Filter zwischendurch gelöscht wurden.
Dies funktioniert für den Datenfilter völlig einwandfrei, solange „bedingt“ auf „falsch“ gesetzt ist ...
Aber ich möchte, dass die Bedingung auf „true“ gesetzt wird, weil sie im Datenfilter nützliche Daten über die Zeilenanzahl bereitstellt, die für das, was sie tun, relevant ist.
Hier ist mein Beispiel. Warum muss der Filter zurückgesetzt werden? Wie kann ich verhindern, dass der Filter beim Benutzer zurückgesetzt wird?
Names Default To Here( 1 );
dt = Open( "$sample_data\Iris.jmp" );
dt << New Column( "MY_COL", Character );
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
//close(dt2,nosave);
);
a_window = New Window( "a_window",
H List Box(
MY_GRAPH_BUILDER = Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
);
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter", break_the_filter_fn() )
)
);
)
);
Betreff: So erstellen Sie ein Skript für die Datenfilter-GUIIch versuche Ihre Frage zu verstehen. Wollen Sie damit sagen, dass 12 ausgewählt bleiben soll, wenn ein Benutzer die Höhenbegrenzungen im Fenster unten ändert?

Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt << Data Filter(
Location( {397, 156} ),
Conditional,
Add Filter(
columns( :height, :age ),
Where( :height >= 50 & :height <= 55 ),
Where( :age == 12 )
)
);