Data Cockpit: Ways to Enrich a Master Table with Additional Data
Siltronic AG is one of the global technology leaders in the semiconductor wafer industry. For the production of silicon wafers, many process steps are needed, beginning with crystal growth and ending with packaging the wafers.
In a complex production environment, a lot of data is generated, so different details are important from different perspectives. Data may be saved to databases and other resources that JMP is generally able to load. This data certainly does not fit into one data table. In this talk, I show how a master data table can be extended with additional data, depending on the context. I also give examples of how to query additional tables that contain more detailed information and that are linked to the master data table.
The master data table is provided with a set of table scripts to implement the described features. Detailed JSL snippets are discussed to realize the described functionality.
Hello, everybody. Thanks for watching this video. And welcome to my presentation, Data Cockpit: Ways to Extend a Master Table on Click with Additional Data. Let me first talk about my company, Siltronic. We have four world-class production sites, 4,500 employees, global scale and reach, and more than 50 years of history in silicon technologies. We have been founded as a part of Wacker, and have produced our first 200 millimeter wafer in 1984 and first 300 millimeter wafer in 1990. What's going on all the time is the shrinkage of the sizes, as you can see here with design rule 11 nanometres, seven, eight, five, three, and currently two.
In 2015, we went public as a stock corporation, and currently, we are expanding with the new FAB in Singapore and crystal pulling hall in Freiburg. Here you can see the electronics value chain and how the value increases, starting with ultra-pure polysilicon over semiconductor silicon wafers. That's our production step over semiconductors and electronics, and the worth is more than 1000-fold. Here you can see international manufacturing network. In Germany, Freiburg and Burghausen, we have our small diameter line and crystal pulling and wafering facilities, while Burghausen is our central R&D hub.
We have a 200 millimeter wafer facility in Portland and in Singapore. We have a crystal pulling facility and 300 millimeter wafer facility in Singapore as well. These FAPs in Singapore are among the world's newest and largest. Top technology position and a high level of quality are equally important for us. And yes, currently we are working on two nanometer nodes and there are concurrently optimized more than 50 parameters for the wafer and as well we have single wafer traceability. So there is a lot of data generated. This is our production workflow, starting with the raw material, ultra-pure silicon, over crystal pulling with Czochralski method or float zone pulling, then ingot grinding, multi-wire slicing, edge rounding, laser marking, lapping, cleaning and etching, polishing, and epitaxy finally. A few words about me. I'm an electrical engineer and have a PhD in simulation of electrothermal processes like what we do in our company. I have a statistical education, and my main job is development of silicon crystal growth processes at Siltronic Freiburg. Here I want to thank my company that allows me to be at the Discovery Summit and as well-to-do my work and work with JMP, which is great.
I'm also responsible for support of JMP software within Siltronic with about 500 users. Now about the application, Data Cockpit: Ways to Extend a Master Table on Click with Additional Data. The problem we had is that one table should contain an overview on products or batches or so, and there should be some graphs to assess performance and other parameters. We would like to have additional tables that are generated on content and selection of the main table and additional columns to be added with specific values. Also, we would like to provide links to drill down for more detailed data. We have seen that JMP is a great graphic graphical user interface. The JMP data table is a great graphical user interface to do so. What we did to solve this is we used a lot of database queries, namely the new SQL query object. We took the JMP data table for overview and event handler to act on click and used a lot of table scripts for starting platforms, adding columns, generate detail tables, or one click to execute everything. So JSL is a good tool to implement all these functions. In real application, our data comes from company databases.
And in this presentation, I simulate this by using the sample data table, anodic bond. The cockpit summary is compiled by query to many different tables in reality. Additional tables are added from same or other tables or other databases, and other sources available for JMP, like files, figures, videos, could be implemented as well. But in this presentation, I use the table, anodic bond, because the database query is quite similar to database access on company databases. In this data table, anodic bond, we have several batch information, and for each wafer, the batch is wafer ID. For each wafer, we have function of the data like these five variables, charge, flow, position, piston force, vacuum, and voltage along the order like shown here. We have an assessment like good or bad for each wafer. This is how the cockpit looks with data and scripts. It contains the wafer ID and the assessment and some aggregated data like you can see here, and has a lot of table scripts. Here is a link to drill down. We have columns here, and additional columns are grouped in the column group detail. We will see later. We have a graph column as well that is of type expression.
This is how it looks in more detail, and this is the time I will switch to JMP. Here we see the cockpit which is empty now. Here I have a script where we can see the abstract of my presentation to see about the background. Here I provide a script with some documentation, how to use this table. I will explain in detail. I have grouped the scripts. We can open the script group, and we can press just update cockpit to get the main data of the cockpit. You can see we have 30 wafers listed here with the aggregated data here as well.
Here is a script to clear the table and we can populate it again. We can have a look at the full database, which is not possible for the real application. But here I can open it. This is a JMP sample data table. We can see here with 122 rows and with 2,000 wafer IDs. In this graph, we can see the functional data that is in the anodic bond sample table, like charge, flow, and so on. I have looked for some interesting detail data here to get into the cockpit. This may be position 43 of the charge. You can see it's varying a lot here. Or position 40 of flow which is characteristic here, this position, and piston force.
There we have position 30 as characteristic position, vacuum, which is position three. That may be interesting. And voltage, where position 27 is interesting. We have here a column switcher to easily switch through the variables here. That's the database we use. I close it. Here we are again in the cockpit, and we can have a look at how this is done. Update cockpit. We edit the script. We see it's quite small, and it mainly uses new SQL query. Like you can see here, but not to a database, but to a JMP table. This is the main difference of accessing a JMP table or a database. I use as well custom SQL to put the query, to define the query. You can see here that I filtered only a part of the wafer IDs to have a small in the cockpit to work with here. I got some aggregated data here like max or average, as you can see here. The SQL looks a little nasty because I have to escape the double quotes here inside the custom SQL string.
Later, we will see a more nicer way to do this. The query is run and updates the table, the cockpit. Here I have to close the JMP data table because JMP opens this table and does not close it at the end of this query. Here I delete a few scripts that I do not need when the query is performed. It's a quite small script and nice to use, and it's maintainable. To clear the data table, we can see what I do here. I delete all rows. I delete the graph column we will see later. I delete all columns of the column group details that will appear here later, and I delete property of the wafer ID. Let's run all. Here we can see how the full cockpit is populated then. We see that we get some additional detail tables with graphs. Here for the wafers in the cockpit, we get details on these wafer IDs, 30 like I queried, and the detail data of flow here. Inside the table, I put the script to display the graph builder to see the detail curve. I can close it here. The same holds for the charge.
You can see here there is a link reference, and here is a link ID. In this graph builder, I can show the control panel, and I can use in this detail table... This detail table, I can use the data of the main table of the cockpit, like here, the condition, as if it were in the same table just by linking it. Here I have used it as overlay to see good and bad wafers in different colors. That's what the links are for. Let's go through the cockpit and have a look at the details. Here under graphs, we see a summary graph like charge maximum over wafer ID, again with column switcher to see different variables. If I hover over a point, I see a detail graph. That's because I included the graph into the data table as a column, and I made this column to be a label like you can see here. That's the reason why I can see the details here in the graph as a label. Maybe we can assess here if there is a difference in vacuum average, why good and bad?
Or we can do A one-way analysis, for example. Again, we have the details here as well. How is this done as a script? It's simply a graph builder. I created the graph builder, took the script out of it, and pasted it into the table script like here. Here we could do a predictor screening like this with all the aggregated values and with the detail values as well, like you can see here. You can see which parameter may make the condition good or bad. How this is done, we can see it here. It simply takes... It looks for the detail column, group details, if it is there, and if it is not there, it simply calls the predictor screening with the aggregated values. If the detail column group details is there, it also adds the column group details, so these columns here to the predictor screening as well. Now, we have seen what is in the section graphs. Let's have a look for more details. Details for wafer ID. This is just a hint to click on wafer ID that is here. When I click here, we get details to the wafer ID 1971 or 1973.
Simply a new table is generated, and the table comes with a script that shows this graph.
How this can be done? Here the technology used is event handler. Under column info, we see that we have here the event handler. In the event handler, the scripting frame is provided by JMP already. I implemented a script to start a query, and in this query, I can use the column and the row where we are. It's a wafer ID and the number of the wafer ID I can access here. Here I need the database connection. Within this SQL I have here, we see here a different way to put a string where there is no need for escaping these double quotes we need here. It looks a little nicer. By using Eval Insert, I insert the query filter, the query condition, into this query. I take here the ID of the current column, that is my wafer ID, I put a filter into the query, and on completion, I close again the data table, I delete some scripts, and I add the script, charge versus order, into the table. That's what I did. Press here to get the table and press here to get a graph. We could do this as well in one step only.
We do not need this anymore. Let's look at the In the next script. I deselect all columns and all rows. Details selected rows. I need to select some rows. Let me do this. I will select one, three, five, pressing control button, and details selected rows. When doing so, I get the vacuum curve for these three wafer IDs with the condition good or bad in different columns the terms of the graph. I'm able to compare. How is this done? You can see here, if I go to the JMP home window, that in background the table anodic bond is created, but it is hidden, and we only see the graph here, which is this window. I can have a look at the table by double-clicking on this. Then it's not hidden anymore. Let's see how this works. There is another function if I close the graph, the table will vanish as well. I see only the table. Let's have a look how this is done. Here, first, this is a pop-up window if nothing is selected. If something is selected, I compile the wafer list string. It's a string containing a list of the wafer IDs, and I use substitute to change that square bracket to these brackets here.
Then it's the same story with this list. I go into a new SQL query to JMP data table and via Eval Insert, I introduce this wafer list as a condition to the SQL. On run complete the same thing and then the graph builder is added as a script. It's executed here, the graph builder. I tell the graph builder object here that on close, it should close the data table, anodic bond detail, and not save anything. It's a small script, and it has a nice function, I think, to provide a curve of these selected wafer IDs. When I close it, everything is away again. So far, the details.
Now, let's go to update the details. As you can see here, these are additional detail columns that have been added. I have shown why the points are interesting, and they are added via this script. Let me again clear the table and update the cockpit to have the main data. Let's start this script at detail columns. You see these details appear here. How this is working, I will show here. First, I compile a list of the column names I need here, and of the names I need for the query, and the filter values I need for the query.
I compile each data set in an associative array and make a list of associative arrays. If the detail columns do not exist, I will create them, like you can see here. And then I go over all the detail list and I create... The next step was to create the column group details here over all the detail columns. And here comes the loop then over all the details to put the query for each detail like you can see here. Again, with Eval Insert, we introduce the name, and we introduce the value here we need for the query. And this is the loop then to create a table for each detail column. And this update will introduce the values into the detail column like we have seen before. And at the end, inside the loop, I, of course, need to close the detail table. So let's see again how this works. I clear the table, update the cockpit, and add detail columns like you can see here. It's not a really big script, I think it's quite easy to maintain if you want to understand how this works. The next detail is add a graph for vacuum.
It works like this. I press it and then the graph is generated. I scroll to the right a little. How this is done is like follows. It generates the column, and then it mutes the update of the data table and for each row, we put a query on the detail we need like done before, and then we create that graph builder object and save it as a picture into the column graph vacuum. At the end, of course, close the graph builder and the data table. Then set the cell height to be able to see that graph. That's how this works.
The next detail is query detail of charge. This is where the additional table with graph builder occurs, like we can see here. This is quite an easy one. This is simply looking for the wafer list like this. Then query the detail table, add a property to the table, the script for the graph builder, and to run the script. Additionally, here I generate the link ID and the reference to be able to use I closed it. I again will execute to be able to use for this wafer ID. There is no assessment in here.
The assessment is in the cockpit table only here, at condition. That makes me able to use in the detail, graph the assessment. Let's close it again. For the flow, it's the same. If you don't like, let's say, all the windows appearing, and they have many windows and so, I again clear the table, you could shift everything into a project like we can do here. We can create a project of the current data table, which is the cockpit. We can... This we do not We don't need anymore. We can use the table as if it was alone. We can close the left panels like here to have the full screen. Everything works here in a similar way. We can update the cockpit and so on. When creating some details, like query detail for charge, we will get this in tabs and not in different windows like we can see here. I'm through with my presentation. Thanks for your attention. If you have questions, meet me at the Discovery Summit or in the user group or at the Scripters Club. Thank you again and have a nice day. Bye bye.