Comment créer un script pour l'interface graphique du filtre de donnéesJ'ai un filtre de données défini sur une colonne vide.
L'idée est que l'utilisateur fait des choses et que cette colonne obtient des données et que l'utilisateur continue jusqu'à ce qu'il n'y ait plus d'éléments manquants dans cette colonne.
Mais j'ai un problème. Lorsque le filtre de données est défini sur conditionnel, tout semble parfait, mais dès que l'utilisateur met à jour la colonne conditionnelle, JMP perd la tête et rejette tous les choix de filtre dont il disposait !
Je pense que mon "événement" devrait capturer l'état actuel du filtre, puis RÉINITIALISER les sélections de filtre afin de lutter contre ce "rafraîchissement" indésirable.
Le problème est que je ne veux pas utiliser de mécanismes de sélection de lignes, car les éléments de l'interface graphique de Data Fitler ne seront alors pas synchronisés avec l'expérience utilisateur...
Je suis allé jusqu'à utiliser REGEX contre l'élément "WHERE CLAUSE" pour obtenir les paramètres de filtre que je dois réinitialiser, mais je ne trouve aucun mécanisme pour manipuler l'interface graphique du filtre de données.
Toutes les réponses que j'ai trouvées impliquent uniquement les états de ligne de script JSL.
Je suis sous JMP 16.1
Mélange et nettoyage des donnéesles fenêtresRe : Comment créer un script pour l'interface graphique du filtre de donnéesGénial merci
Re : Comment créer un script pour l'interface graphique du filtre de donnéesDans votre exemple, le filtre de données local se trouve à l'intérieur du générateur de graphiques, vous avez un peu plus de flexibilité si vous le déplacez vers un élément distinct.Par exemple, vous pouvez le supprimer et le redessiner après l'exécution de votre fonction, comme ceci :
Names Default To Here(1);
dt = open("$sample_data\Iris.jmp");
dt << New Column( "MY_COL",Character);
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
close(dt2,nosave);
a_window << Bring Window to Front;
);
a_window = New Window( "a_window",
data filter context box(
H List Box(
ldflb = h list box(
ldf = dt << data filter(
Local,
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
),
MY_GRAPH_BUILDER = dt << Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
),
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter",
wc = ldf << get script;
break_the_filter_fn();
(ldflb << Child) << Delete Box;
ldfExpr = Eval Expr( ldflb << Append( ldf = dt << Expr( Name Expr(wc) ) ) );
Eval( ldfExpr );
)
)
);
);
)
);
Re : Comment créer un script pour l'interface graphique du filtre de donnéesOui exactement, j'aimerais que le filtre 12 reste même si les lignes du tableau sont mises à jour avec de nouvelles données ET conditionnel est défini sur vrai
À l'heure actuelle, JMP efface complètement le filtre de données lors de la mise à jour de la table lorsque la condition est définie sur true. Lorsque le conditionnel est désactivé, tout va bien et le comportement est celui attendu.
J'ai donc un graphique existant et l'utilisateur interagit avec le graphique pour générer un nouvel état pour la table de données principale derrière le graphique, lorsque l'utilisateur valide le nouvel état, je crée une nouvelle table avec ses modifications et mets à jour la table principale avec le nouveau. tableau.
Cet événement amène JMP à ignorer les sélections de filtre effectuées sur la table principale.
Donc, ce que je ferais, c'est capturer l'état du filtre de données avant mon événement de mise à jour, effectuer la mise à jour, puis réinitialiser l'état du filtre de données afin que l'utilisateur ne remarque pas que les filtres ont été effacés entre les deux.
Cela fonctionne parfaitement pour le filtre de données tant que "conditionnel" est défini sur false...
Mais je souhaite que la condition soit définie sur true, car elle fournit des données utiles dans le filtre de données sur le nombre de lignes pertinentes par rapport à ce qu'elles font.
voici mon exemple, pourquoi faut-il réinitialiser le filtre ? Comment puis-je empêcher l'utilisateur de subir la réinitialisation du filtre ?
Names Default To Here( 1 );
dt = Open( "$sample_data\Iris.jmp" );
dt << New Column( "MY_COL", Character );
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
//close(dt2,nosave);
);
a_window = New Window( "a_window",
H List Box(
MY_GRAPH_BUILDER = Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
);
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter", break_the_filter_fn() )
)
);
)
);
Re : Comment créer un script pour l'interface graphique du filtre de donnéesJ'essaie de comprendre votre question, dites-vous que vous souhaitez que 12 reste sélectionné si un utilisateur modifie les limites de hauteur dans la fenêtre ci-dessous ?

Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt << Data Filter(
Location( {397, 156} ),
Conditional,
Add Filter(
columns( :height, :age ),
Where( :height >= 50 & :height <= 55 ),
Where( :age == 12 )
)
);