定期的に更新される2つのデータソースがあり、新しい列が追加されます。これらはJSLスクリプトで統合されており、問題なく動作しますが、列が追加されるにつれて列スイッチャーが拡大するグラフを埋め込みたいと考えています。
例えば、HPLCデータが機器Aと機器Bから取得されているとします。各列は別々のサンプルであり、時間の経過とともにサンプルが追加されていきます。「A」サンプルの最終データテーブルにシンプルなXYチャートを作成し、列が追加されるにつれて列スイッチャーも拡大されるようにしたいと考えています。(機器B、さらには機器Cについても、後で3つ目の機器を追加した場合は同様に拡大します。)

データを B とマージする前に A テーブルから変数を作成しましたが、最終テーブルが変数を認識したり明示的な列名を持つように、リストを渡す (または評価する) にはどうすればよいでしょうか?
A_columns = dt_A <<GET column="" names=""></GET><BR />//Merge A and B based on time column<BR /><BR />Final_Table =dt_B << Update(<BR />With(dt_A)),<BR />Match Columns( :Time = :Time)<BR />);<BR />Final_Table <<NEW script=""></NEW>Graph Builder(<BR />Size( 546, 565 ),<BR />Show Control Panel( 0 ),<BR />Variables( X( :Time ), Y( A_columns[1] ) ),<BR />Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) ),<BR />Column Switcher( A_columns[1], A_columns)<BR />);
これは、最終テーブルから列のリストを取得するときにはうまく機能しているように見えますが、別のテーブルから作成された変数を使用しようとすると問題が発生します。
列スイッチャーの最初の列 (:Time) を除くすべてを常に使用したいですか?
この場合は、はい - 常に同じ名前を持つ最初の列になります。
その場合、テーブルスクリプト内で列リストを動的に構築することを検討します。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
table_script_expr = Expr(
cols = Current Data Table() << Get Column Names();
Remove From(cols, 1); // drop first column
gb = Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:lot_id), Y(Eval(cols[1]))),
Elements(Points(X, Y, Legend(3)))
);
gb << Column Switcher(
cols[1],
Remove(cols, 1)
)
);
Eval(EvalExpr(
dt << New Script("Graph",
Expr(NameExpr(table_script_expr))
);
));
グラフを作成してそれをスクリプトとして保存するだけで評価を回避できます(私はこの「トリック」を頻繁に使用します)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
cols = dt << Get Column Names();
Remove From(cols, 1); // drop first column
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:lot_id), Y(Eval(cols[1]))),
Elements(Points(X, Y, Legend(3))),
Column Switcher(
cols[1],
Remove(cols, 1)
),
Invisible
);
gb << Save Script to Data Table("Graph"); // this will remove the need for evaluation
wait(0);
gb << close window;
評価したい場合は
// If you wish to evaluate, this should work even though the script will look a bit weird due to lack of ":" in columns
// If it doesn't you for some reason, you will have to build the list in a bit different manner for evaluation
Eval(EvalExpr(
dt << New Script("Graph2",
Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:lot_id), Y(Expr(cols[1]))),
Elements(Points(X, Y, Legend(3))),
Column Switcher(
Expr(cols[1]),
Expr(Remove(cols, 1))
)
)
)
));