Erreur : la colonne actuelle est introuvable dans la plateformeJe reçois un étrange message d'erreur lors de la combinaison d'un sélecteur de colonnes, d'un filtre de données et d'une fonction de gestionnaire d'état de ligne.
Le script ci-joint donne un exemple simplifié (désolé, c'est encore assez long). En résumé, le scénario :
- Utilise un tableau de données qui comprend des colonnes avec des limites de spécifications (j'utilise « Capacité des semi-conducteurs » comme exemple)
- Crée un tableau de rapport récapitulatif des capacités de processus
- Ajoute au tableau une sortie de distribution et un sélecteur de colonnes
- Range le tableau et relie le sélecteur de colonnes à la distribution
- Crée une fonction de changement de ligne pour surveiller les mises à jour de la table Capacité de processus
- Lorsque l'utilisateur sélectionne une ligne dans le tableau, le nom de la colonne du paramètre est capturé et transmis au sélecteur de colonnes, qui modifie les plates-formes de distribution.
Cela fonctionne bien, jusqu'à ce que la table de données source soit filtrée avec les lignes indésirables masquées et exclues. Le tableau des capacités du processus se met à jour correctement, mais si je sélectionne ensuite un nouveau paramètre dans le tableau, ce message apparaît deux fois (ou plusieurs fois) :

La plateforme de distribution finit par être mise à jour. Cependant, si l'utilisateur effectue un filtrage supplémentaire, j'obtiens finalement l'erreur suivante :

Lorsque j'obtiens cela, le gestionnaire d'état de ligne apparaît complètement dissocié de la table.
Je serais reconnaissant si quelqu'un pouvait suggérer une solution ou une meilleure façon de faire ce que je fais !
J'utilise JMP 17.2 sur MacOS.
Exploration et visualisation des donnéesRe : Erreur : la colonne actuelle est introuvable dans la plateformeJ'ai apporté quelques modifications mineures *) - je dois vérifier ce qui a réellement résolu le problème - l'avez-vous fait ?
- utilisez le sélecteur de colonnes du rapport de distribution et obtenez une poignée via la couche de rapport
- définir setUpTableSelect en tant que fonction avec 1 argument, de sorte qu'elle puisse être directement utilisée comme appel de fonction depuis créer un gestionnaire d'état de ligne
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 : Erreur : la colonne actuelle est introuvable dans la plateformeSalut @matth1 ,
Je ne sais pas vraiment pourquoi cela fonctionne, mais j'ai également apporté quelques légères modifications à votre code et déplacé l'appel de la plateforme de liens en dehors de l'appel setUpTableSelect et dans le Epxr() contenant la nouvelle fenêtre (mais pas à l'intérieur du nouvel appel de fenêtre) . Cela semble appliquer correctement le filtre de données lors du basculement entre les lots et évite les erreurs.
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>J'espère que cela t'aides!,
DS
Re : Erreur : la colonne actuelle est introuvable dans la plateformeL'explication:
Si
cs << link platform( dist1 );
fait partie de setUpTableSelect il sera exécuté à chaque mise à jour de la table.
Mais c'est organisé de telle sorte que :NPN1 sera remplacé par l’une des autres colonnes. Cela ne fonctionne que si :NPN1 est utilisé dans la plateforme de distribution à ce moment précis. Sinon, vous verrez un message d'erreur.
Re : Erreur : la colonne actuelle est introuvable dans la plateformeMerci à vous deux @hogi et @SDF1 ! Cela a aidé. Je n'ai pas pensé à considérer que plusieurs répétitions de la commande link platform poseraient des problèmes.