Errore: impossibile trovare la colonna corrente nella piattaformaRicevo uno strano messaggio di errore quando si combinano un commutatore di colonne, un filtro dati e una funzione di gestione dello stato delle righe.
Lo script allegato fornisce un esempio semplificato (mi scuso che sia ancora piuttosto lungo). In sintesi, la sceneggiatura:
- Utilizza una tabella dati che include colonne con limiti di specifiche (sto utilizzando "Semiconductor Capability" come esempio)
- Crea una tabella del report di riepilogo delle capacità del processo
- Aggiunge alla tabella un output di distribuzione e un commutatore di colonne
- Riordina la tabella e collega il commutatore di colonne alla distribuzione
- Crea una funzione di modifica riga per monitorare gli aggiornamenti alla tabella Capacità processo
- Quando l'utente seleziona una riga nella tabella, il nome della colonna del parametro viene acquisito e passato al commutatore di colonne, che modifica le piattaforme di distribuzione.
Funziona bene finché la tabella dei dati di origine non viene filtrata con le righe indesiderate nascoste ed escluse. La tabella delle capacità del processo si aggiorna correttamente, ma se seleziono un nuovo parametro dalla tabella, viene visualizzato questo messaggio due volte (o più volte):

La piattaforma di distribuzione alla fine si aggiorna. Tuttavia, se l'utente esegue ulteriori filtri, alla fine ottengo il seguente errore:

Quando ottengo questo, il gestore dello stato della riga appare completamente dissociato dalla tabella.
Sarei grato se qualcuno potesse suggerire una soluzione o un modo migliore di fare quello che sto facendo!
Sto utilizzando JMP 17.2 su MacOS.
Esplorazione e visualizzazione dei datiRi: Errore: impossibile trovare la colonna corrente nella piattaformaHo apportato alcune piccole modifiche *) - devo verificare cosa ha effettivamente risolto il problema - vero?
- utilizzare il commutatore di colonne del rapporto Distribuzione e ottenere un controllo tramite il livello del rapporto
- definire setUpTableSelect come funzione con 1 argomento, in modo tale da poter essere utilizzata direttamente come chiamata di funzione da crea il gestore dello stato della riga
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>
Ri: Errore: impossibile trovare la colonna corrente nella piattaformaCIAO @matth1 ,
Non sono del tutto sicuro del motivo per cui funzioni, ma ho anche apportato alcune lievi modifiche al tuo codice e spostato la chiamata alla piattaforma di collegamento all'esterno della chiamata setUpTableSelect e all'interno di Epxr() contenente la nuova finestra (ma non all'interno della chiamata alla nuova finestra) . Sembra che questo applichi correttamente il filtro dati quando si passa da un lotto all'altro ed evita gli errori.
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>Spero che questo ti aiuti!,
DS
Ri: Errore: impossibile trovare la colonna corrente nella piattaformaLa spiegazione:
Se
cs << link platform( dist1 );
è parte di setUpTableSelect verrà eseguito ad ogni aggiornamento della tabella.
Ma è impostato così :NPN1 verrà sostituito da una qualsiasi delle altre colonne. Funziona solo se :NPN1 viene utilizzato nella piattaforma di distribuzione in questo preciso momento. In caso contrario, verrà visualizzato un messaggio di errore.
Ri: Errore: impossibile trovare la colonna corrente nella piattaformaGrazie ad entrambi @hogi E @SDF1 ! Questo ha aiutato. Non pensavo di considerare che più ripetizioni del comando link platform avrebbero causato problemi.