Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesBonjour à tous,
Ma version de JMP est 10.0.2. En raison du travail nécessaire, j'ai des centaines de paramètres à analyser et chaque paramètre a plus de 100 points de données. Mon client m'a envoyé un autre fichier comprenant la LSL, la cible et l'USL de ces paramètres dans excel. Par conséquent, je me demande s'il existe un script/outil intégré pour lier les limites de spécification aux paramètres correspondants lorsque je trace le tableau de variabilité (l'axe X doit être le numéro de lot différent et l'axe Y est les données de paramètre). Je veux aussi montrer la boîte à moustaches des données brutes. Actuellement, je fais tout cela manuellement, ce qui me fait perdre beaucoup de temps. Alors s'il vous plaît laissez-moi savoir s'il existe une solution (je suppose que cela devrait être le cas)
Pardonnez-moi de ne pas pouvoir afficher le fichier de données brutes pour des raisons confidentielles. Merci d'avance.
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesMerci Nelson, ce script peut fonctionner sur mon cas. Nous apprécions vraiment votre patience et votre soutien !
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesVos noms de colonne contiennent des caractères que JMP essaiera d'exécuter, plutôt que de les utiliser dans le nom.Par conséquent, j'ai dû ajouter une fonction :Name() pour forcer JMP à interpréter la valeur complète comme un nom.Voir le script ci-dessous.
Remarque : les instructions dt = et dtLimits = ont été modifiées pour rechercher les tables de données déjà ouvertes.Vous devrez peut-être les remplacer par une fonction open().
// Open table to have limits set on
dt = data table("raw data");
dtLimits = data table("Spec limit");
// Get a list of all of the numeric columns in the measurment data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows(colNamesPosition) > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:Name(\!"" || colNames[colNamesPosition[1]] || "\!")" ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);
// Run Variability Charts
Variability Chart( Y( :Name("TWNB_10/10$Vtlin%V"), :Name("TWNB_10/10$Idlin%uA/um") ), X( :wafer ) );Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesJ'ai joint le tableau simplifié des données brutes et le tableau des limites des spécifications. Je pense que l'erreur vient de la règle de nommage de mes paramètres qui contient $. Mais je ne peux pas changer le nom du paramètre. S'il vous plaît aider à vérifier. Vraiment apprécié.
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesLe script que j'ai fourni suppose que les colonnes de la table de données Limits sont nommées
S'agit-il des noms des colonnes de votre tableau de données Limits ?
Vous serait-il possible de joindre une copie de votre tableau de données Limites et de votre tableau de données Mesures.Cela faciliterait le débogage des problèmes.
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesMerci Nelson. J'ai modifié le script et cette fois une autre erreur est apparue disant "l'accès à la table de données délimitée nécessite une colonne ou une variable de table de données". Cela me rend à nouveau confus. Pouvez-vous s'il vous plaît me dire la raison?
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesJe viens de découvrir une erreur dans mon code.Veuillez modifier la ligne dans le code
If( N Rows( ) > 0,
pour
If( N Rows( colNamesPosition ) > 0,
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesLes paramètres de raw data.jmp ne sont que des parties de tous les paramètres de la spécification limits.jmp. Cela pourrait donc être la raison ?
Je suis vraiment nouveau dans JSL, donc, si possible, veuillez me faire savoir si d'autres fonctions peuvent faire des choses similaires en fonction de mon cas. Merci beaucoup pour votre aide.
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesLe problème est que la fonction Loc() ne trouve pas de correspondance dans la liste colNames{}. La fonction requiert une correspondance exacte. Les majuscules/minuscules, l'espacement, etc. peuvent tous causer un problème.Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesBonjour Neslon,
Je pense que je connais le problème, ou du moins la différence entre ma pensée et votre script. Pardonnez-moi je ne l'ai pas décrit clairement avant.
Au début, j'ai créé une nouvelle table de données avec des données brutes collées. Je suppose que c'est la table de données actuelle. Je le définis donc comme dt=current data table(). Ensuite, j'ouvre le fichier Spec limits.jmp enregistré
dtLimits<SPAN class="token operator">=</SPAN><SPAN class="token function">Open</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"$Desktop\JMP\Spec limits.jmp"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Je pense que cela ne peut pas fonctionner sur la base du script que j'ai posté?
Ce que je fais maintenant, c'est d'enregistrer la nouvelle table de données sous le nom raw data.jmp. Ensuite, utilisez le script ci-dessous. Mais toujours aucune limite de spécification n'a été ajoutée aux paramètres.
// Open table to have limits set on
dt = Open( "C:\Users\Desktop\JMP/raw data.jmp" );
// Open spec limit table
dtLimits = Open( "C:\Users\Desktop\JMP/Spec limits.jmp" );
// Get a list of all of the numeric columns in the measurement data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows() > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);J'ai donc essayé de déboguer ce script; il s'avère que L22 affiche une erreur : indice invalide (doit être un nombre ou une liste de nombres). Je ne sais pas pourquoi cela fonctionne dans votre script mais pas dans le mien. Si vous avez des idées s'il vous plaît faites le moi savoir. Merci.
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesLa déclaration:
dt=current data table();
définit la variable "dt" pour qu'elle pointe vers une table de données déjà ouverte.Par conséquent, si ni votre tableau de données de mesures ni votre tableau de limites ne sont ouverts, vous devrez utiliser le
dt=open("<PATH>/data table name");</PATH>
pour ouvrir votre table de données de mesure, pas la fonction "table de données actuelle()".
Vous devez vous assurer que vous comprenez comment le JSL que j'ai fourni dans ma première réponse, plutôt que de simplement le couper et le coller dans votre code.Toutes les fonctions utilisées dans mon exemple sont documentées dans l'index de script, avec des exemples.
Aide==>Index des scripts
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesSalut Nelson,
Merci beaucoup pour votre réponse. Dans votre exemple, vous avez créé deux tables de données, l'une est Big Class.jmp et l'autre est la table des limites de spécification. Cependant, dans mon cas, j'ai déjà ces deux tables de données existaient. Je pense donc qu'il ne me reste plus qu'à lier les deux tables et à faire ce que vous avez fourni dans le script à partir de colNames = dt << get column names (numeric, string ). J'ai essayé ci-dessous:
dt=current data table();
show (dt);
dtLimits=Open( "$Desktop\JMP\Spec limits.jmp" );
puis attaché
colNames = dt << get column names (numeric, string ).
et après.Malheureusement, seul Spec limits.jmp a été ouvert, mais les limites de spécification n'ont pas été ajoutées à la table de données actuelle. Pouvez-vous s'il vous plaît m'aider à dubug? Vraiment apprécié.
Re : Pour ajouter des limites de spécification dans le tableau de variabilité à partir du tableau de donnéesVoici un exemple de script qui lira les valeurs d'une table de données de limites et les appliquera à la table de données de mesure.Et quand le tableau de variabilité ou la plupart des autres tableaux de plate-forme afficheront les limites des spécifications.
// Open table to have limits set on
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Create a limits table for the example
dtLimits = New Table( "Limits",
Add Rows( 2 ),
New Column( "Parameter", Character, "Nominal", Set Values( {"height", "weight"} ) ),
New Column( "LSL", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [52, 60] ) ),
New Column( "Target", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [63, 105] ) ),
New Column( "USL", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [70, 180] ) )
);
// Get a list of all of the numeric columns in the measurment data table
colNames = dt << get column names( numeric, string );
// Loop across the Limits table and apply the findings to data table
For( i = 1, i <= N Rows( dtLimits ), i++,
// If a column in the measurement data table has the same name as the current
// Limits data table column "Parameter" has, then process the data
colNamesPosition = Loc( colNames, dtLimits:Parameter[i] );
If( N Rows() > 0,
Eval(
Substitute(
Expr(
__col__ << set property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
)
),
Expr( __col__ ), Parse( "dt:" || colNames[colNamesPosition[1]] ),
Expr( __LSL__ ), dtLimits:LSL[i],
Expr( __USL__ ), dtLimits:USL[i],
Expr( __Target__ ), dtLimits:Target[i]
)
)
);
);
// Run Variability Charts
Variability Chart( Y( :height, :weight ), X( :sex ) );