Tablas de datos para aplicaciones y paneles de controlHola a todos,
Quiero crear un código para una aplicación o un panel de control. La primera parte de mi código importa algunas tablas, realiza algunos filtros y formatos y, luego, crea algunos gráficos e informes.
Después de esto, me gustaría tener un código general para crear una aplicación/panel de control para mostrar los informes que hice anteriormente utilizando las tablas de datos ya existentes (después del filtrado y el formato). No he podido resolver esto mediante scripts sin que se me solicite que seleccione las tablas de datos utilizadas para el análisis o que ya estén incorporadas, pero de manera incorrecta. Básicamente, la tabla de datos 1 usa la designación de la tabla de datos actual y eso está bien, pero la segunda que se necesita se incorpora, pero esencialmente se establece de manera predeterminada en la tabla sin formato y sin filtro, aunque como variable, la formateada se sobrescribe en la original.
También intenté guardar mis tablas formateadas y luego usar las rutas completas (variables globales) para recuperarlas, pero aún así me piden que seleccione las tablas que quiero para compilar la aplicación cuando intento ejecutar el código.
En general, estoy tratando de hacer esto lo más general posible y programarlo, ya que cada vez que se ejecuta, las tablas de datos utilizadas tendrán datos diferentes (las mismas o casi mismas columnas, pero datos diferentes).
No tengo mucha experiencia con paneles de control, salvo por haberlos creado en el generador de paneles de control y no haberlo escrito completamente.
Gracias
Automatización y scriptingVentanasRe: Tablas de datos para aplicaciones y paneles de control¿Estás utilizando Application/Dashboard Builder o solo JSL?
Re: Tablas de datos para aplicaciones y paneles de controlPreferiría hacerlo usando JSL para todo. Sin embargo, ahora mismo estaba usando JSL para importar mis tablas y reformatearlas, pero para crear parte del código para la aplicación estaba usando el generador de aplicaciones/paneles.
Re: Tablas de datos para aplicaciones y paneles de control¿Puedes proporcionar la parte JSL del script y marcar o explicar con qué partes tienes problemas? ¿De dónde obtienes las rutas? ¿El usuario tiene una tabla abierta antes de ejecutar el script (es obligatorio usar la tabla de datos actual)? Además, ¿has intentado hacer esto con el generador de flujo de trabajo?
Re: Tablas de datos para aplicaciones y paneles de control
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 />. . . . Pensé que de esta manera podría hacer referencia a las tablas de datos que acabo de formatear (y guardar) en la aplicación, pero en lugar de eso aparece una ventana que me solicita que seleccione las tablas que quiero usar. Esa es la parte que deseo evitar.
Supongo que la otra opción es simplemente hacer los informes que quiero y usar la función Combinar ventanas para colocarlos en una ventana tipo tablero y luego intentar obtener el espaciado correcto, etc.
Re: Tablas de datos para aplicaciones y paneles de controlHice algo de limpieza en la primera parte del script y espero que te brinde algunas ideas sobre scripting y escritura de 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
)
);
Una opción para crear informes es envolver las llamadas a la plataforma con Expr() y luego llamar a esas expresiones dentro de una nueva ventana. También puede omitir expresiones y simplemente crear la ventana con llamadas a la plataforma (o usar algunos otros métodos)
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)
)
)
)
);
Te sugiero que consultes la Guía de programación de scripts de la Ayuda de JMP . No es necesario que leas todo, pero echa un vistazo aquí y allá para ver qué contiene.
Re: Tablas de datos para aplicaciones y paneles de controlMuchas gracias. Voy a echarles un vistazo.