みなさんこんにちは
アプリケーション/ダッシュボードのコードを作成したいと考えています。コードの最初の部分では、いくつかのテーブルをインポートし、フィルタリングとフォーマットを行ってから、いくつかのグラフとレポートを作成します。
この後、既存のデータテーブルを使用して以前に作成したレポートを表示するアプリケーション/ダッシュボードを作成するための一般的なコードが必要です (フィルタリングとフォーマット後)。分析に使用するデータテーブルを選択するように求められたり、すでに埋め込まれているが正しくなかったりすることなく、スクリプトでこれを把握することができませんでした。基本的に、データテーブル 1 は現在のデータ テーブル指定を使用しており、それで問題ありませんが、必要な 2 番目のテーブルは埋め込まれますが、基本的には、変数としてフォーマットされたものが元のデータテーブルに上書きされるにもかかわらず、フォーマットされていないフィルタリングされていないデータテーブルにデフォルト設定されます。
フォーマットされたテーブルを保存し、フルパス (グローバル変数) を使用してそれらを呼び出すことも試みましたが、コードを実行しようとすると、アプリケーションを構築するテーブルを選択するように求められます。
全体として、これをできるだけ一般化してスクリプト化しようとしています。これは、実行されるたびに、使用されるデータ テーブルに異なるデータ (同じまたはほぼ同じ列だが異なるデータ) が含まれるためです。
ダッシュボード ビルダーでダッシュボードを構築したことと、それを完全にスクリプト化したことがないことを除けば、ダッシュボードに関する経験はそれほど多くありません。
ありがとう
アプリケーション/ダッシュボード ビルダーを使用していますか、それとも JSL のみを使用していますか?
最終的にはすべてJSLで行いたいと思っています。しかし、現時点ではテーブルをインポートして再フォーマットするためにJSLを使用していましたが、アプリケーションのコードを作成するためにアプリケーション/ダッシュボードビルダーを使用していました。
スクリプトの JSL 部分を提供して、どの部分に問題があるかをマークまたは説明できますか? パスはどこから取得していますか? スクリプトを実行する前に、ユーザーはテーブルを開いている必要がありますか (現在のデータ テーブル () の使用は必須ですか)? また、ワークフロー ビルダーでこれを試しましたか?
dt1 = Open( "XXXXX.csv" );
If( Not( Is Scriptable( dt1 ) ),
dt1 = Open( "XXXXX.csv" ),);
Wait( 2 );
dt2=Data Table( dt1 ) << Subset(
Rows(
Data Table( dt1 ) <<
Select Where (
:X == "1" & :"Y"n == "2" &
:Z == "3)), All Columns);
Wait( 2 );
dt3 = Open( "YYYY.csv" );
If( Not( Is Scriptable( dt3 ) ),
dt3 = Open( "YYYY.csv" ),);
dt2 << Set Name("MainDataTable");
dt3 << Set Name("SpecTable");<BR />::saveloc_dt2 = Concat Items( {new_folder, "\MainDataTable",".csv"}, "" );<BR />dt2 << Save(saveloc_dt2);<BR />::saveloc_dt3 = Concat Items( {new_folder, "\SpecTable",".csv"}, "" );<BR />dt3 << Save(saveloc_dt3);
Current Data Table( dt2 );
cc = Control Chart Builder(Show Control Panel(0),Show Capability(0),Size(700,450),Show Excluded Region( 0 ),
Variables( Y( :X ) ),
Local Data Filter(
Add Filter(
columns( :Z),
Display( :A, Find( Set Text( "" ) ) ))),
Chart( Position( 1 ), Limits( Shade Zones( 0 ) ) )););
Current Data Table( dt2 );
process_screening = Process Screening(
Process Variables(
:A, :B, :C,
Grouping( :Y ),Control Chart Type( "Indiv and MR" ),Within Sigma( 0 ),Overall Sigma( 0 ),Stability Index( 0 ),Show Tests( 0 ),Out of Spec Count( 1 ),Out of Spec Rate( 1 ),
Latest Out of Spec( 0 ),N Subgroups (0 ),Ppk( 1 ),Cp( 1 ),Cpk(1),Cpm(1),Spec Limits( 1 ),
Use Limits Table(
1,
Data Table( "SpecTable" ),
Process Variables( :Process ),
Grouping( :Z ),
LSL( :LSL ),
USL( :USL ),
Target( :Target ),
Go
),
Goal Plot( 0, Capability Lines( 1.33 ), Shade Levels( 0 ) ),
Process Performance Graph( 0 ));
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable2 = GuiTable(
Set Path( saveloc_dt2 ),
Set Label( "MainDataTable" ),
Location( "Full Path" ),
Invisible( 0 )
),
DataTable3 = GuiTable(
Set Path( saveloc_dt3 ),
Set Label( "SpecTable" ),
Location( "Full Path" ),
Invisible( 1 ))),<BR />. . . . この方法なら、アプリケーションでフォーマットして保存したばかりのデータテーブルを参照できると思いましたが、代わりに、使用するテーブルを選択するように求めるウィンドウが表示されます。これは避けたい部分です。
他の選択肢としては、必要なレポートを作成し、ウィンドウの結合機能を使用してそれらをダッシュボード タイプのウィンドウに配置し、適切な間隔などを確保することだと思います。
スクリプトの最初の部分を整理しました。スクリプトの作成とJSLの記述に関するアイデアが少しでも伝われば幸いです。
Names Default To Here(1);
new_folder = "MYFOLDER";
// Checking for scriptable should be unnecessary
dt1 = Open("XXXXX.csv");
// Datatable(dt1) is unnecessary in 99% of cases
// Use << Get Rows Where instead of Select Where with Rows() in subset
// Use output table() to make debugging much easier
dt2 = dt1 << Subset(Rows(dt1 << Get Rows Where(:X == "1" & :"Y"n == "2" & :Z == "3")), Selected Columns(0), Output Table("MainDataTable"));
dt3 = Open("YYYY.csv");
dt3 << Set Name("SpecTable");
// simpler in this case
saveloc_dt2 = new_folder || "\MainDataTable.csv";
dt2 << Save(saveloc_dt2);
saveloc_dt3 = new_folder || "\SpecTable.csv";
dt3 << Save(saveloc_dt3);
// You can send messages directly to data table, do not use current data table() if possible
cc_expr = Expr(dt2 << Control Chart Builder(
Show Control Panel(0),
Show Capability(0),
Size(700, 450),
Show Excluded Region(0),
Variables(Y(:X)),
Local Data Filter(Add Filter(columns(:Z), Display(:A, Find(Set Text(""))))),
Chart(Position(1), Limits(Shade Zones(0)))
));
ps_expr = Expr(dt2 << Process Screening(
Process Variables(
:A,
:B,
:C,
Grouping(:Y),
Control Chart Type("Indiv and MR"),
Within Sigma(0),
Overall Sigma(0),
Stability Index(0),
Show Tests(0),
Out of Spec Count(1),
Out of Spec Rate(1),
Latest Out of Spec(0),
N Subgroups(0),
Ppk(1),
Cp(1),
Cpk(1),
Cpm(1),
Spec Limits(1),
Use Limits Table(1, Data Table("SpecTable"), Process Variables(:Process), Grouping(:Z), LSL(:LSL), USL(:USL), Target(:Target), Go),
Goal Plot(0, Capability Lines(1.33), Shade Levels(0)),
Process Performance Graph(0)
)
));
nw = New Window("My report",
V List Box(
cc = cc_expr,
ps = ps_expr
)
);
レポートを作成するための 1 つのオプションは、プラットフォーム呼び出しを Expr() でラップし、新しいウィンドウ内でそれらの式を呼び出すことです。式をスキップして、プラットフォーム呼び出しのみでウィンドウを作成することもできます (または他のいくつかの方法を使用することもできます)。
nw = New Window("My report",
V List Box(
cc = dt2 << Control Chart Builder(
Show Control Panel(0),
Show Capability(0),
Size(700, 450),
Show Excluded Region(0),
Variables(Y(:X)),
Local Data Filter(Add Filter(columns(:Z), Display(:A, Find(Set Text(""))))),
Chart(Position(1), Limits(Shade Zones(0)))
),
ps = dt2 << Process Screening(
Process Variables(
:A,
:B,
:C,
Grouping(:Y),
Control Chart Type("Indiv and MR"),
Within Sigma(0),
Overall Sigma(0),
Stability Index(0),
Show Tests(0),
Out of Spec Count(1),
Out of Spec Rate(1),
Latest Out of Spec(0),
N Subgroups(0),
Ppk(1),
Cp(1),
Cpk(1),
Cpm(1),
Spec Limits(1),
Use Limits Table(1, Data Table("SpecTable"), Process Variables(:Process), Grouping(:Z), LSL(:LSL), USL(:USL), Target(:Target), Go),
Goal Plot(0, Capability Lines(1.33), Shade Levels(0)),
Process Performance Graph(0)
)
)
)
);
JMP ヘルプのスクリプト ガイドを確認することをお勧めします。すべてを読む必要はありませんが、あちこちを覗いて、何が含まれているかを確認してください。