Barra di ricerca dinamica sulle colonne della casella della tabellaCiao,
Una richiesta frequente è quella di creare una sorta di barra di ricerca sopra le colonne della casella della tabella, simile a quanto avviene in altri software di visualizzazione.
L'obiettivo sarebbe quello di poter filtrare molto facilmente la tabella dei dati in base a diversi filtri.
Ad esempio, nell'esempio seguente, se inserisco "In sospeso" nella casella di ricerca sopra la colonna "Stato di convalida" e "Sì" nella casella di ricerca sopra la colonna "Conferma di distribuzione", la tabella verrà filtrata in base a questi due filtri: tutte le righe che contengono "In sospeso" nello stato di convalida e "Sì" nell'altra colonna.
So che potremmo usare un filtro dati e che la mia domanda riguarda in realtà lo scripting JSL, ma qualcuno ha avuto una richiesta simile ed è riuscito a generalizzare la funzione per generare questo tipo di tablebox?

Automazione e scriptingRe: Barra di ricerca dinamica nelle colonne della casella della tabellaQuesta voce è già presente nella lista dei desideri di JMP. Puoi visualizzarla qui.
Re: Barra di ricerca dinamica nelle colonne della casella della tabellaNon è troppo complicato creare una versione base di qualcosa del genere, ma crearne una robusta e dall'aspetto gradevole probabilmente diventerà un po' complicato. L'esempio seguente è sul lato base.
Scopri di più...
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: Barra di ricerca dinamica nelle colonne della casella della tabellaGrazie mille, è proprio così! La versione base risolve già il mio problema, è perfetta.
Re: Barra di ricerca dinamica nelle colonne della casella della tabellaPer curiosità, sarebbe possibile lavorare anche con una casella di tabella dati?
Re: Barra di ricerca dinamica nelle colonne della casella della tabellaSe Table Box utilizza Data Table Col Boxes, sembra non supportare più la funzione Filtro Dove, il che ne impedirebbe l'utilizzo. Qual è il motivo per cui si utilizza Data Table Box? Si desidera avere la possibilità di selezionare righe collegate alla tabella originale o qualcos'altro?
Re: Barra di ricerca dinamica nelle colonne della casella della tabellaIl problema è che con la casella della tabella dati avevo la tabella dati direttamente, mentre con la casella della tabella ho dovuto convertire la mia tabella in una casella della tabella. E in effetti avevo provato ad adattare il tuo script per la tabella dati, ma mi sono bloccato sul filtro, dove non sapevo se ero io a sbagliare.
Re: Barra di ricerca dinamica nelle colonne della casella della tabellaÈ possibile convertire la tabella dati in una casella di tabella (senza le elaborate caselle di colonna della tabella dati) utilizzando << ottieni come report
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: Barra di ricerca dinamica nelle colonne della casella della tabellaGrazie mille!!!!! Non avevo idea che fosse così semplice ottenere un report per convertirlo!