Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans une arborescence<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour, je souhaite obtenir des données sur les retombées de différents scénarios de limites de spécifications. Je l'avais déjà fait précédemment dans un autre script parcourant les colonnes, obtenant chaque colonne sous forme de liste. Les données de select_where () étaient au-dessus / en dessous des limites de la spécification, mais je souhaitais cette fois utiliser les informations JMP natives.
La plate-forme de distribution de JMP affichera l'analyse cpk et les retombées lorsque des limites seront présentes. Lorsque j'examine la structure arborescente, les informations sur les retombées apparaissent dans un objet / une liste appelée "numbercolbox (4)". J'ai compris comment récupérer les données de retombées. Je peux renseigner les limites de spécifications et réexécuter la distribution pour chacun de mes ensembles de limites, mais j'aimerais savoir si cette solution est fiable. Par exemple, si quelqu'un d'autre a un ensemble de préférences différent, numbercolbox (4) va-t-il toujours extraire les données de retombées?
Je suppose qu'une alternative à ceci est xpaths, mais je n'ai pas beaucoup d'informations à ce sujet. S'il s'agit d'une solution décente et que quelqu'un possède de la documentation, faites-le moi savoir.
Vous trouverez ci-joint un script qui fait ce que je veux et qui fonctionne pour moi. Vous pouvez l'exécuter et voir de quoi je parle. Il utilise des exemples de données.
Pour voir la structure arborescente sur une sortie JMP (tracé, etc.), agrandissez la fenêtre de manière native, puis ctrl-shift-clic droit dans la zone la plus à droite ou la plus à droite, puis sélectionnez Afficher la structure arborescente. Voir ci-dessous.
Merci,
-Mike

Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceJ'ai changé le code xpath pour le rendre plus simple (du moins pour moi), et cela fonctionne pour ce que j'ai besoin de faire. Cependant, je suis toujours curieux de savoir pourquoi le code que j'ai posté ci-dessus ne fonctionne pas, car la structure / code d'utilisation plus général que vous avez serait vraiment utile.
Merci,
Mike
les noms par défaut ici ( 1 ) ;
testVar = 0 ;
testVar = 1 ; // commente les sorties suivantes
si ( testVar ,
ouvrir ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
myDist = Distribution (
Empiler ( 1 ) ,
Distribution continue (
Colonne ( : NPN1 ) ,
Personnaliser les statistiques récapitulatives (
Moyenne robuste ( 1 ) ,
Std Dev robuste ( 1 )
)
) ,
Distribution continue (
Colonne ( : PNP1 ) ,
Personnaliser les statistiques récapitulatives (
Moyenne robuste ( 1 ) ,
Std Dev robuste ( 1 )
)
) ,
Distribution continue (
Colonne ( : PNP2 ) ,
Personnaliser les statistiques récapitulatives (
Moyenne robuste ( 1 ) ,
Std Dev robuste ( 1 )
)
)
) ;
) ;
reportObj = myDist << xpath ( "// OutlineBox [text () =" Statistiques récapitulatives "]" ) ;
pour ( je = 1 , je <= nitems ( reportObj ) , je ++, spectacle ( reportObj [ je ] << obtenir le titre ) ; ) ;
strList = {} ;
reportObj = myDist << xpath ( "// OutlineBox [text () = 'Statistiques récapitulatives'] // StringColBox" ) ;
// pour (i = 1, i <= nitems (reportObj), i ++, show (reportObj << get); strList = reportObj << get;);
spectacle ( reportObj [ 1 ] << obtenir ) ;
strList = reportObj [ 1 ] << obtenir ;
essayer ( rMnIndx = loc ( strList , "Robust Mean" ) , rMnIndx = - 1 ) ;
essayer ( rStdIndx = loc ( strList , "Écart type robuste" ) , rStdIndx = - 1 ) ;
statList = {} ;
reportObj = myDist << xpath ( "// OutlineBox [text () = 'Statistiques récapitulatives'] // NumberColBox" ) ;
// pour (i = 1, i <= nitems (reportObj), i ++, show (reportObj << get); statList = reportObj << get;);
spectacle ( reportObj [ 1 ] << obtenir ) ;
statList = reportObj [ 1 ] << obtenir ;
si ( rMnIndx > 0 Et rStdIndx > 0 ,
robusteMoy = statList [ rMnIndx ] ;
robustStd = statList [ rStdIndx ] ;
,
robusteMoy = - 999 ;
robustStd = - 999 ;
) ;
spectacle ( robusteMoy , robustStd ) ;
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceSalut philippe
Je me suis finalement mis à vérifier le code xpath et cela me pose problème. J'ai utilisé votre affiche comme référence. Pouvez-vous m'aider à comprendre ce que je fais mal?
De plus, je pense avoir déjà vu cela auparavant, mais je ne me souviens pas ... quel est le ' . ' dans le " list_testSS.Key "nom de variable pour?
Cela ressemble à une structure en C mais je n’ai pas trouvé de documentation jsl dessus. Je n'étais pas sûr qu'il soit correctement configuré dans mon code.
Merci,
Mike
les noms par défaut ici ( 1 ) ;
ouvrir ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
myDist =
Distribution (
Empiler ( 1 ) ,
Distribution continue (
Colonne ( : NPN1 ) ,
Mise en page horizontale ( 1 ) ,
Verticale ( 0 ) ,
Axes à gauche ( 1 ) ,
Personnaliser les statistiques récapitulatives (
Std Err Mean ( 0 ) ,
Intervalle de confiance moyen supérieur ( 0 ) ,
Intervalle de confiance moyen inférieur ( 0 ) ,
N manquant ( 1 ) ,
Intervalle ( 1 ) ,
Moyenne robuste ( 1 ) ,
Std Dev robuste ( 1 )
)
)
) ;
reportObj = myDist << xpath ( "// OutlineBox [text () =" Statistiques récapitulatives "] / ancestor :: OutlineBox [last ()]" ) ;
nom_groupe = reportObj << GetTitle ;
list_testSS.Key = ( reportObj << xpath ( "// * [contient (text (), 'Statistiques récapitulatives')] / following-sibling :: * // StringColBox" )) << Obtenir ;
list_testSS.Val = ( reportObj << xpath ( "// * [contient (text (), 'Statistiques récapitulatives')] / following-frere :: * // NumberColBox" )) << Obtenir ;
list_levelString = ( reportObj << xpath ( "// OutlineBox [text () =" Sigma à long terme "] // StringColBoxHeader [text () =" Capacité "] / .." )) << obtenir ;
list_levelMeans = ( reportObj << xpath ( "// OutlineBox [text () =" Sigma à long terme "] // NumberColBoxHeader [text () =" Index "] / .." )) << obtenir ;
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceUn des avantages évidents de xpath réside dans le fait qu’il existe plusieurs objets displaybox dans une fenêtre de rapport JMP. Par exemple, disons que vous avez fait une analyse et fini
avec 100 Outlineboxes, avec xpath vous pouvez faire:
rpt << xpath ("// OutlineBox")
et une liste de références à TOUTES les boîtes de contour est renvoyée. (où rpt fait référence à la Fenêtre JMP Report)
Avec les scripts displaybox traditionnels, vous devez d’abord connaître le nombre de scripts générés, puis passer de 1 à N en boucle, puis accéder à chaque contour via son index. L'indexation peut être un problème, en particulier si la séquence n'est pas claire (les boîtes de contour imbriquées, par exemple). Cela peut être beaucoup plus d'étapes de codage.
En ce qui concerne la vitesse, il y avait une différence perceptible pour moi avec XPath s'exécutant beaucoup plus rapidement, en particulier avec les grands groupes. Je ne pense pas que cela fasse une différence avec le scénario "unique" que vous décrivez, cependant, une étude de timing formelle devrait être réalisée.
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceMerci, je recherche une telle documentation depuis un moment. Je vais jouer un peu avec elle et voir comment ça se passe. Cela semble simple, mais dépend aussi de la langue, ce qui convient probablement à ce dont j'ai besoin.
Pourquoi xpath est plus efficace que les scripts d'arborescence d'affichage? Est-ce simplement un code plus efficace qui permet de récupérer les informations plus rapidement? Pour les besoins de cette question, supposons qu’il s’agisse d’un seul objet renvoyé, tel qu’un bloc d’image de distribution, et que vous connaissez son nom ou son numéro. Si vous faites cela 100 ou 1000 fois, l’un est-il nettement plus rapide que l’autre? Il semble que le rapport lui-même (avant l'extraction de l'objet) correspond au temps d'exécution.
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceIl y avait une très bonne affiche sur XPath cette année à la conférence.
https://community.jmp.com/docs/DOC-8116
Ils passent en revue quelques exemples concrets avec la structure JMP.
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceMerci! C'est évident pour moi maintenant.
Je vais voir si des utilisateurs utilisent d'autres langues et y mettre des crochets pour toutes les autres langues utilisées. Ce ne sera pas à l'épreuve des balles mais cela devrait convenir à nos besoins. Merci.
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceEn énonçant une évidence, peut-être, mais sachez que si le script doit être exécuté dans plusieurs paramètres régionaux, vous devez être prudent lors de l'indexation des zones d'affichage par leur nom.
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceMerci, le fait que ce nombre (dans mon cas 4) puisse changer correspond à ce à quoi je m'attendais. Votre solution fonctionne parfaitement.
J'ai également des problèmes pour définir les limites supérieures et inférieures des spécifications avec des variables (listes). Lorsque j'utilise une liste codée en dur comme dans l'exemple, cela fonctionne bien, mais je ne peux pas simplement utiliser un simple élément de liste. Je n'utilise probablement pas correctement eval (substitute ()), mais d'après mon expérience, il s'agit de l'une des parties les plus déroutantes de JSL.
Des suggestions sur la façon de résoudre ce problème?
.
| | | mySpecsExpr = expr (sous la forme d'une colonne (yParamNames ) << set property ("Spec Limits", {aaa, bbb})); |
| | | show (eval (dList [1])) , eval (dList [2]) ) // <- ceux-ci évaluent bien dans la fenêtre de journal |
| | | eval (substitute (mySpecsExpr, expr (aaa), eval (dList [1]) , expr (bbb), eval (dList [2]) )); |
Edit: En fait, j’ai été capable de comprendre à partir de cela comment: 46953 - Comment créer des scripts pour les propriétés de colonne à l'aide de variables
Cela marche. Mais si quelqu'un a une réponse plus simple, je l'apprécierais.
| | | | Eval ( |
| | | | | Eval Expr ( |
| | | | | | sous forme de colonne (yParamNames ) << Définir la propriété ( |
| | | | | | | "Limites de spécification", |
| | | | | | | {LSL (Expr (eval (dList [1])) )), USL (Expr (eval (dList [2])) ))} //, Cible (Expr (tLimit)), Afficher les limites (0)} |
| | | | | | ) |
| | | | | ) |
| | | | ) |
Re: Question sur l'obtention des données d'une sortie de tracé en utilisant des objets dans l'arborescenceJe ne sais pas à quel point la numérotation serait robuste pour cette plate-forme ou ce nœud en particulier. Mais en général, la numérotation n'est pas fixe mais peut changer avec la complexité globale du rapport.
Une autre méthode pour adresser une zone d'affichage particulière consiste à utiliser son nom. Les jokers sont aussi supportés. Je pense que les noms sont plus robustes que la numérotation, car ils changent rarement entre les versions JMP alors que la mise en page et défaut Le nombre d'options peut varier selon la version et les préférences.
je n le contexte de votre exemple de script, tous trois lignes ci-dessous donneraient toutes le même résultat:
rapport ( distObj ) [ Nombre Col Box ( 4 )] << obtenir ;
rapport ( distObj ) [ Nombre Col Box ( "% Réel" )] << obtenir ;
rapport ( distObj ) [ Nombre Col Box ( "%?" )] << obtenir ;