Sélection de lignes de filtre de données imbriquéesBonjour,
Je travaille sur un projet où j'aurai des données classées dans une table de données et les utilisateurs sélectionneront une option spécifique via une interface que je crée.
Ce que je veux que le script ci-dessous fasse est:
- Dans la case radio de gauche, Choix 1, la personne sélectionne l'âge.
- Dans la table de données, toutes les lignes qui ne correspondent pas à cet âge sont masquées et exclues de la table de données.
- Dans la boîte radio de droite, Choix 2, il est mis à jour dynamiquement pour afficher uniquement les options qui ne sont pas masquées ou exclues et contiendra une liste de noms parmi lesquels choisir.
- Une fois ces deux options sélectionnées, il ne restera qu'une seule ligne, dont le numéro de ligne est renvoyé dans my_row.
Sur quoi j'aimerais de l'aide :
- Les lignes ne sont pas masquées et exclues automatiquement lorsque les options du choix 1 sont sélectionnées, même si show(1) et include(1) sont inclus dans les termes du filtre
- La case radio 2 n'est pas mise à jour dynamiquement à la suite du choix 1
- Les deux ne "fonctionnent pas ensemble", le choix 2 écrase les états de ligne du choix 1 et peut sélectionner n'importe quelle ligne. C'est probablement parce qu'il n'est pas mis à jour dynamiquement (?)
Références
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
AutreScriptles fenêtresRe : sélection de lignes de filtre de données imbriquéesVoici un exemple de ce que je recherche, mais je ne sais pas comment accéder au code, car il s'agit d'une application.
Lorsque vous avez plusieurs tables de données :
Semiconductor Toolkit (lien ci-dessous) > Utilitaires (en haut à droite) > Attacher les limites du tableau
Vous cliquez d'abord sur la table dont vous souhaitez afficher les colonnes, puis une deuxième liste est générée à droite des colonnes présentes dans la table de données sur laquelle vous avez cliqué. Cela se mettra à jour dynamiquement si vous choisissez une nouvelle table de données.
J'ai trouvé quelque chose de similaire dans le fil ci-dessous, mais j'ai du mal à traduire ce code en ce dont j'ai besoin.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Retour au message d'origine :
- Choix 1 : si je clique sur "15", 7 lignes dans la dt sont sélectionnées, le reste doit être exclu et caché.
- Une option secondaire consiste à utiliser resume( namelist = by( :name ) ), qui me donnera une liste de noms uniques qui ne sont ni exclus ni masqués, mais sans utiliser de boîte radio, cette liste alimentera le choix 2. Je ne sais pas comment rendre cette dynamique.
- Le choix 2 mettra à jour dynamiquement une liste de noms en fonction de l'âge sélectionné dans le choix 1.
- Une fois qu'une sélection dans le Choix 2 est faite, une seule ligne sera sélectionnée.
Disons que je sélectionne : Choix 1 = 15 & Choix 2 = Amy, alors la ligne 29 sera sélectionnée et je peux utiliser << Obtenir les lignes sélectionnées pour enregistrer ce numéro de ligne dans une variable.
Complément Semiconductor Toolkit :
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Re : sélection de lignes de filtre de données imbriquéesL'utilisation de filtres entièrement personnalisés pourrait être une solution assez simple. Ceci d'autre part pourrait ne pas être même si cela fonctionne (cette fois)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
Vous trouverez ci-dessous quelques modifications apportées à votre script à l'aide du gestionnaire de changement de filtre (les gestionnaires d'état peuvent être très bogués et capricieux dans JMP, vous avez été prévenu
)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);Re : sélection de lignes de filtre de données imbriquéesJ'ai le sentiment que je suis proche, je rencontre deux problèmes maintenant.
J'ai modifié le code de solution du fil ci-dessous plus loin.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
Si vous commentez tout vlb1, vous obtenez une petite boîte que vous pouvez sélectionner parmi les différents âges de Big Class. Les autres lignes sont exclues et masquées.
Problèmes:
- Le deuxième résumé, namelist, n'est pas mis à jour dynamiquement avec une sélection d'âge différente. Comment le script peut-il être mis à jour pour faire cela ?
- Le deuxième Try() provient du code de la solution et est dynamique, donc je ne sais pas pourquoi le premier ne le serait pas.
- Erreurs JMP lorsque le vlb1 n'est pas commenté, image d'erreur ci-dessous. Je ne sais pas où se trouve la référence d'objet supprimé dans cette partie du code. Quelqu'un peut-il le voir?

Je pense que si ces deux peuvent être résolus, alors je devrais pouvoir trouver un moyen de renvoyer un seul numéro de ligne.
Re : Sélection de lignes de filtre de données imbriquées@jthi , merci encore pour votre aide incroyable !La réponse était si simple, encore une fois ahaha.
J'ai modifié votre première suggestion pour l'adapter à mes besoins car je vois ce que vous entendez par les gestionnaires d'état sont bogués et capricieux dans JMP.
Re : Sélection de lignes de filtre de données imbriquéesJ'ai créé un élément de liste de souhaits concernant différents gestionnaires d'état dans JMP . Améliorer les gestionnaires d'état de JMP (étiquette de survol, gestionnaire d'état de ligne, gestionnaire d'état de filtre, planificateur, ...) .