Hallo zusammen,
Ich habe vor kurzem damit begonnen, JSL zu schreiben, das einige Informationen in einem neuen Fenster mit der Funktion Table Box() zusammenfasst, weil ich möchte, dass Benutzer Zeilen auswählen können, um den nächsten Schritt eines Prozesses auszuführen. Manchmal kann die Erstellung einer interaktiven Tischbox mühsam sein.Ich habe vor kurzem auch erfahren, dass Sie eine Datentabelle mit dem Befehl „Als Bericht abrufen“ in eine interaktive, tabellenkastenähnliche Oberfläche umwandeln können, wodurch die Erstellung der Oberfläche viel einfacher und schneller wird.
Siehe zum Beispiel diese JSL:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
RptWin = New Window( "Data Table as report",
Outline Box("Data Table as Report",
dt_Rpt = dt << Get as Report();
)
);
Das einzige Problem, das ich habe, ist die Verwendung der Ausgabe im neuen Fenster wie bei einer Tabellenbox.
In der Table Box-Umgebung können Sie Funktionen so einstellen, dass sie die von Ihnen ausgewählten Informationen zurückgeben und die weiter unten im Code verwendet werden können. Der Befehl „Als Bericht abrufen“ lässt dies jedoch nicht zu. Zumindest habe ich keine Beispiele dafür gefunden, und der Scripting-Index enthält nicht viel über den Befehl "Als Bericht abrufen".
Der folgende Code ist ein Beispiel dafür, wie ich ein Tabellenfeld erstellt habe, in dem jeweils eine einzelne Zeile ausgewählt werden kann.
tb = Table Box(
Number Col Box( "PC Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""> 1, Throw( "Too many items selected!\!rOnly one selection possible." ),
N Items( SelRows ) == 1,
SelRows = this << Get Selected Rows;
N_PCs = SelRows[1];
);
)
)
)</SET>Gibt es eine Möglichkeit, die gleiche Art von Funktionalität zu erhalten, wenn Sie die Ausgabe als Bericht abrufen verwenden?
Danke für jede Rückmeldung!,
DS
Ich denke schon, Sie müssen nur eine Ebene tiefer in der Referenzreferenz gehen, die von der Funktion Get are Report() zurückgegeben wird, um zur Tabelle zu gelangen.Versuche dies:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
RptWin = New Window( "Data Table as report",
Outline Box("Data Table as Report",
dt_Rpt = dt << Get as Report();
)
);
tb = dt_Rpt[Table Box( 1 )];
tb << Set Shade Headings( 1 );
tb << Append(
Plot Col Box( "",
:mvalue << get values,
<<SET scale=""> 1, Throw( "Too many items selected!\!rOnly one selection possible." ),
N Items( SelRows ) == 1,
SelRows = this << Get Selected Rows;
N_PCs = SelRows[1];
);
)
);</SET>Hi @ich h ,
Danke für die schnelle Antwort und Lösung - genau das suche ich. Funktioniert perfekt. Hier ist das größere Stück Code, in dem ich versucht habe, es zu implementieren. Ich weiß, dass dies ein separates Thema ist, aber wissen Sie zufällig, wie ich die Diagrammerstellungsanzeige im folgenden Code mit dem Tabellenfeld „Als Bericht abrufen“ verknüpfen kann, damit der Benutzer auf die Zeile im Tabellenfeld klickt, wird diese hervorgehoben? den entsprechenden Datenpunkt im Graph Builder?Übrigens verwende ich nur das Boston Housing als Beispieldatensatz mit mvalue als Antwort und allen anderen Spalten als Prädiktoren in der Partition – und ich verwende einen Validierungsanteil von 0,3.
Vielen Dank!,
DS
Names Default To Here( 1 );
lbWidth = 168;
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
::max_spRecall = max_sp_input << get;
::partVPRecall = partVP_input << Get;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL> 1, Throw( "Too many items selected!\!rOnly one selection possible." ),
N Items( SelRows ) == 1,
SelRows = this << Get Selected Rows;
NPCs = SelRows[1];
);
)
);
);
Part = Expr(
If(
N Items( vcols ) == 1,
dt_results = New Table( "Partition_Results",
Add Rows( max_sp ),
New Column( "Splits", Numeric, Continuous ),
New Column( "Training RSquare", Numeric, Continuous ),
New Column( "Validation RSquare", Numeric, Continuous ),
New Column( "Training RASE", Numeric, Continuous ),
New Column( "Validation RASE", Numeric, Continuous ),
New Column( "Training N", Numeric, Continuous ),
New Column( "Validation N", Numeric, Continuous ),
New Column( "RSquare Diff", Numeric, Continuous, Formula( "Training RSquare"n - "Validation RSquare"n ) ),
New Column( "Penalized Valid RSquare", Numeric, Continuous, Formula( "Training RSquare"n - 0.05 * "Splits"n ) )
),
N Items( vcols ) == 0 & Is Missing( partVP ) == 0,
dt_results = New Table( "Partition_Results",
Add Rows( max_sp ),
New Column( "Splits", Numeric, Continuous ),
New Column( "Training RSquare", Numeric, Continuous ),
New Column( "Validation RSquare", Numeric, Continuous ),
New Column( "Training RASE", Numeric, Continuous ),
New Column( "Validation RASE", Numeric, Continuous ),
New Column( "Training N", Numeric, Continuous ),
New Column( "Validation N", Numeric, Continuous ),
New Column( "RSquare Diff", Numeric, Continuous, Formula( "Training RSquare"n - "Validation RSquare"n ) ),
New Column( "Penalized Valid RSquare", Numeric, Continuous, Formula( "Validation RSquare"n - 0.05 * "Splits"n ) )
),
N Items( vcols ) == 0,
dt_results = New Table( "Partition_Results",
Add Rows( max_sp ),
New Column( "Splits", Numeric, Continuous ),
New Column( "Training RSquare", Numeric, Continuous ),
New Column( "Training RASE", Numeric, Continuous ),
New Column( "Training N", Numeric, Continuous ),
New Column( "Penalized Train RSquare", Numeric, Continuous, Formula( "Training RSquare"n - 0.05 * "Splits"n ) )
)
);
For( i = 1, i <= max_sp, i++,
dt_results:"Splits"n[i] = i
);
dt_name = dtchosen << Get Name;
For( i = 1, i <= N Rows( dt_results ), i++,
Psplit = dt_results:"Splits"n[i];
str = Eval Insert(
"report = (dtchosen<<PARTITION></PARTITION></MODAL>Sie wetten. Das Diagramm ist bereits an die Tabelle gebunden, also denke ich, dass Sie dieses Verhalten sehen sollten, wenn Sie einfach die beiden Zeilen unten zu Ihrer Set Row Change-Funktion hinzufügen.
tb << Set Row Change Function(
Function( {this},
{SelRows},
SelRows = this << Get Selected Rows;
If(
N Items( SelRows ) > 1, Throw( "Too many items selected!\!rOnly one selection possible." ),
N Items( SelRows ) == 1,
SelRows = this << Get Selected Rows;
NPCs = SelRows[1];
);
// ** Added next two lines **
dt_results << Clear Select;
dt_results << Select rows(SelRows);
)
);Hallo @ich h ,
Ja super! Das macht eigentlich total Sinn, und ich weiß nicht, warum ich nicht daran gedacht habe.
Nochmals vielen Dank für die schnelle Lösung!,
DS