Salut tout le monde,
J'ai récemment commencé à écrire du 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, créer une boîte de table interactive peut être fastidieux.J'ai également récemment appris que vous pouvez prendre une table de données et la transformer en une interface interactive de type boîte de table à l'aide de la commande Obtenir en tant que rapport, ce qui facilite et accélère la création de l'interface.
Voir par exemple cette 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 le peux avec une Table Box.
Dans l'environnement Table Box, vous pouvez définir des fonctions pour qu'elles renvoient les informations que vous sélectionnez et qui peuvent être utilisées plus loin dans le code. Cependant, la commande Obtenir en tant que rapport ne vous permet pas de faire cela. Au moins, je n'ai trouvé aucun exemple sur 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 zone 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 Obtenir en tant que rapport ?
Merci pour vos commentaires !,
DS
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>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 Obtenir en tant que rapport de sorte que lorsque l'utilisateur clique sur la ligne dans la zone de tableau, il est mis en surbrillance le point de données correspondant dans le générateur de graphique ?Soit dit en passant, j'utilise simplement le 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>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 ,
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