Analytische Programme benötigen Daten in einer strikten Zeilen- und Spaltenstruktur, wobei Zeilen üblicherweise als unabhängige Beobachtungen behandelt werden. Das Ursache-Wirkungs-Diagramm ordnet Zeilen hierarchisch an, beschrieben durch Eltern-Kind-Beziehungen. Ursprünglich zur Dokumentation von Brainstorming-Ergebnissen im Qualitätsmanagement entwickelt, ist diese Plattform ein leistungsstarkes Werkzeug zur Visualisierung anderer Strukturen.
Generische Datenstrukturen in JSL-Skripten sind assoziative Arrays und Listen. Ihre Elemente können sowohl Werte als auch Listen und assoziative Arrays sein und bieten somit ein Framework zur schnellen und effizienten Verwaltung komplexer Datenstrukturen. JSON-Schnittstellen, die in der Systemkommunikation etabliert sind, stellen ein weiteres Beispiel für hierarchische Datenstrukturen dar. Werden Elemente unterschiedlich verarbeitet und nach der Verarbeitung verschiedene Parameter gemessen, lassen sich die tatsächlichen Kombinationen auf dieselbe Weise dokumentieren.
In dieser Präsentation wird eine JSL-Funktion vorgestellt (und bereitgestellt), die eine Liste oder ein Array durchläuft und den gesamten Inhalt in eine Datentabelle einfügt. Das Ursache-Wirkungs-Diagramm visualisiert den Inhalt. Anwendungsbeispiele verdeutlichen die Vielseitigkeit und Leistungsfähigkeit dieses Konzepts.
Willkommen! Ich lade Sie ein, mir in die Tiefen hierarchischer Strukturen zu folgen. Beginnen wir mit einer Datentabelle. Dies ist das gewünschte Layout: ein vollständiges Raster ohne leere Felder oder fehlende Werte. Doch beim Betrachten dieser Tabelle stellen wir fest, dass für Layout und Wafer-ID doppelte Werte vorhanden sind. Dies deutet auf eine Hierarchie hin.
Fangen wir etwas einfacher an und verwenden JSL, die JMP-Skriptsprache, um Hierarchien und Strukturen zu verstehen. Dies ist eine Liste. Listen stehen in geschweiften Klammern, und ihre Elemente werden über ihre Position bestimmt. Das zweite Element hier ist mein Nachname, Heinen.
Dies ist derselbe Inhalt, jedoch als assoziatives Array. Assoziative Arrays werden in eckigen Klammern dargestellt und ihre Elemente haben Namen. Dieses Element heißt fn (für Vorname), und die Daten sind gebunden. Der Inhalt von Vorname ist gebunden.
Es gibt zwei verschiedene Möglichkeiten, Datenstrukturen zu erstellen. Diese Strukturen lassen sich verschachteln und führen zu Kombinationstransformationen wie diesen. Man sieht viele geschweifte und eckige Klammern, und am Ende befinden sich zwei eckige Klammern und die geschweiften Klammern geschlossen. Es ist ziemlich schwierig, in einer solchen Struktur den Überblick zu behalten.
Das ist wichtig zu wissen, denn insbesondere bei sogenannten REST-Schnittstellen, über die Computer mit Internetdiensten kommunizieren, werden Daten in JSON-Strukturen ausgetauscht. Die JSON-Struktur ist genau eine solche Kombination aus Listen und assoziativen Arrays. Es ist wichtig herauszufinden, wo sich die einzelnen Elemente befinden.
Das manuell zu machen, ist etwas umständlich. Es gibt ein Programm, das das für Sie erledigt. Ich habe es geschrieben und stelle es Ihnen zur Verfügung. Sie benötigen keine Programmierkenntnisse. Es gibt nur zwei wichtige Anweisungen: die For-Schleife und die Rekursion.
„For“ bedeutet, dass es sich um eine Schleife handelt. Alles innerhalb dieser Klammern wird mehrmals wiederholt. Rekursion ist etwas Interessantes. Sie weist JMP an, sich die aktuelle Programmposition zu merken und die gesamte Anwendung erneut auszuführen. Anschließend kehrt JMP an diese Stelle zurück und fährt fort. Rekursion kann naturgemäß beliebig oft wiederholt werden.
Was macht dieses Programm? Es nimmt die gesamte Struktur am Anfang entgegen. Es fragt: Handelt es sich um eine Liste oder ein assoziatives Array? Wenn ja, weisen wir diesem Element die Rolle des Elternteils zu. Wenn wir über Hierarchien nachdenken, können wir an Generationen denken: Großeltern, Eltern, Kinder, Enkelkinder usw. Dies ist die erste Elterngeneration.
Wir nehmen das erste Element, dessen erstes Kind, erhöhen die Stapelebene, um zu beachten, dass wir uns nun in der zweiten Generation befinden, und beginnen dann den gesamten Abfrageprozess von neuem, bis wir am Ende angelangt sind. Das Ende ist immer ein Datenelement.
Wir speichern alle Informationen dieses Datenelements, verringern die Stack-Ebene und gehen eine Generation zurück. Wir befinden uns in der Enkelgeneration. Nun gehen wir eine Generation zurück und fragen: Gibt es Geschwister in dieser Generation? Falls ja, nehmen wir das nächste Geschwisterkind und wiederholen den Vorgang, bis keine Geschwister mehr vorhanden sind. Dies geschieht schließlich an der obersten Position, also in der Großelterngeneration. Dann erzeugen wir die Ausgabe.
Das Ergebnis in diesem Fall, oder hier ein Beispiel, bei Interlap-Vergleichen, sind standardisierte Teile, die an Labore geschickt werden, wo sie mit verschiedenen Analysegeräten getestet werden und unterschiedliche Gruppen von Messwerten liefern.
Diese Daten werden anschließend analysiert und in dieser Tabelle dargestellt. Es gibt eine Spalte für über- und untergeordnete Elemente, die ich farblich hervorgehoben habe, um die Darstellung zu vereinfachen. Dies ist der erste Pfad zum ersten Datenelement, dann zu all seinen Geschwisterelementen, eine Ebene höher, und dort befindet sich bereits das Ende – keine weiteren untergeordneten Elemente – und dann wieder eine Ebene höher zum nächsten Strukturelement.
Da wir die Daten ebenfalls gespeichert haben, wissen wir bei jedem Schritt genau, worüber wir sprechen: über ein Labor, über ein Bauteil, über eine Gruppe von Messwerten der Laboranalyse. Hier unten finden Sie einen Wert, der in diesem speziellen Fall als Variationskoeffizient (VK) bezeichnet wird.
Was machen wir mit so einer Datentabelle? Wir möchten dieses Diagramm erstellen. Das findet man im Menü „Analysieren“, dann „Qualität und Prozess“ und schließlich „Diagramm“. Ich habe das schon mal gemacht, daher kann ich es automatisch ausfüllen. Ist wirklich kinderleicht.
Standardmäßig wird das Fischgrätendiagramm angezeigt. Ganz am Ende sehen wir hier die gesamte Menge. Das ist schwer lesbar. Mit einem Rechtsklick (hier) können wir den Typ in Hierarchie ändern. Jetzt sehen wir eine Hierarchie mit bis zu sieben Ebenen, und hier beginnt die gesamte Menge usw. Wir haben assoziative Arrays. Wir haben auch Listen.
Wie navigieren wir in diesen Gruppen? Wir beginnen natürlich mit dem gesamten Datensatz. Dann gehen wir eine Ebene tiefer in einem assoziativen Array der Teile und anschließend eine weitere Ebene tiefer in der ersten Runde. Die Linie verläuft weit nach rechts, es gibt also noch einige weitere Runden. Wir nehmen einen der Analysatoren, in diesem Fall E2. Wir haben diese Gruppe von Messwerten als Liste, und das dritte Element in der Liste ist der Datenpunkt mit dem Wert sechs.
Genau so würde ein Programmierer auf diesen Datenpunkt zugreifen. Das ist viel einfacher herauszufinden und nachzuvollziehen, als sich durch eine solche Struktur zu kämpfen. Wir haben ein Programm, das die Analyse durchführt. Wir haben Anwendungen, JSON-Schnittstellen, REST-Schnittstellen und JSON-Strukturen, wo dies sehr hilfreich ist.
Alles perfekt? Nun ja, das Skript setzt voraus, dass die Struktur bereits im JSL-Format vorliegt. Eine Benutzeroberfläche, über die der Benutzer beispielsweise sagen kann: „Dies ist meine Datentabelle. Dies ist die Hierarchie meiner Spalten. Bitte generieren Sie ein Diagramm wie dieses!“, wäre hilfreich. Das Programm würde dann dieses Diagramm erstellen.
Bei der Arbeit mit diesem Diagramm werden Sie feststellen, dass es nicht vollständig in JMP integriert ist, wie es bei modernen Plattformen üblich ist. Es scheint, als stamme es aus einer älteren JMP-Version (2 oder 3). Falls jemand aus dem JMP-Entwicklungsteam dies liest, bitten wir Sie, die Plattform entsprechend anzupassen.
Das Skript finden Sie auf meiner Webseite zur Discovery-Präsentation. Wenn Sie neugierig sind, Fragen haben oder mich am Donnerstag, den 7. März, beim Discovery Summit treffen möchten, finden Sie mich im Ballsaal an Stand 2. Ich bin dort.