Klassifizieren Sie einen Fehler anhand einer PrioritätenlisteIch habe Tabelle 1 angehängt, die aus drei Eingabespalten (Teilenummer, Ausbeute und Mängel) und einer Ausgabespalte (Behälter) besteht. Ich habe auch eine weitere Prioritätstabelle beigefügt, in der die Hierarchie der Mängel aufgeführt ist, wobei Risse am wichtigsten sind.
Wie erstelle ich mithilfe von JMP-Skripting die Ausgabespalte „Bin“, bei der, wenn eine Teilenummer einige Fehler aufweist, der wichtigste Fehler in die Spalte „Bin“ für alle Zeilen eingefügt wird, die diese Teilenummer betreffen? Auch wenn die Ausbeute weniger als 60 % beträgt und der Fehler nicht in der Prioritätstabelle enthalten ist, dann in „weniger als 60 %“ einsortieren?
Nachfolgend sind unter anderem Mängel aufgeführt. Die Spalte „Fehler“ wird von den Bedienern eingegeben.

Erweiterte statistische ModellierungAutomatisierung und SkripterstellungDatenzugriffMassenanpassungQualitäts- und VerfahrenstechnikBetreff: Einen Fehler anhand einer Prioritätenliste einordnenDanke, verstanden!
Betreff: Einen Fehler anhand einer Prioritätenliste einordnenSie erhalten eine recht hilfreiche Fehlermeldung
Query failed: near "when": syntax error in access or evaluation of 'Query'
Das Problem liegt in dieser Zeile hier:
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
SQLite-FALL
Sie können Anweisungen mit verketten Wenn scheinen also extra zu haben anders Dort dann „Ungültiger Mangel“ anders Wenn
Betreff: Einen Fehler anhand einer Prioritätenliste einordnenHallo Jarmo,
Danke für den Code. Ich möchte die Kriterien und den Code ändern, um sicherzustellen, dass ich es verstehe. Wenn ich ändern möchte:
Oberste Priorität hat
1) Alle Teile, die nicht in der Prioritätenliste enthalten sind, werden in einen Behälter namens „Ungültige Mängel“ verschoben.
2) Alle Teile sind <60 %, verschieben Sie sie in einen Behälter mit der Bezeichnung „<60 % Teile“.
3) Vergleichen Sie die Prioritätenliste
Ich habe den Code wie folgt geändert, hatte aber einen Syntaxfehler:
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");Betreff: Einen Fehler anhand einer Prioritätenliste einordnenMöglicherweise können Sie den Join in SQL so ändern, dass Platzhalter verwendet werden:
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");
Da der Text von den Bedienern manuell eingegeben wird, kann es zu Tippfehlern kommen, die dadurch nicht erfasst werden können. Für so etwas müssen Sie höchstwahrscheinlich mit einer Art Abstandsberechnung zwischen Saiten beginnen (ein Beispiel: Levenshtein-Distanz ). In JMP können Sie auch das Shortest Edit Script zur Berechnung der „Entfernung“ verwenden.
Text Explorer kann Ihnen möglicherweise auch helfen, aber ich bin mit dieser Plattform nicht vertraut
Betreff: Einen Fehler anhand einer Prioritätenliste einordnenDanke Jarmo,
Ich habe meine Frage und Table1.jmp aktualisiert. Die Spalte „Fehler“ wird von Bedienern manuell eingegeben und die Fehlerwörter wie Risse, Stringer usw. sind in jeder Zeichenfolge enthalten.
Danke.
Betreff: Einen Fehler anhand einer Prioritätenliste einordnenIch kann nicht 100 % sicher sein, wie Sie den Abgleich durchführen möchten, aber ich kann davon ausgehen, dass Sie anhand der Bin-Werte einen Abgleich in „Defekte (letztes Wort)“ durchführen werden. Es gibt viele Möglichkeiten, dieses Problem zu lösen. Hier sind zwei mögliche Ideen:
Hier ist eine etwas interaktivere Lösung:
- Erstellen Sie eine neue Spalte in Tabelle 1 mit nur dem letzten Wort der Spalte „Fehler“.
- Verknüpfen Sie Tabelle1 mit der Prioritätstabelle unter Verwendung der neuen Spalte von Tabelle1 und Bin von der Prioritätstabelle
- Verwenden Sie die Col-Min-Formel, um die höchste Priorität für die Teilenummer zu erhalten (ändern Sie die Priorität zuerst in „numerisch“).
- Von hier aus können Sie die Prioritätstabelle erneut mit der neuen Formelspalte und der Priorität aus der Prioritätstabelle verknüpfen, um die endgültige Bin zu erhalten (mit Ausnahme der fehlenden).
- Erstellen Sie eine endgültige Formel, um den fehlenden Wert zu berechnen

Sie sollten alle für diese Schritte erforderlichen Skripte von JMP erhalten (Tabellenskripte (und erweitertes Protokoll, wenn Sie JMP16 verwenden)).
Wenn Sie mit SQL vertraut sind, können Sie es auch direkt ausprobieren. Nachfolgend finden Sie eine Art Abfrage:
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");
