Barre de recherche dynamique sur les colonnes de la zone de tableauBonjour,
Une demande fréquente est de créer une sorte de barre de recherche au-dessus des colonnes de la zone de tableau, similaire à ce qui est fait dans d'autres logiciels de visualisation.
Le but serait de pouvoir filtrer très facilement le tableau de données sur les différents filtres.
Par exemple, dans mon exemple ci-dessous, si j'entre « En attente » dans la zone de recherche en haut de la colonne « Statut de validation » et « Oui » dans la zone de recherche en haut de la colonne « Confirmation de distribution », cela filtrera le tableau en fonction de ces deux filtres : toutes les lignes qui contiennent « En attente » dans le statut de validation et « oui » dans l'autre colonne.
Je sais que nous pourrions utiliser un filtre de données, et que ce que je demande concerne vraiment les scripts JSL, mais est-ce que quelqu'un a eu la même demande similaire et a réussi à généraliser la fonction pour générer ce type de tablebox ?

Automatisation et scriptsRe : Barre de recherche dynamique sur les colonnes de la zone de tableauCet élément figure déjà dans la liste de souhaits JMP. Vous pouvez le consulter ici.
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauCréer une version basique d'un tel outil n'est pas trop compliqué, mais créer une version robuste et esthétique sera probablement plus complexe. L'exemple ci-dessous présente une version basique.
Voir plus...
Names Default To Here(1);
filter_tablebox = function({tb, options},
aa = Associative Array(tb << get names, options << get text);
filter_expr = {};
For Each({{colname, filter_text}}, aa,
If(Is Missing(filter_text),
continue(); // skip over
);
Insert Into(filter_expr, EvalExpr(Contains(Lowercase(Expr(As Name(colname))), Expr(filter_text))));
);
If(N Items(filter_expr) == 0,
tb << Reset Filter;
return(1);
);
If(N Items(filter_expr) == 1,
filter_expr = filter_expr[1];
,
Substitute Into(filter_expr, Expr(List()), Expr(And()));
);
Eval(EvalExpr(tb << Filter Where(Expr(Name Expr(filter_expr)))));
return(1);
);
nw = New Window("Example",
ob = Outline Box("Table",
V List Box(
hlb = H List Box(
Text Edit Box("", << Set Script(filter_tablebox(tb1, hlb << XPath("//TextEditBox"))), << Set Width(51)),
Text Edit Box("", << Set Script(filter_tablebox(tb1, hlb << XPath("//TextEditBox"))), << Set Width(80)),
),
tb1 = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
String Col Box("TEST", {"x", "y", "z", "a"})
)
)
)
);
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauMerci beaucoup, c'est exactement ça ! La version de base résout déjà mon problème, c'est parfait.
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauJuste par curiosité, serait-il possible de travailler également avec une boîte de table de données ?
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauSi Table Box utilise des colonnes de table de données, il ne semble plus prendre en charge le filtre « Où », ce qui vous empêcherait de l'utiliser. Pourquoi utiliser Data Table Box ? Souhaitez-vous pouvoir sélectionner des lignes liées à la table d'origine ou autre chose ?
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauC'est juste qu'avec la boîte de données, j'avais directement la table de données, alors qu'avec la boîte de table, j'ai dû convertir ma table en boîte de table. J'ai effectivement essayé d'ajuster votre script pour la table de données, mais je suis resté bloqué sur le filtre, sans savoir si c'était moi qui faisais une erreur.
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauVous pouvez convertir un tableau de données en zone de tableau (sans zones de couleur de tableau de données fantaisistes) en utilisant << obtenir comme rapport
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(4),
Compress File When Saved(1),
New Column("Mountain",
Character,
"Nominal",
Set Values({"K2", "Delphi", "Kilimanjaro", "Grand Teton"})
),
New Column("TEST", Character, "Nominal", Set Values({"x", "y", "z", "a"}))
);
filter_tablebox = function({tb, options},
aa = Associative Array(tb << get names, options << get text);
filter_expr = {};
For Each({{colname, filter_text}}, aa,
If(Is Missing(filter_text),
continue(); // skip over
);
Insert Into(filter_expr, EvalExpr(Contains(Lowercase(Expr(As Name(colname))), Expr(filter_text))));
);
If(N Items(filter_expr) == 0,
tb << Reset Filter;
return(1);
);
If(N Items(filter_expr) == 1,
filter_expr = filter_expr[1];
,
Substitute Into(filter_expr, Expr(List()), Expr(And()));
);
Eval(EvalExpr(tb << Filter Where(Expr(Name Expr(filter_expr)))));
return(1);
);
nw = New Window("Example",
ob = Outline Box("Table",
V List Box(
hlb = H List Box(
Text Edit Box("", << Set Script(filter_tablebox(tb1, hlb << XPath("//TextEditBox"))), << Set Width(80)),
Text Edit Box("", << Set Script(filter_tablebox(tb1, hlb << XPath("//TextEditBox"))), << Set Width(51)),
),
rep = dt << get as report; // repo is border box and under it is table box
)
)
);
tb1 = rep << child;
rep << Left (0);
rep << Top(0);
rep << Bottom(0);
Re : Barre de recherche dynamique sur les colonnes de la zone de tableauMerci beaucoup !!!!! Je n'avais aucune idée que c'était aussi simple que de convertir un rapport !