Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoCiao. Sono molto nuovo. Prima di buttarmi nell'apprendimento dello scripting, vorrei avere una conferma del fatto che sto affrontando la cosa correttamente. Vogliamo un modo semplice per creare il seguente semplice report di distribuzione che può essere creato per una colonna selezionata dall'utente, in genere 30 punti dati, che assomiglia all'immagine sottostante e speriamo di rimuovere gli elementi con le linee rosse:

Un esempio di tabella dati è:

Di seguito è riportato lo script creato dal sistema quando ho utilizzato: Salva script/nella tabella dati:
Distribuzione(
Distribuzione continua (
Colonna( :OD ),
Disposizione orizzontale (1),
Istogramma (0),
Verticale( 0 ),
Capacità di processo (
Utilizzare le specifiche delle proprietà della colonna,
Analisi della capacità del processo (non conformità (0))
)
),
Solo istogrammi,
Invia a Segnalazione(
Dispatch( {"OD", "Capacità di processo", "Capacità OD", "Istogramma"}, "1",
Scala Box,
{Min( 2.1388234375 ), Max( 2.1636765625 ), Inc( 0.005 ),
Zecche minori (5)}
)
)
);
Immagino che questo non possa essere fatto senza script. Se non è vero, per favore fatemelo sapere.
Ciò che ho intenzione di fare è cercare di imparare come creare uno script in modo che l'utente possa selezionare la colonna da utilizzare, mentre lo script precedente utilizza solo la colonna "OD". Ciò, si spera, dovrebbe fornire il report di base di cui sopra eseguendo lo script.
Quindi inizia a cercare le modifiche allo script per rimuovere le voci che abbiamo barrato in rosso.
Questo approccio è ingenuo? Esiste un modo migliore per affrontarlo?
Grazie per ogni contributo,
Concessione
Ingegneria della qualità e dei processiRe: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoPer le tabelle delle capacità questo è abbastanza semplice in quanto è possibile utilizzare filtri come
Contains({"Cpk", "Cp"}, Index)
Ma questo non funziona per la casella della tabella sotto Riepilogo processo poiché non ha nomi di colonna... quindi non è possibile utilizzare facilmente i predefiniti, ad esempio.
Quindi utilizza lo scripting. Con lo scripting puoi aggiungere quelle intestazioni alla casella della tabella e poi usarle per filtrare
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
mycol = "NPN1";
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(
Use Column Property Specs,
Process Capability Analysis(Nonconformance(0))
)
)
);
// modify axis
Report(dist)[OutlineBox("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[OutlineBox("Within Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[OutlineBox("Overall Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[OutlineBox("Process Summary"), TableBox(1), StringColBox(1)] << Set Heading("Stat");
Report(dist)[OutlineBox("Process Summary"), TableBox(1), NumberColBox(1)] << Set Heading("Value");
Report(dist)[OutlineBox("Process Summary"), TableBox(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));

Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoGrazie, Jarmo, per aver dedicato del tempo a farlo. Mi dà una grande base da applicare al nostro tavolo. Sono grato per il tuo aiuto.
Ci giocherò un po' e vedrò se riesco a capire se posso fare un prompt utente per la colonna di destinazione, dato che il nome varia, e costruire su quello. Come minimo posso personalizzare lo script per alcuni scenari parziali con la mia conoscenza attuale (limitata). Per i nostri utenti potrebbe essere anche meglio per loro. Comunque, grazie ancora.
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoDopo aver iniziato con JSL, creare una semplice UI per qualcosa del genere è abbastanza semplice (ancora di più se usi Column Dialog(), ma personalmente non mi piace). Questo esempio contiene alcune tecniche più avanzate, ma molto probabilmente farà ciò che vuoi fare. Ci sono alcuni controlli di integrità che potresti voler aggiungere, come il controllo dei limiti delle specifiche, ma qualcosa del genere può servire come punto di partenza
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
Scripting Guide è una buona fonte per iniziare con JSL
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoGrazie Jarmo! Ho iniziato con la Scripting Guide. Probabilmente non sono abbastanza paziente, ma continuo a lavorarci.:)
Potrei chiederti di mostrare un'altra modifica? Penso che mi aiuterà molto. Potresti aggiungere allo script in modo che un grafico della media mobile venga aggiunto sotto le Sigma Capabilities (in pratica in basso)? Ho fatto un esempio qui sotto con l'NPN1 dal file Semiconductor. Mi manca qualcosa nelle didascalie dello script e penso che mi aiuterà a capirlo.

Immagino che storcerete gli occhi poiché questa domanda successiva dimostra fondamentalmente che non capisco bene JMP. Uno script come questo ha più senso come file di script che un utente apre ed esegue o ha più senso salvare questo script nella tabella dati ed eseguirlo da lì? È solo una preferenza o c'è qualche vantaggio?
Se c'è un altro modo per riconoscere il tuo aiuto oltre a un Kudo, per favore fammelo sapere. Il tuo aiuto mi ha risparmiato un sacco di grattacapi.
Grazie ancora,
Concessione
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoÈ possibile creare qualcosa di simile utilizzando Workflow Builder , quindi, a seconda di cosa si intende fare, potrebbe essere una buona idea utilizzarlo (ed è una buona prassi utilizzare JMP).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
vlb = V List Box(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
),
ccb = dt << Control Chart Builder(
Show Two Shewhart Charts(0),
Include Missing Categories(0),
Show Limit Summaries(0),
Show Capability(0),
Variables(Y(Eval(mycol))),
Chart(Points(Statistic("Moving Range")), Limits(Sigma("Moving Range"))),
Show Control Panel(0)
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
nw = new window("",
vlb
);
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
Come usare qualcosa del genere dipende totalmente da te, per me avrebbe forse più senso avere un flusso di lavoro per questo (correggere la distribuzione potrebbe essere un po' difficile senza JSL per il flusso di lavoro) O creare un componente aggiuntivo che l'utente potrebbe eseguire sulla propria tabella quando necessario. Per scopi di componente aggiuntivo, molto probabilmente lascerei che l'utente selezioni più di una colonna o utilizzerei lo switcher di colonna e sarebbe una buona idea implementare alcuni controlli extra (la tabella è aperta, le colonne selezionate hanno limiti di specifiche e così via).
Modifica: valore hard-coded corretto da Control Chart Builder
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoJarmo, grazie. Mi dà una grande base per iniziare a lavorare. Ho modificato quel codice e mi sta davvero aiutando. Vedere quel nuovo codice della finestra mi ha davvero aiutato in qualcosa che mi mancava.
Lavorerò anche su quel Workflow builder. Non l'avevo ancora guardato. In definitiva, da quello che so ora, un Addin sembra la soluzione migliore per il nostro gruppo, una volta che ci sarò arrivato...
Ancora una volta, apprezzo davvero tutto il tuo aiuto e non posso ringraziarti abbastanza,
Concessione
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoHo pensato che fosse più sensato chiedere qui invece di aprire un nuovo argomento...
Ho creato un buon processo e creato un componente aggiuntivo per il nostro gruppo che è in uso. Cercando di saperne di più, sto cercando di aggiungere solo la riga "Total Outside" e solo la colonna "Expected Overall PPM" dalla sezione Nonconformance (sottolineata in rosso nella cattura sottostante):

Riesco a visualizzare la casella, ma non ci sono valori... Di seguito è riportata la sezione dello script (righe 50-52) per questo e una cattura dello schermo:
Report(dist)[Outline Box("Nonconformance"), Table Box(1), String Col Box(1)] << Set Heading("Portion");
Report(dist)[Outline Box("Nonconformance"), Table Box(1), Number Col Box(1)] << Set Heading("Expected Overall PPM");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Expected Overall PPM));
Nota che nella schermata sono state aggiunte anche le colonne "Previsto entro %" e "Previsto complessivo %", che non desidero.

So che mi manca qualcosa di basilare... Ho provato a usare le proprietà degli elementi per confrontare le differenze, ma non vedo nulla in termini di valore. Ho anche provato lo strumento Save Script per vedere se aiuta a dare un indizio, ma usa un comando Dispatch e non riesco a farlo funzionare neanche quello...
Inoltre, è possibile far sì che la sezione "Noncomformance" venga posizionata direttamente sotto "Process Summary" e sopra "Overall Sigma Capability"? Non credo, da quello che ho cercato, ma potrei anche perdermi qualcosa lì.

Grazie,
Concessione
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoPuoi modificare le colonne che vuoi mostrare per prime usando JMP e controllando lo script creato da JMP per vedere SE JMP può catturare ciò che vuoi fare (in questo caso può). Puoi quindi lasciarlo allo script di distribuzione o spostarlo al di fuori di esso.

E nel tuo script potrebbe apparire qualcosa del genere
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Observed %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Within %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall PPM")] << Visibility("Visible");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Portion == "Total Outside");
È anche possibile utilizzare la casella clone per "copiare" la non conformità
ncob = Report(dist)[Outline Box("Nonconformance")];
(Report(dist)["Process Capability","? Capability","Process Summary"] << parent) << Append(
ncob << clone box;
);
(ncob << parent) << Set(0);
</CODE><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1729017828517.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><img src="https://us.v-cdn.net/6038925/uploads/images/69147iBECE0693438ABAB9/jthi_1-1729017828517.png" role="button" title="jthi_1-1729017828517.png" alt="jthi_1-1729017828517.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P>Ma se non hai bisogno delle funzionalità di queste piattaforme JMP, prenderei in considerazione la creazione di report personalizzati da parti diverse. In questo modo puoi controllare più facilmente come apparirà il report e gli utenti non proveranno per sbaglio a usare quelle funzionalità che potrebbero anche non funzionare correttamente.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-805889" slang="en-US" mode="CREATE">Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processo</LINGO-SUB><LINGO-BODY id="lingo-body-805889" slang="en-US" mode="CREATE"><P>Ah! Cercherò di capire il tuo messaggio e di giocarci. Ho visto i flag Visibility nello script Dispatch (sembrano gli stessi che avevi tu), ma non ho capito come combinarli come hai fatto tu.</P><P> </P><P>Cosa ti ha spinto a usare</P><PRE class="language-jsl"><CODE>Filter Where(Portion == "Total Outside");
e non un elenco di chiamata come alcuni degli altri. Ad esempio:
Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat))
Grazie Jarmo!
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoHo usato
Filter Where(Portion == "Total Outside");
ma puoi comunque usare Contains se vuoi (nel tuo script il problema non era contains ma l'utilizzo della colonna errata Expected Overall PPM invece di Portion per effettuare il confronto)
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Portion));
Ho usato equal comparison perché vuoi mostrare solo una riga della tabella. Contains può essere usato per più elementi e quando hai solo un singolo elemento (come in questo caso) non è necessario.
Il motivo per cui l'ho cambiato è più o meno questo:
Potresti pensare "ma importa se funziona?". Fondamentalmente non importa MA quando tu (o almeno quando lo faccio io) inizi a pensare al codice, avrà una certa importanza. Per me sarebbe ovvio che non ci sarà mai più di un singolo elemento in quella tabella (o se ce n'è più di uno, l' idea del filtro deve essere cambiata e ti farà fermare un po').
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoJarmo, grazie per questa eccellente spiegazione.
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoLe domande efficaci sono ciò che innesca i buoni post della community.
Grazie @GM-FPP .
Re: Principiante come approcciare la personalizzazione dell'istogramma, della capacità Sigma e del riepilogo del processoGrazie @hogi, apprezzo il tuo messaggio.