Bonjour,
J'ai un datatable avec des centaines de milliers de lignes.Il existe une colonne d'ID d'exécution, une colonne de noms de périphériques (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 x.Cependant, j'ai deux problèmes que je peux partiellement résoudre individuellement, mais pas ensemble.
Tout d'abord, j'utilise JMP 13.J'ai accès à JMP 16 mais je ne suis pas actuellement installé.J'ai tout un tas de scripts existants que je ne veux pas interrompre 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 de périphériques uniques et générez un diagramme d'exécution ; alimenter chaque contrôle de diagramme de séquence individuel et les limites de spécifications qui ont été déterminées à partir des données de chaque appareil (je peux introduire assez facilement les limites de contrôle et de spécifications dans les diagrammes de contrôle)
- Agréger tous les graphiques dans une nouvelle fenêtre
Le script que j'ai pour représenter graphiquement 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 graphiques, chacune avec une case en haut indiquant "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 graphiques 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 lié au forum, j'obtiens 1 graphique dans la fenêtre, puis les erreurs de script s'affichent avec "Send attend un objet scriptable{75240} lors de l'accès ou de l'évaluation de 'Send', 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 l'ajout du 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 ressemble à celle-ci, 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 une fenêtre séparée avec 29 graphiques sans la case "Où == ", mais cela 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 un Window() << Supprimer la fenêtre, mais je ne sais pas quels sont les noms des fenêtres et les suppositions évidentes ne fonctionnent pas, je ne peux donc pas supprimer les fenêtres en JSL.
J'ai donc besoin d'aide pour les points suivants :
- Créez une fenêtre avec tous les graphiques sans la case "Where :Device == curDev" au-dessus de la fenêtre du graphique
- Regroupez tous les graphiques dans une seule fenêtre
- Ne pas générer 29 fenêtres différentes.
Merci d'avance pour votre aide.
Je pense que vous pouvez passer à votre solution en utilisant l'option Invisible sur votre carte de contrôle, puis en annexant le rapport à une fenêtre de journal indépendante.Vous trouverez ci-dessous une modification de votre code illustrant une approche pour ce faire.Je n'ai pas pu tester le script, n'ayant pas d'exemple de table de données, mais je pense que vous pourrez voir mon approche, qui, je le sais, fonctionnera.
Build_Chart = Function({var},
cco = dt << Control Chart(invisible,
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;
);
NW = New Window("Results",<<JOURNAL></JOURNAL>