Error: la columna actual no se pudo encontrar en la plataformaRecibo un mensaje de error extraño al combinar un conmutador de columnas, un filtro de datos y una función de controlador de estado de fila.
El guión adjunto ofrece un ejemplo simplificado (disculpas porque todavía es bastante largo). En resumen, el guión:
- Utiliza una tabla de datos que incluye columnas con límites de especificaciones (estoy usando 'Capacidad de semiconductores' como ejemplo)
- Crea una tabla de Informe resumido de capacidad del proceso
- Añade a la tabla una salida de distribución y un conmutador de columnas.
- Ordena la mesa y vincula el conmutador de columnas a la Distribución
- Crea una función de cambio de fila para monitorear las actualizaciones de la tabla Capacidad del proceso
- Cuando el usuario selecciona una fila en la tabla, el nombre de la columna del parámetro se captura y se pasa al conmutador de columnas, que cambia las plataformas de distribución.
Esto funciona bien, hasta que la tabla de datos de origen se filtra con filas no deseadas ocultas y excluidas. La tabla de capacidad del proceso se actualiza correctamente, pero si luego selecciono un nuevo parámetro de la tabla, aparece este mensaje dos veces (o más veces):

La plataforma de distribución finalmente se actualiza. Sin embargo, si el usuario realiza más filtros, eventualmente aparece el siguiente error:

Cuando recibo esto, el controlador de estado de la fila aparece completamente desasociado de la tabla.
¡Agradecería que alguien pudiera sugerir una solución o una mejor manera de hacer lo que estoy haciendo!
Estoy usando JMP 17.2 en MacOS.
Exploración y visualización de datosRe: Error: la columna actual no se pudo encontrar en la plataformaHice algunos cambios menores *) - tengo que comprobar qué es lo que realmente solucionó el problema - ¿verdad?
- use el selector de columnas del informe de Distribución y obtenga un control a través de la capa del informe
- definir configurarUpTableSelect como una función con 1 argumento, de modo que pueda usarse directamente como llamada de función desde hacer controlador de estado de fila
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt << clear column selection() << clear select();
dt << Data Filter(
Mode( Select( 0 ), Include( 1 ) ),
Add Filter( columns( :lot_id ), Display( :lot_id, N Items( 13 ) ) )
);
colList = {:NPN1, :PNP1, :PNP2, :NPN2, :PNP3};
Eval(
Eval Expr(
win1 = New Window( "Parametric Test Summary Report",
pc = dt << Process Capability(
Process Variables( Expr( colList ) ),
Moving Range Method( Average of Moving Ranges ),
Capability Box Plots( 0 ),
Within Sigma Summary Report( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ),
Automatic Recalc( 1 ),
SendToReport(
Dispatch(
{"Within Sigma Capability Summary Report"},
"",
TableBox,
{Sort By Column( 14, 1 )}
)
)
),
tb = Text Box(
" Parameter distribution will appear below here. Select a row to show distribution for that parameter. \!N",
<<SET wrap=""> 1,
Throw( "Only select a single row" ),
Show( col1 = dt << get selected columns() );
cs << set current( Char( col1[1] ) );
);
dt << clear column selection();
)
);
);
setUpTableSelect(1);
rs = dt << make row state handler( setUpTableSelect );</SET>
Re: Error: la columna actual no se pudo encontrar en la plataformaHola @matth1 ,
No estoy completamente seguro de por qué esto funciona, pero también hice algunas modificaciones leves a su código y moví la llamada de la plataforma de enlace fuera de la llamada setUpTableSelect y dentro del Epxr() que contiene la nueva ventana (pero no dentro de la llamada de la nueva ventana) . Esto parece aplicar correctamente el filtro de datos al cambiar entre lotes y evita errores.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt << clear column selection() << clear select();
dt << Data Filter( Mode( Select( 0 ), Include( 1 ) ), Add Filter( columns( :lot_id ), Display( :lot_id, N Items( 13 ) ) ) );
colList = {:NPN1, :PNP1, :PNP2, :NPN2, :PNP3};
setUpTableSelect = Expr(
pct = Report( pc )[Table Box( 1 )];
pct << set click sort( 1 );
//cs << link platform( dist1 );
Try( pct[Number Col Box( "Cpm" )] << delete( 1 ) );
Wait( 0 );
pct << set height( 250 );
win1 << move window( 0, 0 );
pct << set row change function(
Function( {this},
selRow = this << get selected rows();
If( N Items( selRow ) > 1,
Throw( "Only select a single row" ),
Show( col1 = dt << get selected columns() );
cs << set current( Char( col1[1] ) );
);
dt << clear column selection();
)
);
);
WinExpr = Expr(
win1 = New Window( "Parametric Test Summary Report",
pc = dt << Process Capability(
Process Variables( Eval( colList ) ),
Moving Range Method( Average of Moving Ranges ),
Capability Box Plots( 0 ),
Within Sigma Summary Report( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Process Performance Plot( 0 ),
Automatic Recalc( 1 ),
SendToReport( Dispatch( {"Within Sigma Capability Summary Report"}, "", TableBox, {Sort By Column( 14, 1 )} ) )
),
tb = Text Box(
" Parameter distribution will appear below here. Select a row to show distribution for that parameter. \!N",
<<SET wrap=""></SET>¡Espero que esto ayude!,
DS
Re: Error: la columna actual no se pudo encontrar en la plataformaLa explicación:
Si
cs << link platform( dist1 );
es parte de configurarUpTableSelect se ejecutará con cada actualización de la tabla.
Pero está configurado de tal manera que :NPN1 será reemplazado por cualquiera de las otras columnas. Esto solo funciona si :NPN1 se usa en la plataforma de distribución en este momento exacto. De lo contrario, verá un mensaje de error.
Re: Error: la columna actual no se pudo encontrar en la plataformaGracias a los dos @hogi y @SDF1 ! Eso ha ayudado. No pensé en considerar que las repeticiones múltiples del comando de plataforma de enlace causarían problemas.