Solución alternativa para la función "actualizar" en el scriptHola comunidad JMP,
Tengo una tabla de datos que depende de otra tabla de datos. Intenté actualizarlo con la función de actualización, pero parece que no hace nada. En cambio, lo que hace este script es abrir una nueva ventana de tabla de datos con el subconjunto seleccionado en lugar de actualizar la tabla actual. ¿Cómo puedo hacer que actualice la tabla de datos actualmente abierta "dt" con el subconjunto de "dtU"? ¡Gracias!
// Open Sample Data
dt = Open("KrF CDU Data table.jmp");
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains("KrF", :Type));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
// Updating with subset
dt << Update(With(dt1),By Matching Columns(name==name),);Re: Solución alternativa para la función "actualizar" en el scriptMatch debe especificar tantas columnas que lo hagan único. Por lo tanto, es posible que necesite una coincidencia mediante varias columnas, por ejemplo: Nombre del experimento ==: Nombre del experimento, : Pila ==: Pila, : Código de oblea ==: Código de oblea, : Receta de metrología ==: Metrología.
Éstas son sólo sugerencias.
Debe elegir qué columnas hacen que cada fila sea única y luego combinarlas en consecuencia.
Re: Solución alternativa para la función "actualizar" en el scriptAsí que hice lo que dijiste y actualicé manualmente la tabla, este es el código asociado.
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
Entonces, apliqué esto directamente a mi código.
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
Sin embargo, en lugar de actualizar todas las filas, simplemente actualiza la primera fila y copia esa fila para todas las filas, como se ilustra a continuación. ¿Necesito hacer un bucle en todas las filas?
Re: Solución alternativa para la función "actualizar" en el scriptEn esta línea de código, "nombre" se refiere al nombre de la columna. No muestra todos los nombres de las columnas, pero ¿definitivamente tiene una columna llamada "nombre" en ambas?
gdt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Update</SPAN><SPAN class="token punctuation">(</SPAN> With<SPAN class="token punctuation">(</SPAN> dt1 <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Match Columns<SPAN class="token punctuation">(</SPAN> dt<SPAN class="token punctuation">:</SPAN>name <SPAN class="token operator">==</SPAN> dt1<SPAN class="token punctuation">:</SPAN>name <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//This is still not runnin</SPAN>
Intente realizar esta operación manualmente desde el menú Tablas->actualizar.Cuando obtenga el resultado que desea, mire el script fuente en la parte superior izquierda (haga clic con el botón derecho en la fuente, haga clic para ver el script) e inspeccione ese código para obtener exactamente lo que desea en su JSL.
Re: Solución alternativa para la función "actualizar" en el scriptAsí que verifiqué todos los tipos de datos para las columnas coincidentes y son iguales: el mismo orden y los mismos tipos de datos. Ninguna de las columnas tiene funciones también. Adjunté los conjuntos de datos como una imagen y mi código actual. Estoy totalmente perdido, por lo que cualquier ayuda es muy apreciada. ¡Gracias a todos!
//Clean up
Clear Log(); Clear Globals(); //Close All(DataTables,"No Save");
// Open Sample Data
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains(:Type,"KrF"));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
// Opening other data table and updating
dt = Open("KrF CDU Data table 1.jmp");
dt << Update( With( dt1 ), Match Columns( dt:name == dt1:name ) ); //This is still not running
dt << Save( "KrF CDU Data table 1.jmp" );
Re: Solución alternativa para la función "actualizar" en el scriptComo no podemos ver las tablas, esto es sólo una suposición de cosas que podemos probar.
- Verifique que el nombre de la columna exista en ambos, ambos tengan el mismo tipo de datos (probablemente carácter) y tipo de modelado (probablemente nominal).
- utilizar :nombre==:nombre o dt:nombre == dt1:nombre
- compruebe si alguna de las columnas en dt tiene funciones, especialmente si las columnas a actualizar tienen funciones. Creo que debes eliminar la función antes de actualizar.
Estas son algunas ideas para solucionar problemas.
Re: Solución alternativa para la función "actualizar" en el scriptNo estoy seguro de si estoy interpretando correctamente lo que intentas hacer aquí, pero aquí está mi interpretación, con algunos datos de muestra.Deberá agregar una columna llamada nombre después del comando stop().Esto funcionó bien para mí.
Editar: Creo que entendí mal algo. ... quiere decir que está intentando actualizar una tabla que está bloqueada porque es dependiente, como un resumen, JMP puede forzar una nueva tabla. No estoy seguro de eso.
Clear Log();
Clear Globals();
//Close All( DataTables, "No Save" );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dtU = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( :age == 12 );
Column( dtU, "age" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
stop();
// run up to here, create an extra column called name in the dt (students.jmp) with some names from dtU (big class), then run next line
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
Re: Solución alternativa para la función "actualizar" en el scriptIntenté el cambio, pero en lugar de actualizar la tabla de datos de KrF (dt), solo abre un nuevo subconjunto y no actualiza la tabla dt. ¿Necesito conectar ambos a un servidor odbc? Ambas tablas todavía están abiertas, por lo que JMP definitivamente ve ambas tablas.Re: Solución alternativa para la función "actualizar" en el scriptintenta cambiar
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
a
dt << Update( With( dt1 ), Match Columns( name== name ) );
Según las líneas comentadas de mi script, mi intento anterior de unirme utilizó el formato anterior y no funcionó cuando cambié para actualizar. La sintaxis es diferente
Re: Solución alternativa para la función "actualizar" en el scriptUps, quería escribir esa línea como
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
Sin embargo, todavía no actualiza dt ("KrF CDU Data table.jmp"). Estoy intentando actualizar la tabla de datos de KrF con datos de la Tabla de exposición (dtU).
Así es como se ve el registro:
Name Unresolved: name in access or evaluation of 'name' , name/*###*/
In the following script, error marked by /*###*/
Clear Log();
Clear Globals();
Close All( DataTables, "No Save" );
dt = Open( "KrF CDU Data table.jmp" );
dtU = Open( "Exposure_Summary_Data.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( Contains( :Type, "KrF" ) );
Column( dtU, "F23" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
dt << Update( With( dt1 ), By Matching Columns( name/*###*/ == name ) );
¿Entonces hay algún tipo de error con la línea de actualización? No estoy seguro, pero eso es lo que informa el registro.
Re: Solución alternativa para la función "actualizar" en el scriptAlgunos de sus JSL parecen incorrectos o extraños:
dtU << Select Where(contains("KrF", :Type)); eso debería ser
dtU << Select Where(contains( :Type, "KrF:));
Además, esta línea dos parece extraña: Columnas seleccionadas (1,: Código de oblea) y
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
No mencionaste qué tabla es dependiente. De forma predeterminada, las tablas de subconjuntos no son dependientes.
¿Qué informa el archivo de registro?