Salut tout le monde,
J'ai récemment commencé à écrire JSL qui résume certaines informations dans une nouvelle fenêtre à l'aide de la fonctionnalité Table Box() car je souhaite que les utilisateurs puissent sélectionner des lignes pour effectuer l'étape suivante d'un processus. Parfois, faire une boîte de table interactive peut être fastidieux.J'ai également appris récemment que vous pouvez prendre une table de données et la transformer en une interface de type boîte de table interactive à l'aide de la commande Get As Report, ce qui rend la création de l'interface beaucoup plus facile et plus rapide.
Voir par exemple ce 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();
)
);
Le seul problème que j'ai est de savoir comment utiliser la sortie dans la nouvelle fenêtre comme je peux le faire avec une Table Box.
Dans l'environnement Table Box, vous pouvez définir des fonctions afin qu'elles renvoient les informations que vous avez sélectionnées et qui peuvent être utilisées plus loin dans le code. Cependant, la commande Get As Report ne vous permet pas de faire cela. Au moins, je n'ai trouvé aucun exemple de la façon de le faire, et l'index de script n'a pas grand-chose sur la commande Get As Report.
Le code suivant est un exemple de la façon dont j'ai construit une boîte de table qui a une seule ligne sélectionnable à la fois.
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>Existe-t-il un moyen d'obtenir le même type de fonctionnalité lors de l'utilisation de la sortie Get As Report ?
Merci pour tout commentaire !,
DS
Salut @ih ,
Oui parfait! C'est en fait tout à fait logique, et je ne sais pas pourquoi je n'ai pas pensé à le faire.
Merci encore pour la solution rapide!,
DS
Tu paries. Le graphique est déjà lié à la table, donc je pense que si vous ajoutez simplement les deux lignes ci-dessous à votre fonction Set Row Change, vous devriez voir ce comportement.
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);
)
);Salut @ih ,
Merci pour la réponse rapide et la solution, c'est exactement ce que je recherche. Fonctionne parfaitement. Voici le plus gros morceau de code où j'essayais de l'implémenter. Je sais qu'il s'agit d'un sujet distinct, mais savez-vous par hasard comment je peux lier l'affichage du générateur de graphiques dans le code ci-dessous avec la zone de tableau Get As Report afin que lorsque l'utilisateur clique sur la ligne dans la zone de tableau, il met en évidence le point de données correspondant dans le générateur de graphe ?Soit dit en passant, j'utilise simplement Boston Housing comme exemple d'ensemble de données avec mvalue comme réponse et toutes les autres colonnes comme prédicteurs dans la partition - et j'utilise une partie de validation de 0,3.
Merci!,
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>Je pense que oui, il vous suffit de descendre d'un niveau dans la référence de référence renvoyée par la fonction Get are Report() pour accéder à la table.Essaye ça:
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>