Die Siltronic AG zählt zu den weltweit führenden Technologieunternehmen in der Halbleiterwaferindustrie. Für die Herstellung von Siliziumwafern sind zahlreiche Prozessschritte erforderlich, vom Kristallwachstum bis hin zur Verpackung der Wafer.
In einer komplexen Produktionsumgebung werden große Datenmengen generiert, sodass unterschiedliche Details aus verschiedenen Perspektiven relevant sind. Die Daten können in Datenbanken und anderen Ressourcen gespeichert werden, die JMP in der Regel laden kann. Diese Daten passen natürlich nicht in eine einzige Datentabelle. In diesem Vortrag zeige ich, wie eine Stammdatentabelle je nach Kontext um zusätzliche Daten erweitert werden kann. Außerdem gebe ich Beispiele für die Abfrage zusätzlicher Tabellen, die detailliertere Informationen enthalten und mit der Stammdatentabelle verknüpft sind.
Die Stammdatentabelle enthält eine Reihe von Tabellenskripten zur Implementierung der beschriebenen Funktionen. Detaillierte JSL-Codebeispiele zur Realisierung der beschriebenen Funktionalität werden erläutert.
Hallo zusammen! Vielen Dank fürs Zuschauen. Herzlich willkommen zu meiner Präsentation „Data Cockpit: Möglichkeiten zur Erweiterung einer Mastertabelle per Klick mit zusätzlichen Daten“. Zunächst möchte ich Ihnen mein Unternehmen, Siltronic, vorstellen. Wir verfügen über vier hochmoderne Produktionsstandorte, 4.500 Mitarbeiter, globale Reichweite und mehr als 50 Jahre Erfahrung in der Siliziumtechnologie. Wir wurden als Teil von Wacker gegründet und produzierten unseren ersten 200-Millimeter-Wafer 1984 und unseren ersten 300-Millimeter-Wafer 1990. Die Miniaturisierung von Wafern schreitet stetig voran, wie Sie hier anhand der Designregeln sehen können: 11 Nanometer, sieben, acht, fünf, drei und aktuell zwei.
2015 gingen wir als Aktiengesellschaft an die Börse und expandieren aktuell mit unserer neuen Fabrik in Singapur und der Kristallziehhalle in Freiburg. Hier sehen Sie die Wertschöpfungskette der Elektronik und wie der Wert steigt – beginnend mit hochreinem Polysilizium auf Halbleiter-Siliziumwafern. Das ist unser Produktionsschritt in der Halbleiter- und Elektronikfertigung, und der Wert ist mehr als tausendfach. Hier sehen Sie unser internationales Fertigungsnetzwerk. In Deutschland, in Freiburg und Burghausen, befinden sich unsere Kleindurchmesserlinie sowie unsere Anlagen zum Kristallziehen und Wafer-Schneiden. Burghausen ist zudem unser zentrales Forschungs- und Entwicklungszentrum.
Wir betreiben Waferanlagen mit 200 mm Durchmesser in Portland und Singapur. In Singapur verfügen wir außerdem über eine Kristallziehanlage und eine Anlage für 300 mm Wafer. Diese Waferziehanlagen in Singapur gehören zu den modernsten und größten weltweit. Technologische Spitzenposition und höchste Qualität sind uns gleichermaßen wichtig. Aktuell arbeiten wir an Zwei-Nanometer-Strukturen und optimieren parallel über 50 Waferparameter. Zudem gewährleisten wir die Rückverfolgbarkeit jedes einzelnen Wafers. Dadurch fallen große Datenmengen an. Unser Produktionsablauf beginnt mit dem Rohmaterial, hochreinem Silizium, gefolgt vom Kristallziehen nach dem Czochralski-Verfahren oder dem Zonenschmelzverfahren, dem Ingot-Schleifen, dem Mehrdrahtschneiden, dem Kantenverrunden, der Lasermarkierung, dem Läppen, Reinigen und Ätzen, dem Polieren und schließlich der Epitaxie. Zu meiner Person: Ich bin Elektroingenieur und habe in der Simulation elektrothermischer Prozesse promoviert, wie wir sie in unserem Unternehmen durchführen. Ich habe Statistik studiert und bin bei Siltronic Freiburg hauptsächlich für die Entwicklung von Siliziumkristallwachstumsprozessen zuständig. An dieser Stelle möchte ich mich bei meinem Unternehmen bedanken, das mir die Teilnahme am Discovery Summit ermöglicht und mir gleichzeitig erlaubt, meine Arbeit zu verrichten und mit JMP zusammenzuarbeiten, was großartig ist.
Ich bin bei Siltronic für den Support der JMP-Software mit ca. 500 Nutzern zuständig. Nun zur Anwendung „Data Cockpit: Möglichkeiten zur Erweiterung einer Mastertabelle per Klick mit zusätzlichen Daten“. Wir hatten folgendes Problem: Eine Tabelle sollte eine Übersicht über Produkte, Chargen usw. enthalten, ergänzt durch Diagramme zur Bewertung von Leistung und anderen Parametern. Zusätzlich wollten wir Tabellen generieren, die auf Basis des Inhalts und der Auswahl in der Haupttabelle erstellt werden, sowie zusätzliche Spalten mit spezifischen Werten. Außerdem sollten Drilldown-Links für detailliertere Daten verfügbar sein. JMP bietet eine hervorragende grafische Benutzeroberfläche, und die JMP-Datentabelle eignet sich dafür ideal. Zur Lösung dieses Problems nutzten wir zahlreiche Datenbankabfragen, insbesondere das neue SQL-Abfrageobjekt. Wir verwendeten die JMP-Datentabelle für die Übersicht und einen Ereignishandler für Klick-Aktionen. Mithilfe zahlreicher Tabellenskripte starteten wir Plattformen, fügten Spalten hinzu, generierten Detailtabellen oder führten Aktionen mit einem Klick aus. JSL erwies sich als gutes Werkzeug zur Implementierung all dieser Funktionen. Unsere Daten stammen aus firmeneigenen Datenbanken.
In dieser Präsentation simuliere ich dies anhand der Beispieldatentabelle „Anodische Bindung“. Die Cockpit-Übersicht wird in der Realität durch Abfragen verschiedener Tabellen erstellt. Zusätzliche Tabellen werden aus derselben oder anderen Tabellen oder Datenbanken hinzugefügt. Auch andere für JMP verfügbare Datenquellen wie Dateien, Abbildungen und Videos können eingebunden werden. In dieser Präsentation verwende ich jedoch die Tabelle „Anodische Bindung“, da die Datenbankabfrage dem Datenbankzugriff auf Unternehmensdatenbanken sehr ähnlich ist. Diese Datentabelle enthält verschiedene Chargeninformationen, wobei die Charge für jeden Wafer der Wafer-ID entspricht. Für jeden Wafer liegen Datenfunktionen wie die fünf Variablen Ladung, Fluss, Position, Kolbenkraft, Vakuum und Spannung in der hier dargestellten Reihenfolge vor. Außerdem wird jeder Wafer als „gut“ oder „schlecht“ bewertet. So sieht das Cockpit mit Daten und Skripten aus. Es enthält die Wafer-ID, die Bewertung und aggregierte Daten (siehe hier) sowie zahlreiche Tabellenskripte. Hier ist ein Link für die Detailansicht. Die Spalten sind hier aufgeführt, und weitere Spalten sind in den Spaltengruppendetails gruppiert. Darauf gehen wir später ein. Wir haben auch eine Spalte für Diagramme, die vom Typ Ausdruck ist.
So sieht es im Detail aus, und jetzt wechsle ich zu JMP. Hier sehen wir das Cockpit, das momentan leer ist. Hier befindet sich ein Skript, in dem wir die Zusammenfassung meiner Präsentation und den Hintergrund einsehen können. Außerdem stelle ich ein Skript mit Dokumentation zur Verwendung dieser Tabelle bereit. Ich werde das im Detail erklären. Die Skripte sind gruppiert. Wir können die Skriptgruppe öffnen und einfach auf „Cockpit aktualisieren“ klicken, um die Hauptdaten des Cockpits zu erhalten. Sie sehen hier 30 Wafer mit den aggregierten Daten.
Hier ist ein Skript, um die Tabelle zu leeren und sie anschließend neu zu befüllen. Wir können uns die vollständige Datenbank ansehen, was für die eigentliche Anwendung nicht möglich ist. Hier kann ich sie jedoch öffnen. Dies ist eine JMP-Beispieldatentabelle. Sie enthält 122 Zeilen und 2.000 Wafer-IDs. In diesem Diagramm sehen wir die Funktionsdaten der Beispieltabelle für anodisches Bonden, wie Ladung, Fluss usw. Ich habe hier nach interessanten Detaildaten gesucht, um in die Cockpit-Steuerung zu gelangen. Dies könnte die Ladungsposition 43 sein. Man sieht, dass sie hier stark variiert. Oder die Flussposition 40, die hier charakteristisch ist, zusammen mit der Kolbenkraft.
Dort haben wir Position 30 als charakteristische Position, Vakuum, also Position drei. Das könnte interessant sein. Und Spannung, wobei Position 27 interessant ist. Wir haben hier einen Spaltenumschalter, um einfach durch die Variablen zu wechseln. Das ist die Datenbank, die wir verwenden. Ich schließe sie. Hier sind wir wieder im Cockpit und können uns ansehen, wie das funktioniert. Cockpit aktualisieren. Wir bearbeiten das Skript. Wir sehen, dass es recht klein ist und hauptsächlich eine neue SQL-Abfrage verwendet. Wie Sie hier sehen können, aber nicht für eine Datenbank, sondern für eine JMP-Tabelle. Das ist der Hauptunterschied zwischen dem Zugriff auf eine JMP-Tabelle und einer Datenbank. Ich verwende auch benutzerdefiniertes SQL, um die Abfrage zu definieren. Sie können hier sehen, dass ich nur einen Teil der Wafer-IDs gefiltert habe, um im Cockpit übersichtlicher zu arbeiten. Ich habe hier einige aggregierte Daten wie Maximum oder Durchschnitt, wie Sie hier sehen können. Das SQL sieht etwas unübersichtlich aus, da ich die doppelten Anführungszeichen innerhalb der benutzerdefinierten SQL-Zeichenkette maskieren muss.
Später sehen wir eine elegantere Methode. Die Abfrage wird ausgeführt und aktualisiert die Tabelle, das Cockpit. Hier muss ich die JMP-Datentabelle schließen, da JMP diese Tabelle öffnet und nach der Abfrage nicht schließt. Ich lösche hier einige Skripte, die ich während der Abfrage nicht benötige. Es ist ein recht kleines, benutzerfreundliches und wartungsfreundliches Skript. Um die Datentabelle zu leeren, gehe ich wie folgt vor: Ich lösche alle Zeilen, die später benötigte Diagrammspalte, alle Spalten der Spaltengruppe „Details“, die später angezeigt werden, und die Eigenschaft „Wafer-ID“. Führen wir alles aus. Hier sehen wir, wie das Cockpit nun vollständig gefüllt ist. Wir erhalten zusätzliche Detailtabellen mit Diagrammen. Für die Wafer im Cockpit erhalten wir Details zu den Wafer-IDs (30, wie abgefragt) und detaillierte Durchflussdaten. In der Tabelle befindet sich das Skript zum Anzeigen des Diagrammgenerators, um die Detailkurve zu visualisieren. Ich kann es hier schließen. Das Gleiche gilt für die Gebühr.
Hier sehen Sie eine Linkreferenz und hier eine Link-ID. Im Diagramm-Editor kann ich das Bedienfeld anzeigen und diese Detailtabelle verwenden. In dieser Detailtabelle kann ich die Daten der Cockpit-Haupttabelle, wie hier den Zustand, verwenden, als wären sie in derselben Tabelle – einfach durch Verlinkung. Hier habe ich sie als Overlay verwendet, um gute und schlechte Wafer in verschiedenen Farben darzustellen. Genau dafür sind die Links da. Schauen wir uns das Cockpit genauer an. Unter „Diagramme“ sehen wir ein Übersichtsdiagramm, z. B. die maximale Ladung über der Wafer-ID, wieder mit Spaltenauswahl für verschiedene Variablen. Wenn ich mit der Maus über einen Punkt fahre, wird ein Detaildiagramm angezeigt. Das liegt daran, dass ich das Diagramm als Spalte in die Datentabelle eingefügt und diese Spalte als Beschriftung festgelegt habe, wie Sie hier sehen. Deshalb werden die Details hier im Diagramm als Beschriftung angezeigt. Vielleicht können wir hier beurteilen, ob es einen Unterschied im Vakuummittelwert gibt und warum gute und schlechte Wafer unterschiedlich sind.
Oder wir können beispielsweise eine Einweganalyse durchführen. Auch hierzu finden Sie die Details. Wie funktioniert das als Skript? Es ist einfach ein Diagrammgenerator. Ich habe den Diagrammgenerator erstellt, das Skript daraus extrahiert und es wie hier gezeigt in das Tabellenskript eingefügt. Hier könnten wir ein Prädiktor-Screening mit allen aggregierten Werten und den Detailwerten durchführen, wie Sie hier sehen können. Sie können erkennen, welcher Parameter die Bedingung positiv oder negativ beeinflusst. Wie das funktioniert, sehen Sie hier. Es wird einfach nach der Spalte „Detail“ und der Gruppe „Details“ gesucht. Falls diese vorhanden ist, wird das Prädiktor-Screening mit den aggregierten Werten aufgerufen. Ist die Spalte „Gruppe „Details“ vorhanden, wird sie ebenfalls zum Prädiktor-Screening hinzugefügt. Wir haben nun gesehen, was sich im Abschnitt „Diagramme“ befindet. Schauen wir uns weitere Details an. Details zur Wafer-ID. Dies ist nur ein Hinweis: Klicken Sie auf die Wafer-ID, die sich hier befindet. Wenn ich hier klicke, erhalten wir Details zur Wafer-ID 1971 oder 1973.
Es wird einfach eine neue Tabelle erstellt, und diese Tabelle enthält ein Skript, das dieses Diagramm anzeigt.
Wie funktioniert das? Hier kommt ein Ereignishandler zum Einsatz. Unter „Spalteninformationen“ sehen wir den Ereignishandler. Im Ereignishandler stellt JMP bereits den Skripting-Frame bereit. Ich habe ein Skript implementiert, um eine Abfrage zu starten. In dieser Abfrage kann ich die Spalte und die Zeile verwenden, in der wir uns befinden. Es handelt sich um eine Wafer-ID und die Nummer der Wafer-ID, auf die ich zugreifen kann. Hierfür benötige ich die Datenbankverbindung. In diesem SQL-Code sehen wir eine andere Möglichkeit, einen String einzufügen, bei der die benötigten doppelten Anführungszeichen nicht maskiert werden müssen. Das sieht etwas eleganter aus. Mit „Eval Insert“ füge ich den Abfragefilter und die Abfragebedingung in diese Abfrage ein. Ich verwende die ID der aktuellen Spalte, also meine Wafer-ID, füge einen Filter in die Abfrage ein und schließe nach Abschluss die Datentabelle wieder. Anschließend lösche ich einige Skripte und füge das Skript „Gebühr versus Bestellung“ zur Tabelle hinzu. Das ist alles. Klicken Sie hier, um die Tabelle anzuzeigen, und hier, um ein Diagramm zu erhalten. Das könnten wir auch in nur einem Schritt erledigen.
Das brauchen wir nicht mehr. Schauen wir uns das nächste Skript an. Ich deaktiviere alle Spalten und Zeilen. Details zu den ausgewählten Zeilen. Ich muss einige Zeilen auswählen. Ich wähle eins, drei, fünf aus, drücke die Strg-Taste und zeige die Details der ausgewählten Zeilen an. Dadurch erhalte ich die Vakuumkurve für diese drei Wafer-IDs mit dem Zustand „gut“ oder „schlecht“ in verschiedenen Spalten des Diagramms. Ich kann vergleichen. Wie funktioniert das? Wenn ich zum JMP-Startfenster wechsle, sehe ich, dass im Hintergrund die Tabelle „Anodische Bindung“ erstellt wird, aber ausgeblendet ist. Wir sehen nur das Diagramm in diesem Fenster. Ich kann die Tabelle durch Doppelklicken anzeigen. Dann ist sie nicht mehr ausgeblendet. Sehen wir uns an, wie das funktioniert. Es gibt noch eine weitere Funktion: Wenn ich das Diagramm schließe, verschwindet auch die Tabelle. Ich sehe nur noch die Tabelle. Schauen wir uns an, wie das funktioniert. Hier ist zunächst ein Popup-Fenster, wenn nichts ausgewählt ist. Wenn etwas ausgewählt wird, erstelle ich die Wafer-Liste. Es handelt sich um eine Zeichenkette, die eine Liste der Wafer-IDs enthält, und ich verwende die Funktion `substitute`, um die eckige Klammer durch diese Klammern hier zu ersetzen.
Dann verfahre ich genauso mit dieser Liste. Ich erstelle eine neue SQL-Abfrage für die JMP-Datentabelle und füge die Waferliste über Eval Insert als Bedingung hinzu. Nach Abschluss der Abfrage wird der Graph Builder als Skript hinzugefügt und hier ausgeführt. Ich weise das Graph-Builder-Objekt an, beim Schließen die Datentabelle und die Details zur anodischen Bindung zu schließen, ohne Daten zu speichern. Es ist ein kleines Skript mit einer praktischen Funktion zur Darstellung der Kurve der ausgewählten Wafer-IDs. Nach dem Schließen sind alle Daten wieder gelöscht. Soweit die Details.
Jetzt aktualisieren wir die Details. Wie Sie hier sehen, wurden zusätzliche Detailspalten hinzugefügt. Ich habe bereits erläutert, warum diese Punkte relevant sind; sie werden mithilfe dieses Skripts hinzugefügt. Ich leere nun die Tabelle und aktualisiere das Cockpit mit den Hauptdaten. Beginnen wir das Skript mit den Detailspalten. Sie sehen, dass diese Details hier angezeigt werden. Ich zeige Ihnen im Folgenden die Funktionsweise. Zuerst erstelle ich eine Liste der benötigten Spaltennamen, der Namen für die Abfrage und der Filterwerte für die Abfrage.
Ich kompiliere jeden Datensatz in einem assoziativen Array und erstelle eine Liste assoziativer Arrays. Falls die Detailspalten nicht existieren, erstelle ich sie, wie hier zu sehen. Anschließend durchlaufe ich die gesamte Detailliste und erstelle... Im nächsten Schritt erstelle ich die Spaltengruppe „Details“ für alle Detailspalten. Nun folgt die Schleife, die alle Details durchläuft, um die Abfrage für jedes Detail einzufügen, wie hier zu sehen. Mit „Eval Insert“ geben wir den Namen und den für die Abfrage benötigten Wert ein. Anschließend erstellt die Schleife für jede Detailspalte eine Tabelle. Dieses Update fügt die Werte in die Detailspalte ein, wie bereits erwähnt. Am Ende der Schleife muss ich die Detailtabelle natürlich schließen. Sehen wir uns also noch einmal an, wie das funktioniert. Ich leere die Tabelle, aktualisiere das Cockpit und füge Detailspalten hinzu, wie hier zu sehen. Es ist kein besonders großes Skript und meiner Meinung nach recht einfach zu warten, wenn man die Funktionsweise verstehen möchte. Als nächstes füge ich ein Diagramm für den Staubsauger hinzu.
So funktioniert es: Ich klicke darauf, und das Diagramm wird generiert. Dann scrolle ich ein wenig nach rechts. Die Vorgehensweise ist folgende: Zuerst wird die Spalte erstellt, dann wird die Aktualisierung der Datentabelle deaktiviert. Für jede Zeile führen wir wie zuvor eine Abfrage der benötigten Details durch, erstellen anschließend das Diagramm-Builder-Objekt und speichern es als Bild im Spaltendiagramm-Speicher. Zum Schluss schließe ich natürlich den Diagramm-Builder und die Datentabelle. Anschließend passe ich die Zellenhöhe an, um das Diagramm gut sehen zu können. So funktioniert es.
Der nächste Schritt ist die Abfrage der Gebührendetails. Hier befindet sich die zusätzliche Tabelle mit dem Graph-Builder, wie hier zu sehen. Das ist recht einfach. Es wird lediglich die Wafer-Liste gesucht. Anschließend wird die Detailtabelle abgefragt, eine Eigenschaft hinzugefügt, das Skript für den Graph-Builder erstellt und ausgeführt. Zusätzlich generiere ich hier die Link-ID und die Referenz, um sie verwenden zu können. Ich führe die Abfrage erneut aus, um sie für diese Wafer-ID verwenden zu können. Hier findet keine Bewertung statt.
Die Bewertung befindet sich hier nur in der Cockpit-Tabelle, unter bestimmten Bedingungen. Dadurch kann ich sie detailliert grafisch darstellen. Schließen wir sie jetzt wieder. Der Ablauf bleibt gleich. Falls Ihnen beispielsweise die vielen angezeigten Fenster nicht gefallen – und ich lösche die Tabelle deshalb wieder –, können Sie alles in ein Projekt verschieben, wie wir es hier tun können. Wir können ein Projekt der aktuellen Datentabelle, also des Cockpits, erstellen. Wir können… Das brauchen wir nicht mehr. Wir können die Tabelle wie gewohnt verwenden. Wir können die linken Bereiche wie hier schließen, um den Vollbildmodus zu nutzen. Alles funktioniert hier ähnlich. Wir können das Cockpit aktualisieren usw. Wenn wir Details erstellen, z. B. Abfragedetails für Gebühren, werden diese in Registerkarten und nicht in verschiedenen Fenstern angezeigt, wie wir es hier sehen. Meine Präsentation ist beendet. Vielen Dank für Ihre Aufmerksamkeit. Bei Fragen können Sie mich gerne auf dem Discovery Summit, in der Benutzergruppe oder im Scripters Club treffen. Nochmals vielen Dank und einen schönen Tag. Tschüss.