Raccogli un difetto utilizzando un elenco di prioritàHo allegato la tabella 1 composta da 3 colonne di input (codice articolo, resa e difetti) e 1 colonna di output (contenitore). Ho anche allegato un'altra tabella_priorità che indica la gerarchia dei difetti con le crepe come più importanti.
Come posso generare la colonna di output Bin, utilizzando lo scripting JMP in cui, se un codice articolo presenta alcuni difetti, inserire il difetto più importante nella colonna Bin per tutte le righe relative a quel codice articolo? Inoltre, se la resa è inferiore al 60% e il difetto non è nella priorità_tabella, inserirlo in "meno del 60%"?
Di seguito sono riportati i difetti, tra le altre parole. La colonna Difetti viene digitata dagli operatori.

Modellazione statistica avanzataAutomazione e scriptingAccesso ai datiPersonalizzazione di massaIngegneria della qualità e dei processiRe: Associare un difetto utilizzando un elenco di prioritàCapito grazie!
Re: Associare un difetto utilizzando un elenco di prioritàRicevi un messaggio di errore abbastanza utile
Query failed: near "when": syntax error in access or evaluation of 'Query'
Il problema è con questa riga qui:
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
CASO SQLite
Puoi concatenare istruzioni con quando sembra che ci sia altro in più rispetto a "Difetto non valido" altrimenti quando
Ri: Raccogli un difetto utilizzando un elenco di prioritàCiao Jarmo,
Grazie per il codice. Voglio cambiare i criteri e il codice per assicurarmi di aver capito. Se voglio cambiare:
La massima priorità è
1) Eventuali parti non presenti nell'elenco prioritario vengono spostate in un contenitore denominato "Difetti non validi"
2) eventuali parti sono <60%, spostarle in un contenitore denominato "<60% parti"
3) Confronta l'elenco delle priorità
Ho cambiato il codice come di seguito ma ho riscontrato un errore di sintassi:
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");Ri: Raccogli un difetto utilizzando un elenco di prioritàPuoi forse modificare il join in SQL per utilizzare i caratteri jolly:
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
Poiché il testo viene inserito manualmente dagli operatori, ci saranno errori di battitura e questo non potrà rilevarli. Per qualcosa del genere, molto probabilmente dovrai iniziare a fare una sorta di calcolo della distanza tra le stringhe (un esempio: Levenshtein distance ). In JMP è anche possibile utilizzare lo script di modifica più breve per il calcolo della "distanza".
Anche Text Explorer potrebbe essere in grado di aiutarti, ma non ho familiarità con quella piattaforma
Ri: Raccogli un difetto utilizzando un elenco di prioritàGrazie Jarmo,
Ho aggiornato la mia domanda e Table1.jmp. La colonna Difetti viene digitata manualmente dagli operatori e le parole relative ai difetti come crepe, traverse, ecc. sono presenti in ciascuna stringa.
Grazie.
Re: Associare un difetto utilizzando un elenco di prioritàNon posso essere sicuro al 100% di come desideri eseguire la corrispondenza, ma posso immaginare che corrisponderai alla corrispondenza in Difetti (ultima parola) in base ai valori del contenitore. Esistono molti modi per risolvere questo problema, ecco due possibili idee:
Ecco una soluzione un po' più interattiva:
- Crea una nuova colonna nella Tabella1 con solo l'ultima parola della colonna Difetti
- Unisci Table1 con priorità_tabella utilizzando la nuova colonna da Tabella1 e Bin da priorità_tabella
- Utilizzare la formula Col Min per ottenere la massima priorità per il codice articolo (cambiare prima la priorità in numerica)
- Da qui puoi unirti nuovamente alla tabella delle priorità con la nuova colonna formula e la priorità dalla tabella_priorità per ottenere il contenitore finale (ad eccezione di quelli mancanti)
- Crea la formula finale per calcolare il valore mancante

Dovresti ottenere tutti gli script richiesti per questi passaggi da JMP (script di tabelle (e registro avanzato se si utilizza JMP16))
Oppure, se hai familiarità con SQL, potresti provare a usarlo direttamente. Di seguito è riportata una sorta di query:
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
ON SUBSTR(t1.Defects, LOCATE(" ", t1.defects) + 1) = p.Bin
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
