Ciao,
Ho un datatable con centinaia di migliaia di righe.C'è una colonna ID corsa, una colonna di nomi di dispositivi (29 attualmente di interesse) e una colonna di valori associati.Quindi per ogni corsa ci sono più dispositivi che registrano i dati e voglio creare grafici di corsa per ogni dispositivo con l'ID della corsa come asse x.Tuttavia, ho due problemi che posso risolvere parzialmente individualmente, ma non risolvere insieme.
Innanzitutto, sto usando JMP 13.Ho accesso a JMP 16 ma non è attualmente installato.Ho un sacco di script esistenti che non voglio interrompere passando a un'altra versione di JMP e cosa sto cercando di fare dovrebbe essere facile da fare.
In secondo luogo, l'approccio generale che sto cercando di adottare è il seguente:
- Scorri l'elenco di nomi di dispositivi univoci e genera un diagramma di esecuzione; inserire in ogni singolo controllo della tabella di esecuzione e limiti delle specifiche che sono stati determinati dai dati per ciascun dispositivo (posso inserire i limiti di controllo e delle specifiche nelle carte di controllo abbastanza facilmente)
- Aggrega tutti i grafici in una nuova finestra
Lo script che ho per la rappresentazione grafica è il seguente:
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"
)
)
);Questo crea più finestre di grafici, ognuna con una casella in alto che dice "Where Device == curDev".
Quindi i grafici possono essere tracciati, anche se con un riquadro non necessario e brutto, ma apro 29 finestre di grafici.
Quindi ora devo aggregarli tutti in una finestra e rimuovere la casella "Where Device ==" in alto.
C'è questa risposta sul forum che pensavo potesse essere utile: come rimuovere "Dove" dalla finestra del rapporto del generatore di grafici - Comunità di utenti JMP .In effetti, rimuove la casella in alto se viene generato 29 singoli grafici, quindi:
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);
)Tuttavia, quando provo a fare la stessa cosa descritta nel post del forum collegato, ottengo 1 grafico nella finestra e quindi gli errori di script con "Send Expects Scriptable Object{75240} nell'accesso o nella valutazione di 'Send' , tp[Casella di testo( 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>Perché l'aggiunta del grafico a una casella del pannello si complica con tp << delete nella funzione Build_Chart?
Un altro approccio che ho provato è qualcosa di simile al seguente, in cui ottengo un oggetto report:
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);
);Questo crea la finestra separata con 29 grafici senza la casella "Where == ", ma esso anche genera 29 finestre di grafici separate.cco << Elimina finestra non funziona, poiché cco non è un riferimento a una finestra.io Potevo do a Window() << Elimina finestra, ma non so quali siano i nomi delle finestre e le ipotesi ovvie non funzionano, quindi non posso eliminare le finestre in JSL.
Quindi, quello che mi serve aiuto è il seguente:
- Crea una finestra con tutti i grafici senza la casella "Where :Device == curDev" sopra la finestra del grafico
- Aggrega tutti i grafici in un'unica finestra
- Non genera 29 finestre diverse.
Molte grazie in anticipo per il vostro aiuto.
Credo che tu possa passare alla tua soluzione usando l'opzione Invisibile sul tuo Grafico di controllo e quindi per aggiungere il rapporto a una finestra del diario indipendente.Di seguito è riportata una modifica del codice che illustra un approccio per eseguire questa operazione.Non sono stato in grado di testare lo script, non avendo una tabella di dati di esempio, ma credo che sarai in grado di vedere il mio approccio, che so funzionerà.
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>