こんにちは、
他の視覚化ソフトウェアと同様に、テーブル ボックスの列の上に一種の検索バーを作成したいという要望がよくあります。
目的は、さまざまなフィルターでデータ テーブルを非常に簡単にフィルターできるようにすることです。
たとえば、以下の例では、「検証ステータス」列の上部にある検索ボックスに「保留」と入力し、「配布確認」列の上部にある検索ボックスに「はい」と入力すると、検証ステータスに「保留」が含まれ、他の列に「はい」が含まれるすべての行という 2 つのフィルターを指定してテーブルがフィルターされます。
データ フィルターを使用できることはわかっています。また、私が尋ねているのは実際には JSL スクリプトに関することですが、同様のリクエストがあり、この種のテーブル ボックスを生成する関数を一般化することに成功した人はいますか?

これはすでにJMPウィッシュリストに追加されています。こちらからご覧いただけます。
このようなものの基本バージョンを作成するのはそれほど複雑ではありませんが、堅牢で見栄えの良いものを作成するとなると、かなり複雑になる可能性があります。以下の例は基本的なものです。
もっと見る...
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"})
)
)
)
);
ありがとうございます、まさにその通りです!基本バージョンで問題は解決しました。完璧です。
単なる好奇心ですが、データ テーブル ボックスでも作業することは可能でしょうか?
テーブルボックスがデータテーブル列ボックスを使用している場合、フィルター条件がサポートされていないため、使用できない可能性があります。データテーブルボックスを使用する理由は何ですか?元のテーブルにリンクされた行選択機能、あるいは他の機能が必要ですか?
データテーブルボックスではデータテーブルを直接使用できたのに対し、テーブルボックスではテーブルをテーブルボックスに変換する必要がありました。実際、データテーブル用にスクリプトを調整しようとしたのですが、フィルターのところで行き詰まってしまい、自分が間違っているのかどうかわからなくなってしまいました。
<< get as 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);
本当にありがとうございます!!!!! レポートを取得して変換するのがこんなに簡単だとは知りませんでした!