JSL-Hilfe mit: Get As Report & Table BoxHallo zusammen,
Ich habe vor kurzem damit begonnen, JSL zu schreiben, das mithilfe der Table Box()-Funktion einige Informationen in einem neuen Fenster 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 außerdem kürzlich erfahren, dass Sie eine Datentabelle mit dem Befehl „Als Bericht abrufen“ in eine interaktive, tabellenartige Schnittstelle umwandeln können, wodurch die Erstellung der Schnittstelle 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, wie ich die Ausgabe im neuen Fenster verwenden kann, wie ich es mit einer Tabellenbox kann.
In der Table Box-Umgebung können Sie Funktionen so festlegen, dass sie die von Ihnen ausgewählten Informationen zurückgeben und weiter unten im Code verwendet werden können. Mit dem Befehl „Als Bericht abrufen“ ist dies jedoch nicht möglich. Zumindest habe ich keine Beispiele dafür gefunden, und der Skriptindex 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 Funktionalität zu erhalten, wenn die Ausgabe „Als Bericht abrufen“ verwendet wird?
Vielen Dank für jedes Feedback!,
DS
MassenanpassungBetreff: JSL-Hilfe mit: Get As Report & Table BoxHallo @ich h ,
Ja super! Das macht tatsächlich absolut Sinn, und ich weiß nicht, warum ich nicht daran gedacht habe.
Nochmals vielen Dank für die schnelle Lösung!,
DS
Betreff: JSL-Hilfe mit: Get As Report & Table BoxDarauf können Sie wetten. Das Diagramm ist bereits mit der Tabelle verknüpft. Ich denke, wenn Sie einfach die beiden Zeilen unten zu Ihrer Funktion „Zeilenänderung festlegen“ hinzufügen, sollten Sie dieses Verhalten sehen.
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);
)
);Betreff: JSL-Hilfe mit: Get As Report & Table BoxHallo @ich h ,
Vielen Dank für die schnelle Antwort und Lösung – das ist genau das, was ich suche. Funktioniert perfekt. Hier ist der größere Teil des Codes, den ich zu implementieren versucht habe. 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, sodass sie hervorgehoben wird, wenn der Benutzer auf die Zeile im Tabellenfeld klickt? der entsprechende 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.
Danke!,
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>Betreff: JSL-Hilfe mit: Get As Report & Table BoxIch 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>