Bonjour,
J'ai un datatable avec des centaines de milliers de lignes.Il y a une colonne d'ID d'exécution, une colonne de noms d'appareils (29 actuellement intéressants) et une colonne de valeurs associées.Ainsi, pour chaque exécution, plusieurs appareils enregistrent des données et je souhaite créer des graphiques d'exécution pour chaque appareil avec l'ID d'exécution comme axe des abscisses.Cependant, j'ai deux problèmes que je peux partiellement résoudre individuellement, mais pas résoudre ensemble.
Tout d'abord, j'utilise JMP 13.J'ai accès à JMP 16 mais pas actuellement installé.J'ai tout un tas de scripts existants que je ne veux pas casser en passant à une autre version de JMP, et ce que je cherche à faire devrait être facile à faire.
Deuxièmement, l'approche générale que j'essaie d'adopter est la suivante :
- Parcourez la liste des noms d'appareils uniques et générez un graphique d'exécution ; alimenter chaque contrôle de graphique de fonctionnement individuel et les limites de spécification qui ont été déterminées à partir des données de chaque appareil (je peux assez facilement intégrer les limites de contrôle et de spécification dans les graphiques de contrôle)
- Agréger tous les graphiques dans une nouvelle fenêtre
Le script que j'ai pour le graphique est le suivant:
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);Cela crée plusieurs fenêtres de graphique, chacune avec une boîte en haut qui indique "Where Device == curDev".
Ainsi, les graphiques peuvent être tracés, bien qu'avec une boîte inutile et laide, mais j'obtiens 29 fenêtres de graphique ouvertes.
Alors maintenant, je dois tous les regrouper dans une fenêtre et supprimer la case supérieure "Where Device ==".
Il y a cette réponse sur les forums qui m'a semblé utile: comment supprimer "Où" de la fenêtre de rapport du générateur de graphiques - JMP User Community .En effet, cela supprime la case en haut si je génère 29 graphiques individuels, ainsi :
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)Cependant, lorsque j'essaie de faire la même chose que celle décrite dans le message du forum lié, j'obtiens 1 graphique dans la fenêtre, puis les erreurs de script avec "Envoyer attend un objet inscriptible{75240} lors de l'accès ou de l'évaluation de 'Envoyer' , tp[Text Box( 1 )] << delete/*###*/"
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>Pourquoi ajouter le graphique à une boîte de panneau se trompe-t-il avec le tp << delete dans la fonction Build_Chart ?
Une autre approche que j'ai essayée est quelque chose comme ce qui suit, où j'obtiens un objet de rapport :
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);Cela crée la fenêtre séparée avec 29 graphiques sans la case "Où == ", mais il aussi génère 29 fenêtres graphiques distinctes.cco << Supprimer la fenêtre ne fonctionne pas, car cco n'est pas une référence à une fenêtre.je pourrait faites une fenêtre() << Supprimer la fenêtre, mais je ne sais pas quels sont les noms de fenêtre, et les suppositions évidentes ne fonctionnent pas, donc je ne peux pas supprimer les fenêtres dans JSL.
Donc, ce que j'ai besoin d'aide est le suivant:
- Créer une fenêtre avec tous les graphiques sans case "Where :Device == curDev" au-dessus de la fenêtre graphique
- Agréger tous les graphiques dans une seule fenêtre
- Ne génère pas 29 fenêtres différentes.
Merci d'avance pour votre aide.