Essayer d'extraire les limites des spécifications des colonnes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'essaie d'extraire les limites des spécifications des colonnes afin de pouvoir les utiliser dans un rapport personnalisé, mais j'obtiens un comportement étrange. Ci-dessous un extrait de ce que je fais :
Effacer les valeurs globales ();
dt = Table de données( "blah" );
cols1 = dt << Obtenir les noms de colonnes (numérique, continu) ;
Pour( jj = 1, jj <= N éléments( cols1 ), jj++,
spec_x = cols1[jj] << Get Property( "Limites des spécifications" );
Imprimer(
Char( jj ) || " : Col est " || Char( cols1[jj] << obtenir le nom ) ||
", LSL est " || Char( spec_x["lsl"] ) ||
", USL est " || Char( spec_x["usl"] )
);
);
L'instruction print n'est pas la véritable utilisation finale, mais elle sert à montrer si j'ai extrait les limites de manière utile !
Maintenant, ce code fonctionne bien pour une petite table de test de 2 colonnes :
"1 : Col est X, LSL est 1, USL est 2"
"2 : Col est Y, LSL est 3, USL est 7"
Ce qui correspond à ce qu'il y a dans mon tableau. Mais pour une table plus grande de 73 colonnes (numériques, continues), pour une raison quelconque, il ne parvient pas à mettre quoi que ce soit dans spec_x, j'obtiens simplement :
"1 : Col est Rc_N+PO (N/.09/280), LSL est ., USL est ."
"2 : Col est Rc_V1 (N/.1/1260), LSL est ., USL est ."
"3 : Col est Rc_V2 (N/.1/1188), LSL est ., USL est ."
"4 : Col est Rc_V3 (N/.1/1188), LSL est ., USL est ."
"5 : Col est Rc_V4 (N/.1/1188), LSL est ., USL est ."
... etc
Il y a définitivement des données limites dans le tableau, j'ai vérifié deux fois ! Alors, y a-t-il une raison pour laquelle cela ne fonctionnerait pas ? La table est ouverte, le script obtient clairement les noms de colonnes, je n'arrive tout simplement pas à lui faire comprendre les limites.
Lorsque je parcoure le script et que j'arrive à spec_x = cols1[jj] << Get Property( "Spec limites" ); le journal montre :
Limites de spécifications (LSL (10), USL (50), cible (30)
mais lorsque j'exécute l'instruction print, elle dit simplement :
"1 : Col est Rc_N+PO (N/.09/280), LSL est ., USL est ."
Toute aide appréciée !
Merci,
Matthieu.
Re : Essayer d'extraire les limites des spécifications des colonnesCela fonctionne maintenant, merci pour votre aide 
Re : Essayer d'extraire les limites des spécifications des colonnesOk, il semble que, selon la façon dont les limites de spécifications ont été créées, <
dt = Nouveau tableau ( "Exemple" ) ;
dt << Nouvelle colonne ( "Aucune limite spécifique" , Numérique , Continu ) ;
dt << Nouvelle colonne ( "Rc_N+PO (N/.09/280)" ,
Numérique ,
Continu ,
Définir la propriété ( "Limites des spécifications" , Limites des spécifications ( LSL ( dix ) , USL ( 50 ) , Cible ( 30 ) ) ) ,
Définir les valeurs ( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt << Nouvelle colonne ( "Test" ,
Numérique ,
Continu ,
Définir la propriété ( "Limites des spécifications" , { LSL ( 1 ) , USL ( 5 ) , Cible ( 3 ) , Afficher les limites ( 0 )} ) ,
Définir les valeurs ( [ 2 , 3 , 4 ] )
) ;
cols1 = dt << Obtenir les noms de colonnes ( numérique , continu ) ;
Pour ( jj = 1 , jj <= N articles ( cols1 ) , jj ++,
Q = cols1 [ jj ] << Obtenir une propriété ( "Limites spécifiques" ) ;
spec_x = Liste d'évaluation ( { Arg ( Q , 1 ) , Arg ( Q , 2 ) , Arg ( Q , 3 )} ) ;
Si ( N rangée ( Lieu ( spec_x , Vide () ) ) ,
Imprimer (
Carboniser ( jj ) || " :Col " || Carboniser ( cols1 [ jj ] << obtenir un nom ) ||
", n'a aucune limite de spécifications"
) ,
Imprimer (
Carboniser ( jj ) || " : Col est " || Carboniser ( cols1 [ jj ] << obtenir un nom ) || ", LSL est "
|| Carboniser ( spec_x [ "LSL" ] ) || ", USL est " || Carboniser ( spec_x [ "USL" ] )
)
) ;
) ;
Re : Essayer d'extraire les limites des spécifications des colonnesMerci à vous deux pour vos réponses, mais pas de chance pour l'instant. Au fait, j'utilise JMP 11.2 64 bits sur Win7.
MS : votre code a bien fonctionné pour moi lors de la création d'une nouvelle table de test, mais pas lors de l'utilisation de ma table.
dkeshock : votre modification n'a pas aidé, mais m'a donné un indicateur utile sur la façon d'extraire facilement les noms de colonnes, merci 
Je pense que j'ai peut-être une cause profonde maintenant, mais je ne sais toujours pas comment la résoudre. J'ai copié une de mes colonnes dans une nouvelle table, puis j'ai créé une nouvelle colonne de test avec des limites saisies manuellement. Le script fonctionne pour la nouvelle colonne de test :
"1 : Col est Rc_N+PO (N/.09/280), LSL est ., USL est ."
"2 : Col est Test, LSL est 1, USL est 5"
J'ai donc regardé les scripts des deux colonnes (volontairement limitées à quelques lignes) :
Nouvelle colonne( "Rc_N+PO (N/.09/280)",
Numérique, Continu, Format( "Meilleur", 10 ),
Définir la propriété ( "Limites de spécification", Limites de spécification ( LSL ( 10 ), USL ( 50 ), Target ( 30 ) ) ),
Définir les valeurs ([18.306, 18.937, 17.979])
)
Nouvelle colonne( "Test",
Numérique, Continu, Format( "Meilleur", 12 ),
Définir la propriété ( "Limites de spécification", {LSL ( 1 ), USL ( 5 ), Target ( 3 ), Afficher les limites ( 0 )} ),
Définir les valeurs ([2, 3, 4])
)
Il semble que le code de la propriété spec limites soit différent. La seule raison pour laquelle je peux penser est que pour mes données réelles, j'ai importé les limites de spécifications d'un tableau de données à l'aide de la plateforme de capacités, alors que pour la colonne de test, je les ai saisies manuellement.
Est-ce que cela pourrait être la source de mon problème ? Existe-t-il un moyen de contourner ce problème ou dois-je saisir les limites des spécifications manuellement (ou avec un script comme celui de MS) ?
Merci,
Matthieu.
Re : Essayer d'extraire les limites des spécifications des colonnesLorsque j'ai testé le sien pour la première fois, il a fonctionné sur le numéro 58 des 81 colonnes que j'avais dans une table existante.J'ai trouvé que les noms de colonnes changeaient de convention dans la variable Cols1 au même moment (les 58 premiers étaient ":ColumnName" et le reste sans le ':'), j'ai donc opté pour l'utilisation des noms de chaîne et cela a bien fonctionné pour moi.
Dans votre exemple ci-dessus, il ne s'exécute pas de mon côté jusqu'à ce que je change les deux "Cols1[jj]" en "Column(cols1[jj])".Y at-il une raison à cela?
Re : Essayer d'extraire les limites des spécifications des colonnesCela devrait fonctionner, et c'est le cas (JMP 11) dans l'exemple ci-dessous, qui est basé sur votre code. Essayez d'insérer des commandes Wait(0) pour tester s'il s'agit d'un problème de performances.
//Créer un exemple de tableau
dt = nouveau tableau ( "exemple" ) ;
Pour ( je = 1 , je <= 100 , je ++,
col = dt << nouvelle colonne ( "test" , numérique , continu ) ;
évaluer ( évalexpr ( col << définir la propriété ( "Limites des spécifications" , { LSL ( expression ( je ) ) , USL ( expression ( je + 2 ) ) , Cible ( expression ( je + 1 ) ) , Afficher les limites ( 0 )})))
) ;
//Limites des spécifications d'impression
cols1 = dt << Obtenir les noms de colonnes ( numérique , continu ) ;
Pour ( jj = 1 , jj <= N articles ( cols1 ) , jj ++,
spec_x = cols1 [ jj ] << Obtenir une propriété ( "Limites spécifiques" ) ;
Imprimer (
Carboniser ( jj ) || " : Col est " || Carboniser ( cols1 [ jj ] << obtenir un nom ) || ", LSL est " || Carboniser ( spec_x [ "lsl" ] ) || ", USL est "
|| Carboniser ( spec_x [ "usl" ] )
) ;
) ;
Re : Essayer d'extraire les limites des spécifications des colonnesEst-ce que celui-ci fonctionne ?
Effacer les valeurs globales () ;
dt = tableau de données ( "blabla" ) ;
cols1 = dt << Obtenir les noms de colonnes ( numérique , continu , "Chaîne" ) ;
Articles = N articles ( cols1 ) ;
Pour ( jj = 1 , jj <= Articles , jj ++,
spec_x = Colonne ( cols1 [ jj ]) << Obtenir une propriété ( "Limites spécifiques" ) ;
Imprimer (
Carboniser ( jj ) || " : Col est " || Carboniser ( cols1 [ jj ] ) ||
", LSL est " || Carboniser ( spec_x [ "lsl" ] ) ||
", USL est " || Carboniser ( spec_x [ "usl" ] )
) ;
) ;
Re : Essayer d'extraire les limites des spécifications des colonnesEn rapport avec cette discussion, voici une petite fonction intéressante que j'ai écrite pour gérer l'extraction des spécifications. Il utilise la gestion des expressions et un tableau associatif pour créer un joli petit dictionnaire qui peut être utilisé plus tard :
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
L'utilisation ressemblerait à ceci :
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);