Siltronic AG est l'un des leaders mondiaux des technologies de production de plaquettes de semi-conducteurs. La fabrication de plaquettes de silicium nécessite de nombreuses étapes, depuis la croissance cristalline jusqu'au conditionnement.
Dans un environnement de production complexe, une grande quantité de données est générée, et différents détails revêtent une importance variable selon les points de vue. Ces données peuvent être enregistrées dans des bases de données et d'autres ressources que JMP est généralement capable de charger. Il est évident que ces données ne tiennent pas dans une seule table. Dans cette présentation, je montre comment une table de données principale peut être enrichie de données supplémentaires, en fonction du contexte. Je donne également des exemples d'interrogation de tables supplémentaires contenant des informations plus détaillées et liées à la table de données principale.
La table de données principale est fournie avec un ensemble de scripts permettant d'implémenter les fonctionnalités décrites. Des extraits de code JSL détaillés sont présentés pour illustrer ces fonctionnalités.
Bonjour à tous. Merci de regarder cette vidéo. Bienvenue dans ma présentation : « Tableau de bord des données : Comment enrichir une table principale en un clic avec des données supplémentaires ». Permettez-moi tout d’abord de vous présenter mon entreprise, Siltronic. Nous disposons de quatre sites de production de pointe, de 4 500 employés, d’une envergure et d’une présence mondiales, et de plus de 50 ans d’expérience dans les technologies du silicium. Fondée au sein de Wacker, nous avons produit notre première plaquette de 200 millimètres en 1984 et notre première plaquette de 300 millimètres en 1990. La miniaturisation des semi-conducteurs est un phénomène constant, comme vous pouvez le constater ici avec la règle de conception de 11 nanomètres, puis 7, 8, 5, 3 et actuellement 2 nanomètres.
En 2015, nous sommes entrés en bourse sous forme de société par actions et, actuellement, nous poursuivons notre expansion avec une nouvelle usine de fabrication à Singapour et une unité de production de cristaux à Fribourg. Vous pouvez observer ici la chaîne de valeur de l'électronique et la façon dont elle s'accroît, depuis le polysilicium ultra-pur jusqu'aux plaquettes de silicium semi-conductrices. Cette étape de production, qui englobe les semi-conducteurs et l'électronique, représente un gain de plus de 1 000 fois. Vous pouvez également consulter notre réseau de production international. En Allemagne, à Fribourg et à Burghausen, nous disposons de nos lignes de production de petits diamètres ainsi que de nos installations de production de cristaux et de fabrication de plaquettes. Burghausen abrite notre principal centre de R&D.
Nous disposons d'une usine de fabrication de plaquettes de 200 mm à Portland et à Singapour. Nous possédons également une usine d'étirage de cristaux et une usine de fabrication de plaquettes de 300 mm à Singapour. Ces usines de Singapour comptent parmi les plus récentes et les plus grandes au monde. L'excellence technologique et un niveau de qualité élevé sont primordiaux pour nous. Actuellement, nous travaillons sur deux nœuds nanométriques et optimisons simultanément plus de 50 paramètres pour chaque plaquette. Nous assurons également la traçabilité de chaque plaquette, ce qui génère une quantité considérable de données. Voici notre processus de production : depuis la matière première, du silicium ultra-pur, en passant par l'étirage de cristaux par la méthode Czochralski ou par zone flottante, puis le meulage des lingots, le découpage multifil, l'arrondi des bords, le marquage laser, le rodage, le nettoyage et la gravure, le polissage et enfin l'épitaxie. Quelques mots sur moi : je suis ingénieur électricien et titulaire d'un doctorat en simulation des procédés électrothermiques, comme ceux que nous utilisons dans notre entreprise. J'ai une formation en statistiques et je travaille principalement au développement des procédés de croissance de cristaux de silicium chez Siltronic Freiburg. Je tiens à remercier mon entreprise qui me permet d'assister au Discovery Summit et de mener à bien mon travail, notamment avec JMP, ce qui est formidable.
Je suis également responsable du support du logiciel JMP chez Siltronic, qui compte environ 500 utilisateurs. Concernant l'application Data Cockpit : comment étendre une table principale en un clic avec des données supplémentaires ? Notre problème était le suivant : une table devait contenir une vue d'ensemble des produits, des lots, etc., ainsi que des graphiques pour évaluer les performances et d'autres paramètres. Nous souhaitions disposer de tables supplémentaires générées en fonction du contenu et de la sélection de la table principale, et ajouter des colonnes avec des valeurs spécifiques. De plus, nous voulions fournir des liens permettant d'accéder à des données plus détaillées. Nous avons constaté que JMP offre une excellente interface graphique. La table de données JMP est parfaitement adaptée à cet usage. Pour résoudre ce problème, nous avons utilisé de nombreuses requêtes de base de données, notamment le nouvel objet de requête SQL. Nous avons utilisé la table de données JMP pour la vue d'ensemble et le gestionnaire d'événements réagissant au clic, ainsi que de nombreux scripts de table pour démarrer les plateformes, ajouter des colonnes, générer des tables détaillées, ou exécuter le tout en un seul clic. JSL s'est donc avéré un outil performant pour implémenter toutes ces fonctionnalités. Dans notre application, nos données proviennent des bases de données de l'entreprise.
Dans cette présentation, je simule ce processus à l'aide de la table de données d'exemple « liaison anodique ». Le résumé du tableau de bord est compilé par l'interrogation de nombreuses tables différentes. Des tables supplémentaires sont ajoutées à partir des mêmes tables, d'autres tables ou d'autres bases de données. D'autres sources disponibles pour JMP, telles que des fichiers, des figures et des vidéos, pourraient également être intégrées. Cependant, dans cette présentation, j'utilise la table « liaison anodique » car l'interrogation de la base de données est très similaire à l'accès aux bases de données de l'entreprise. Dans cette table de données, « liaison anodique », nous avons plusieurs informations sur les lots, et pour chaque plaquette, le lot correspond à l'identifiant de la plaquette. Pour chaque plaquette, nous avons les fonctions des données, notamment ces cinq variables : charge, débit, position, force du piston, vide et tension, dans l'ordre indiqué ici. Nous avons une évaluation (« bon » ou « mauvais ») pour chaque plaquette. Voici à quoi ressemble le tableau de bord avec les données et les scripts. Il contient l'identifiant de la plaquette, l'évaluation et certaines données agrégées, comme vous pouvez le voir ici, ainsi que de nombreux scripts de table. Voici un lien pour explorer les données en détail. Nous avons ici des colonnes, et d'autres colonnes sont regroupées dans le détail du groupe de colonnes. Nous y reviendrons plus tard. Nous avons également une colonne graphique de type expression.
Voici à quoi cela ressemble plus en détail, et c'est à ce moment-là que je vais passer à JMP. Voici le cockpit, qui est vide pour l'instant. J'ai ici un script qui affiche le résumé de ma présentation pour vous donner un aperçu du contexte. Voici également un script contenant de la documentation sur l'utilisation de ce tableau. Je vous expliquerai en détail. J'ai regroupé les scripts. Ouvrez le groupe de scripts et cliquez sur « Mettre à jour le cockpit » pour obtenir les données principales. Vous pouvez voir que 30 plaquettes sont listées ici, avec les données agrégées également.
Voici un script pour vider le tableau et le remplir à nouveau. Nous pouvons consulter la base de données complète, ce qui n'est pas possible pour l'application réelle. Mais ici, je peux l'ouvrir. Il s'agit d'un exemple de tableau de données JMP. On peut voir ici 122 lignes et 2 000 identifiants de plaquettes. Sur ce graphique, nous pouvons voir les données fonctionnelles du tableau d'exemple de liaison anodique, comme la charge, le débit, etc. J'ai recherché des données détaillées intéressantes pour analyser le tableau. Il pourrait s'agir de la position 43 de la charge. Vous pouvez constater qu'elle varie beaucoup ici. Ou encore la position 40 du débit, qui est caractéristique ici, ainsi que la force du piston.
Nous avons ici la position 30 comme position caractéristique, le vide, qui correspond à la position trois. Cela pourrait être intéressant. Et la tension, où la position 27 est intéressante. Nous avons ici un sélecteur de colonnes pour naviguer facilement entre les variables. Voici la base de données que nous utilisons. Je la ferme. Nous revoilà dans le cockpit, et nous pouvons voir comment cela fonctionne. Mise à jour du cockpit. Nous modifions le script. Nous constatons qu'il est assez court et qu'il utilise principalement une nouvelle requête SQL. Comme vous pouvez le voir ici, mais non pas pour une base de données, mais pour une table JMP. C'est la principale différence entre l'accès à une table JMP et celui à une base de données. J'utilise également du SQL personnalisé pour définir la requête. Vous pouvez voir ici que j'ai filtré seulement une partie des identifiants de plaquettes afin d'avoir un petit échantillon exploitable dans le cockpit. J'ai obtenu des données agrégées, comme le maximum ou la moyenne, comme vous pouvez le voir. Le SQL semble un peu complexe car j'ai dû échapper les guillemets doubles à l'intérieur de la chaîne SQL personnalisée.
Plus tard, nous verrons une méthode plus élégante. La requête est exécutée et met à jour le tableau, le cockpit. Je dois ici fermer le tableau de données JMP car JMP l'ouvre et ne le ferme pas à la fin de la requête. Je supprime ensuite quelques scripts inutiles pendant l'exécution de la requête. Il s'agit d'un petit script, agréable à utiliser et facile à maintenir. Pour vider le tableau de données, je supprime toutes les lignes, la colonne du graphique (que nous verrons plus tard), toutes les colonnes du groupe de colonnes « détails » qui apparaîtront ici, ainsi que la propriété de l'identifiant de la plaquette. Exécutons le tout. Le cockpit est alors entièrement rempli. Nous obtenons des tableaux de détails supplémentaires avec des graphiques. Pour les plaquettes du cockpit, nous obtenons les détails de leurs identifiants (30, comme dans ma requête) et les données de flux. Dans le tableau, j'ai inséré le script permettant d'afficher le générateur de graphiques pour visualiser la courbe détaillée. Je peux le fermer. Il en va de même pour l'accusation.
Vous pouvez voir ici une référence de lien et un identifiant de lien. Dans cet outil de création de graphiques, je peux afficher le panneau de contrôle et l'utiliser dans ce tableau de détails. Ce tableau de détails me permet d'utiliser les données du tableau principal du cockpit, comme ici, l'état, comme si elles se trouvaient dans le même tableau, simplement en les liant. Je l'ai utilisé ici en superposition pour distinguer les plaquettes de bonne et de mauvaise qualité par des couleurs différentes. C'est à cela que servent les liens. Explorons le cockpit et examinons les détails. Ici, sous « Graphiques », nous voyons un graphique récapitulatif, par exemple la charge maximale en fonction de l'identifiant de la plaquette, avec un sélecteur de colonnes pour afficher différentes variables. Si je survole un point, un graphique détaillé s'affiche. En effet, j'ai inclus le graphique dans le tableau de données sous forme de colonne, et j'ai configuré cette colonne comme une étiquette, comme vous pouvez le voir ici. C'est pourquoi les détails apparaissent ici dans le graphique sous forme d'étiquette. Peut-être pouvons-nous évaluer ici s'il existe une différence de vide moyen, et pourquoi les plaquettes sont bonnes ou mauvaises ?
Ou nous pouvons effectuer une analyse univariée, par exemple. Là encore, les détails sont disponibles. Comment cela se fait-il sous forme de script ? Il s'agit simplement d'un générateur de graphiques. J'ai créé le générateur de graphiques, j'en ai extrait le script et je l'ai collé dans le script du tableau, comme ici. Nous pouvons ainsi effectuer une sélection de prédicteurs avec toutes les valeurs agrégées et les valeurs détaillées, comme vous pouvez le constater. Vous pouvez voir quel paramètre influence positivement ou négativement la condition. Voici comment cela fonctionne : le script recherche la colonne de détails « group details » et vérifie si elle est présente. Si elle est absente, il appelle simplement la sélection de prédicteurs avec les valeurs agrégées. Si la colonne de détails « group details » est présente, elle est également ajoutée à la sélection de prédicteurs. Nous avons maintenant vu le contenu de la section « Graphiques ». Examinons plus en détail les informations relatives à l'identifiant de la plaquette. Ceci est une simple indication pour cliquer sur l'identifiant de la plaquette. Lorsque je clique ici, nous obtenons des détails sur l'identifiant de la plaquette 1971 ou 1973.
Un nouveau tableau est simplement généré, et ce tableau est accompagné d'un script qui affiche ce graphique.
Comment cela est-il possible ? La technologie utilisée ici est un gestionnaire d'événements. Sous « Informations sur la colonne », nous voyons le gestionnaire d'événements. Dans ce gestionnaire, le cadre de script est déjà fourni par JMP. J'ai implémenté un script pour lancer une requête, et dans cette requête, je peux utiliser la colonne et la ligne actuelles. Il s'agit de l'identifiant de la plaquette et de son numéro, auxquels j'ai accès ici. J'ai besoin ici de la connexion à la base de données. Dans cette requête SQL, nous voyons une autre façon d'insérer une chaîne de caractères, sans avoir besoin d'échapper les guillemets doubles nécessaires. C'est plus lisible. À l'aide de la fonction Eval Insert, j'insère le filtre et la condition de la requête. Je récupère l'identifiant de la colonne actuelle, c'est-à-dire l'identifiant de ma plaquette, j'applique un filtre à la requête, et une fois l'opération terminée, je ferme le tableau de données, je supprime certains scripts et j'ajoute le script « charge versus order » au tableau. Voilà ce que j'ai fait. Cliquez ici pour afficher le tableau et ici pour afficher le graphique. Nous pourrions également le faire en une seule étape.
Nous n'en avons plus besoin. Regardons le script suivant. Je désélectionne toutes les colonnes et toutes les lignes. Détails des lignes sélectionnées. Je dois sélectionner quelques lignes. Je vais le faire. Je vais sélectionner une, trois, cinq, en maintenant la touche Ctrl enfoncée, puis j'affiche les détails des lignes sélectionnées. J'obtiens ainsi la courbe de vide pour ces trois identifiants de plaquette, avec l'état (bon ou mauvais) indiqué dans différentes colonnes du graphique. Je peux comparer. Comment cela fonctionne-t-il ? Vous pouvez voir ici, si je retourne à la fenêtre d'accueil de JMP, que le tableau de liaison anodique est créé en arrière-plan, mais il est masqué ; seul le graphique, qui correspond à cette fenêtre, est visible. Je peux consulter le tableau en double-cliquant dessus. Il n'est alors plus masqué. Voyons comment cela fonctionne. Autre fonction : si je ferme le graphique, le tableau disparaît également. Je ne vois plus que le tableau. Voyons comment cela fonctionne. Ici, il s'agit d'une fenêtre contextuelle qui s'affiche si rien n'est sélectionné. Si une option est sélectionnée, je compile la liste des plaquettes. Cette chaîne contient les identifiants des plaquettes, et j'utilise la fonction `substitute` pour remplacer les crochets par ceux-ci.
Ensuite, même principe pour cette liste. Je crée une nouvelle requête SQL pour la table de données JMP et, via Eval Insert, j'intègre cette liste de plaquettes comme condition. À l'exécution, je répète l'opération, puis j'ajoute le générateur de graphiques comme script. Il est exécuté ici. Je configure l'objet générateur de graphiques pour qu'à la fermeture, la table de données (détails de la liaison anodique) soit fermée et qu'aucune donnée ne soit enregistrée. C'est un petit script qui, je crois, possède une fonction intéressante permettant de générer une courbe pour les identifiants des plaquettes sélectionnées. À la fermeture, tout est effacé. Voilà pour les détails.
Passons maintenant à la mise à jour des détails. Comme vous pouvez le constater, des colonnes de détails supplémentaires ont été ajoutées. J'ai expliqué l'intérêt de ces points, et ils sont ajoutés via ce script. Je vais à nouveau effacer le tableau et mettre à jour le tableau de bord pour afficher les données principales. Commençons l'exécution de ce script par les colonnes de détails. Vous voyez ces détails apparaître ici. Je vais vous montrer comment cela fonctionne. Tout d'abord, je compile une liste des noms de colonnes nécessaires, ainsi que des noms et des valeurs de filtre requis pour la requête.
Je compile chaque ensemble de données dans un tableau associatif et crée une liste de tableaux associatifs. Si les colonnes de détail n'existent pas, je les crée, comme vous pouvez le voir ici. Ensuite, je parcours toute la liste des détails et je crée… L'étape suivante consiste à créer le groupe de colonnes « détails » pour toutes les colonnes de détail. Puis vient la boucle qui parcourt tous les détails pour insérer la requête pour chaque détail, comme vous pouvez le voir ici. À nouveau, avec `Eval Insert`, nous introduisons le nom et la valeur nécessaire à la requête. Voici la boucle qui crée ensuite une table pour chaque colonne de détail. Cette mise à jour insère les valeurs dans la colonne de détail, comme nous l'avons vu précédemment. Enfin, à la fin de la boucle, je dois bien sûr fermer la table de détail. Voyons donc à nouveau comment cela fonctionne. J'efface la table, je mets à jour le tableau de bord et j'ajoute les colonnes de détail, comme vous pouvez le voir ici. Ce n'est pas un script très long ; je pense qu'il est assez facile à maintenir si vous voulez comprendre son fonctionnement. Le détail suivant consiste à ajouter un graphique pour l'aspirateur.
Voici comment ça fonctionne : j’appuie dessus et le graphique se génère. Je fais défiler légèrement vers la droite. Le processus est le suivant : la colonne est générée, puis la mise à jour du tableau de données est désactivée. Pour chaque ligne, on effectue une requête sur les détails nécessaires, comme précédemment, puis on crée l’objet du générateur de graphique et on l’enregistre comme image dans le vide du graphique de colonne. Enfin, on ferme le générateur de graphique et le tableau de données. On ajuste ensuite la hauteur des cellules pour visualiser le graphique. Voilà comment ça marche.
L'étape suivante concerne les détails de la requête de facturation. C'est ici qu'intervient le tableau supplémentaire avec le générateur de graphiques, comme on peut le voir ici. C'est assez simple : il suffit de rechercher la liste des plaquettes, puis d'interroger le tableau de détails, d'y ajouter une propriété, le script du générateur de graphiques et de l'exécuter. De plus, je génère ici l'identifiant du lien et la référence pour pouvoir l'utiliser. Je ferme ensuite la procédure. Je vais exécuter à nouveau la procédure pour pouvoir l'utiliser avec cet identifiant de plaquette. Aucune évaluation n'est effectuée ici.
L'évaluation se trouve uniquement ici, dans le tableau de bord, au niveau de la condition. Cela me permet de l'utiliser en détail et de la représenter graphiquement. Fermons-la. Le flux est identique. Si vous n'appréciez pas l'affichage de toutes les fenêtres (et il y en a beaucoup), je vide à nouveau le tableau. Vous pouvez tout déplacer dans un projet, comme ici. Nous pouvons créer un projet à partir du tableau de données actuel, qui est le tableau de bord. Nous pouvons… Nous n'en avons plus besoin. Nous pouvons utiliser le tableau seul. Nous pouvons fermer les panneaux de gauche, comme ici, pour afficher le plein écran. Tout fonctionne de la même manière. Nous pouvons mettre à jour le tableau de bord, etc. Lors de la création de détails, comme les détails de la requête pour la facturation, ces informations s'afficheront dans des onglets et non dans différentes fenêtres comme ici. Ma présentation est terminée. Merci de votre attention. Si vous avez des questions, retrouvez-moi au Discovery Summit, au groupe d'utilisateurs ou au Scripters Club. Merci encore et bonne journée. Au revoir.