Choose Language Hide Translation Bar
Level I

One Multi-tabbed, Filterable Dashboard (2021-US-30MP-803)

Level: Intermediate


Kevin Doran, Senior Staff Engineer, Intel Corporation


Data collection teams within companies amass amazingly large amounts of information. And while these data are very valuable, it is not often tranlated into a format that is usuable by the recipient. Further compounding the problem is that different business units consume the information in different ways, which, unfortunately, often meants that valuable information is never consumed or utilized.

How does one best translate the needed information into an easy-to-use format? Furthermore, can statistically significant information be communicated through one interface? This paper describles the creation of one multi-tabbed, filterable dashboard to communicate computer laptop systems data to both architecture and engineering organizations.




Auto-generated transcript...




Mike Anderson Okay recording is now started you understand that this is being recorded for use in the JMP discovery conference and will be available publicly in the JMP user community do you give permission for this recording and use.
  Yes, I do.
  Hello, my name is Kevin Doran, and I am a systems engineer for the mainstream laptop computer segment for Intel Corporation.
  And i'd like to share with you today my journey that resulted in a filterable, multi-tabbed dashboard that has changed the way that I communicate with my organization and how JMP was an incredibly important part of that journey.
  So, to begin with, if I can leave you with with one message that you take away from today, and that is a filterable multi-tabbed JMP dashboard
  is an excellent way to communicate an amazing amount of information
  in a clear and efficient manner. So, as you work on your projects in the future, I really want to encourage you to think about using a multi-tabbed dashboard. To begin with, at the beginning, at the start of your project,
  rather than oftentimes people think about dashboard and using it at the end of the project, or maybe a last option. This is something I really think that can really affect how you communicate and make it much more effective.
  So many of us have the job of architect in the future, whether that's defining or designing products and services
  to meet the perceived needs and wants of future customers. That you know what progress is my customer trying to make, and how can I fulfill that? And so oftentimes when we architect the future we want to look to the future. We're forward looking.
  The challenge with the future is that it hasn't happened yet, and there's no data there to support any type of decisions you want to make.
  So, since we don't have that information and we love looking at data as engineers and scientists, we then look to the past.
  The challenge with the past is while it has data, it means that it's actually already happened and it's and it's finished with. So, in many and various means we try to build bridges between the past
  to the future, because I think it's really important for us to understand the past in order to develop a better future.
  I do you think that probably most people would agree that not all bridges are built the same. This is a picture of the Tacoma Narrows bridge back in 1940.
  It comes to a very dramatic ending. So, if you'd like to go look up Tacoma Narrows Bridge in 1940 on YouTube you can kind of see the the ending of how this all finishes up. But,
  the reason why I bring up the bridge analogy and apply it towards JMP is the fact that this bridge had a solid foundation to it.
  And I think the foundation of a bridge as your JMP data table. You have to have that that solid data that can that complete data there in order to set your foundation. If you don't have that, you don't have a strong bridge to begin with.
  I didn't think of the bridge structure itself as the JMP user interface that you make. In this case the bridge looked beautiful,
  until the wind started to blow. And so, as you build your user interface, you may have a certain way of wanting to have that
  user interface being used or manipulated, it may not always happen that way. There might be people who have different usage models and you want to try and build something robust not like the Tacoma Narrows. Everything was great to the wind started to blow and then bad things happened.
  And then, finally, the transit across the bridge to me is how many people and how easy it is for people, then, to use your interface.
  So, this didn't work out very well for them, but what I wanted to do with my organization was to build a bridge that look like this, something that had a strong foundation.
  Something that had a very robust user interface, and something that was very easy to traverse. So, previous in my organization, we would use,
  you know, best known methods. We would try and look at different computer board files. We would try and make our best guesses based on experience.
  What I wanted to actually do is bring a user interface, that we can make statistically significant decisions,
  and have that information searchable across multiple segments and filterable by important metrics. So, that would make not only having a firm database, but then also a solid bridge and something that was easy to use, so this was the goal of my journey.
  So, I wanted to start with the past database bridge. Now, this was a bridge that was built a number of years ago. It met the needs at the time.
  But, after several re-orgs, it no longer met the needs of my organization. The thing that's important here is that, while the interface was not very helpful anymore.
  The actual data, the foundation, the data table that was behind this was very useful and it was very important. And so, I had a strong foundation to work with. My goal, then was, how do I build that new bridge, that new user interface into my organization and make it helpful for them?
  So I'd like to take you a little bit on that journey and give you an idea on on the path that I took to make sure that people can consume my information both easily and accurately.
  So I had this this database. I had my strong foundation, and then I started letting folks know in my organization that had this information.
  As the mainstream system engineers or any way I can help them and set up some year over year visions.
  And so, at that point, I started getting some questions and I went into JMP I create some tables or graphs or different types of reports.
  And I'd answer their questions. And, then what would happen is those people would come back with some more questions and the new people would ask me questions.
  And the challenge I ran into is the fact that I had so many snips that I was sending out, I felt like I was snip boy half the day and I go in and answer all these questions and send information out more would come in. And it just was
  an untenable situation for me to sustain so I had to find a different way to communicate this information.
  The answer to that for me was learning dashboarding.
  I do think that dashboarding in general, my opinion seems to be an underutilized platform within JMP. So, again, if you haven't read into dashboarding please look into that.
  But what I was able to do was learn dashboarding and put all of these pictures into one interface that I can provide to people. So, I was getting questions...I'll give an example of a display.
  Hey, Kevin can you go ahead and tell me the screen sizes and the display resolutions in your mainstream segment from a year over year perspective.
  And so, eventually, what started as snips turned into a dashboard. So, I was able to give information out about display and answer people's questions that way.
  the challenge with the dashboard as I had created it is it didn't allow any further manipulation. So, it was a static display and then people start coming back saying well, what about this case and what about this situation.
  And what I really needed to do at that point was provide a little more interactive feel for my dashboard.
  And this actually was something that was very critical in my journey that I really want to share with you, and that is
  You know first thing I did was add a local data filter. So, I think most people are very familiar with that and I was able to then have people manipulate the dashboard.
  But something else really critical happened here and I really wanted to kind of impress this idea, and that is the fact that the data table that I had, that foundation,
  had more than just my information in it. It had information in it about entry notebooks and high performance notebooks and premium notebooks and things like that.
  And what I realized at that point is hey I can not only provide this dashboard,
  not only for my mainstream segment, but I can then increase my scope or my purview,
  increase my influence, and my networking, if I also provided this information for all of those other computer segments. So, at this point is a really important piece that
  I took and subset at all the other segments, and then added that in as a filterable option in my dashboard. So, this was a really important piece that when you're going through this. If there's something in your data table
  that allows you to expand your influence, I really want you to take a look at that and maybe use dashboarding and to help communicate that that expanded role.
  Now, I had that and that was going really well. The challenge, then at that point was I was still confined to one dashboard, one topic. All of this was basically around the display platform attribute that I was, I was addressing.
  And so, I then started getting questions about hey Kevin, can you tell me about RAM or what about graphics or what about platform mechanical metrics?
  And so I thought, well, I can go ahead and take this display dashboard and then create that same infrastructure for all of my other platform metrics that I was being asked about.
  At that point, then I had created multiple dashboards so when people would want an update on information,
  I would end up sending them four to five JMP files and say hey all the information is here. You just need to open up four or five different files.
  You need to go in and filter each one and good luck with that sort of thing and and that created another problem, because I was not making it easy
  for my customer at all. I was sending out all these files, I had to go in and out and that just wasn't very easy.
  So, at that point, I was at the end of my JMP knowledge, and so I contacted JMP support and gave them the idea of what I wanted to do. I really wanted to take all these multiple dashboards that were on my screen
  and actually bring them together into one multi-tabbed dashboard and, to my knowledge, this has not been done before. And, thankfully through
  the help of JMP I was able to go ahead and receive a JMP script that actually gave me that capability. And, now I'm able, through all of this, to try and send out one file
  that gives people all the answers or hopefully gives them all the information that they need.
  So that was really the piece of this. And the reason why I wanted to share this journey is to hopefully save you months of time that you can immediately go to that end state that is very effective and very efficient.
  So, I do want to show you what the JMP script looks like I will be the first to admit that I am a script hacker. [self-deprecating laughter] I'm not a coder.
  But, I can do a good job making tables and making graphs and then I save the script to the data table or I save it to a script window and I append them all together.
  So, at this point, I really want to give a big shout out to Nick Holmes at JMP support he's the one who I gave him my problem statement we work through several iterations of this.
  And, he came up with this script that has done an amazing job for me. And so, what I want to do to make it easy for you as well, and help you in your role,
  is not only upload my presentation, but i'm going to also upload this script for you as well as long as you don't have any you know variable word
  conflicts or anything else, like that you should have multiple scripts or multiple dashboards on your table
  open and you should be able to run the script and it will combine it all for you, without needing to do anything without needing to change any of this code. So I hope that can be very helpful for you.
  So I have wanted to then show you now that I had the script, I want to show you at least a screenshot of my dashboard.
  This was able again to transform a lot of detailed information behind it. And, what I was able to do here on this very simple database or a simple interface
  was I could segregate by segments. So, that's up in the top left that was the increase in my scope and my influence. So, you can go ahead and filter by mainstream or entries are high performance systems.
  Then I had a bunch of filter level metrics that were important to my organization.
  And then the real value of this is on the top, I have a tab by attribute I have five tabs up here right now that showed display RAM, graphics, CPU and platform information. And, all the user has to do is scroll through the tabs or scroll through the
  filters and get an amazing amount of customization and very detailed data all from this this interface.
  And, I think that there's a real beauty in simplicity here. Because something that looks I would say relatively this simple,
  actually, has over 1 million rows of data behind it. So, I think again that's part of the beauty here is that I can take something that I think created, it was created fairly robustly,
  and be able to provide a whole variety of scenarios and information to my user all through something that looks very simple to use. And I think that's something that's really important is to make it easy to use, for your for your customer and your organization.
  So, I spend enough time in PowerPoint it's time to go the dashboard. I think that there's a lot of value to watching people on these these webinars to actually manipulate some of the JMP interface
  and go through push buttons. I see a lot of value in that. So, I want to spend the rest of my time actually in JMP and showing you what I did.
  I do want to start with the folks that have not dashboarded before. There are plenty of videos that actually show you how to go through that. I at least want to show you
  a very brief example how I did it and least kind of give you an idea if you have not dashboarded before. So,
  I have here four reports open. One table and three graph builders. And, what I want to now do is just put that into a dashboard. So, all you have to do is come to your data table,
  and say File, New, Dashboard. And, it will come up with a number of different templates. Most of my stuff that i've done so far is just a two by two template.
  You can pick any template or you can actually pick a template and modify it. So, what i'm going to do is i'm going to actually pick my two by two dashboard.
  And you'll see I have my four reports and it's literally just a drag and drop. I'm going to go ahead and bring in my different reports.
  Just into those boxes.
  And now I have basically the template of my dashboard put together. Now I mentioned earlier that I also have a local data filter associated with this. And so, you'll see that there are these little thin lines around these different boxes here, and you can drag and drop different
  boxes in here, and what I'm going to do is I'm actually going to drop the local data filter on as far left as I can go. Meaning that it will affect the
  all four of these boxes. So, you can see that this local data filter will now apply to all four of these.
  And I simply have to go to the hotspot or the red triangle and say run dashboard.
  And it'll take just a few seconds, but what you'll see is then finally a dashboard with all of those features together.
  You can then go ahead and change the heights and the aspect ratios and different things like that.
  You have to manually at that point, and your local data filters and when that is ready to go ahead and be put into a script,
  all you have to do is go to this hotspot, Save Script and I'm going to just save it to a script window. And then you get a very long
  and detailed script that then you can simply cut and paste into your existing scripts. So, that's really all I did is I would create a dashboard.
  I would say the save the script to the script window. And then what I would do is is select all copy it and then paste it into an existing
  an existing script that I was appending. So that's how you go create a dashboard. Let me now spend a minute and show you how I created a JMP dashboard with a multi-tabbed dashboard. So, I'm going to go ahead and close all this out.
  And so, give me just a second to do all that.
  The system tray is not visible right now, so I can't close everything out
  all at one time, but let me go ahead and do all this manually here.
  Okay, so i'm going to open up my dashboard now.
  And while that is loading, I want to make sure that as I'm communicating this, that part of that customer orientation that I think is very valuable
  is to actually go through, and make it very easy for your customer to create the dashboard itself. So, what you'll see here in my dashboard is, I have one script
  called Create CSA dashboard and I literally tell my customers.
  Open this open this JMP file all you have to do is press the little green triangle. Don't worry about anything else. It will all be created automatically for you. So, that's something that can make it very easy. Don't make it complicated for your customer.
  This takes about two minutes to create so what I thought would be valuable is actually go into my script that I created and kind of walk you through that. At least show you some things that I found to be very helpful.
  This script is fairly long but it's broken into basically six parts. I have one part each for my five different dashboards.
  And then my sixth part of this is then the base of the code that I shared with you from JMP support and it wraps it all together into one dashboard.
  So what I chose to do here is, again, I have four reports with each dashboard and I need to go off and create each of those reports. So, what I did here is I named each report.
  This is the display dashboard that i'm giving you an example for, and so I named it Display and it was a tabulate function.
  And then you'll see my code that created the JMP table. And again, all I did here was I went ahead and created the table. I saved the script to the script window. And I copied it in here. That's all I did.
  One other thing that I did as well that has been helpful for me is to actually save this final report to my data table.
  And I really did this for two reasons. The first is that I still get
  one off sort of questions that I need to manipulate a specific report and then send them back that custom information. So,
  by creating or saving the script to the data table this allows me then just quickly go to that script press the button very quickly get my information manipulate it and send it back.
  The other reason why I do this is actually for my customer. I occasionally get some questions about hey Kevin can you change the title on this on this display or this report can you change the color of this? And, if they're.
  you know advanced enough within JMP to know how to do that, all they have to do is go ahead and manipulate that themselves. They get the information without even contacting me. So, it's sort of teaching that person how to fish.
  They can go ahead and change those things by themselves. So I've tried to enable them for that as well.
  So this is the report. Then what I do is I build my second report and do the same thing.
  I build my third reports build the do the same thing here.
  Build the fourth report. Do that so now I have all four reports put together.
  And then, much like as I showed you previously with creating the dashboard, I literally just copied and pasted all of that script information into this script here to create the dashboard.
  And then, what I did is I put a name to it to make sure that I knew all the names were different on each of the dashboards.
  So, and then at the bottom after i've done that five times, I will show you down at the bottom, down here,
  create the tab dashboard, and this is literally the the code that I showed you in the presentation and the code that will upload to the website as well. So, you'll have all this information here.
  Now invariably you are going to need to change something. You're going to forget a title of something your want to change a color.
  There's two ways to go and do that. One is you have to recreate the report itself the way you want it.
  And then you could manually go in and recreate the entire dashboard, because the coding here actually has that report embedded in it. So, you can manually create it. Or what i've chosen to do that's been more
  efficient for me is to actually go in create the new report and then change it into areas inside the script and then you're good to go. That way you keep all of your formatting your window sizing and all that the same as you'd like it.
  So, say, for example, I'll go back to this table function – say I wanted to go off and create a different table or modify that table. All I would do is regenerate that report.
  I would copy it into this area again to make sure the report gets regenerated. But then what I also have to do is take the same code
  and then replace it in the JMP dashboarding scripts. So, I'll show you there's the little trick with, that is, you have to go out and look for, Ctrl-F, and you have to look for a
  code called platform open paren. So, if you kind of see the table data here what I will do is I will look for the platform open paren.
  And then you will see here inside the display dashboard the same code is in here. And so, you simply have to replace it there as well. So,
  just remember if you're modifying something that's already existing you want to change it up in your report section, then you'll also want to change it in your in your dashboard section. Okay, so I now have my combined multi-tabbed dashboard.
  You can see that it is a segregated or I have a filter on the segments. Again, I can pick mainstream, or entry, or high performance.
  I have all my filters that are very important to me and my organization and then again there was something that's the real value with this
  is the different tabs that are here. I have a tab on Display and, in this case, I have a table in here.
  I have information on RAM so I get a treemap. That's a different way to display this. There's a lot of different variations of things you can put in here, and this is just some of my examples.
  I can look at graphics information. There is CPU information and then something that I like within the platform is i'm real fan of the parallel plot.
  That allows you to look at the variations, or at least the relationships between different X variables and then you'll see some box plots in here.
  So, this is an example of a dashboard again there, there are a million rows or more than million rows of data behind this and I I think that's a fairly robust platform. It can really be manipulated very easily.
  One thing I wanted to do in here for folks who want to pursue this is the Decision Tree platform. I would love to be able to create decision trees here that actually can manipulate through the data filters.
  That is something that is now being supported in JMP 16. I don't have JMP 16 yet, so, I can't try it out. But anyway that platform is now added.
  I think that would be incredibly valuable some sort of decision tree platform to come in here and actually have it affected by your local data filters.
  So that is the, that is, the dashboard and so really and trying to end here – again just a reminder – that this is something that I really hope can be very powerful,
  be a very effective and efficient way to communicate in your organization. And, I hope that this presentation and the associated JMP script can really help you and further your career. So, I thank you very much for your time.
  And that is it.

Posting my presentation and associated JMP script.


@kjdoran Great presentation!  Can you elaborate on whether your audience consumed the dashboards via JMP or not?  A lot of the interactivity you showed are only interactive via JMP (e.g. local data filters).

Hi Wendy,
Yes, the audience has to consume the dashboard through JMP. My company does not have JMP Live, or else I would have used that because it is easier for non-JMPers to use. I tried interactive .html files as well, but I had to save each dashboard separately and the local data filter only worked for the top-left diagram/report. So, I was in a bit of a quandary! I will say that requiring the audience to open JMP and push the script button has limited its widespread acceptance. I have been demonstrating the dashboard in a number of forums and that has resulted in some grassroots adoption.
I do hope the presentation and script are helpful to you!


Hi Kevin,


Great presentation, thank you.

I was wondering whether or not you have had the chance to evaluate the Decision Tree / Data Filter functionality that you mentioned at the end of your presentation? Does it work?


- Philip


You can, but if your splits get removed you will have to re-split (or script the local data filter to do it)

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Car");
dt << Make Validation Column(Training Set(.5), Validation Set(.3), Test Set(.2), Go);
obj = dt << Partition(
	X(:sex, :marital status, :age, :type, :size),
	Informative Missing(1),
	Local Data Filter(Add Filter(columns(:age), Where(:age >= 25.25 & :age <= 60)))
obj << SplitBest(2);



Hi @kjdoran 

I have been looking into your multi-tabbed dashboard, and I really like the idea! 

Unlike your dashboard, I would like my multi-tabbed dashboard to have many data tables as sources. Do you have any suggestions on changing the CombineDashboards script to make it work with multiple data sources? 


Hi there - thanks for reaching out!  Let me make a comment and ask a question or two in hopes we can successfully implement what you want.


Firstly, the CombineDashboards script is specifically coded to take existing dashboards and combine them into one, multi-tabbed dashboard.  Having said that, the code is independent of the data source(s).  It just looks at the existing, active dashboards and says "hey, let's combine these guys together."


So, my hope is that you can create your dashboards from multiple data tables, and then use the code as-is, to combine them together.


Now, the data table(s) have to be active in order for the dashboard to pull data from them, especially using local data filters, etc.

- if it is not an issue, you can just open up your data tables, create your dashboards, and then combine them.  That would probably be the easiest, but also the "messiest" from the number of windows you would have open.

- might your script be able to open your data tables and do some sort of join/concatenate function into one data table?  That would allow you to ultimately create your dashboards from one source.

- how often do your data sources change?  Is this something that you can just pull your latest data from a known path and re-create the dashboard when needed?  Or do you need "real-time" dashboard functionality.  If the latter, that is beyond what I have done in the past.


I hope this helps.  I am curious to see how you are going to solve this.  Please let me know!






Hi again, Kevin (@kjdoran )

Thank you so much for your reply! I have been looking into your questions and suggestions. 

When I have all data tables and dashboards open and run the CombineDashboards-script, I get the following error: 



It seems to be related to my local data filter in my dashboards. Both of them have different local data filters. 


I actually start with just one data table, but perform some table operations to make several data tables to get the data in specific forms for each data analysis. So, it is challenging to combine the data back into one data table. 


The data updates once a week, so not that frequently. 


Any further suggestions?


Best regards, 






I did take two of my dashboards and made sure they had different local data filters.  I was able to successfully combine them using the CombineDashboards.jsl script.  Let me copy in a few things at the bottom.


One question - to confirm a detail.  When I mention that the dashboards and the data table need to be open, I am also implying that everything else needs to be closed.  For example, if you have four reports that make up the dashboard, you need to close the individual reports that make up that dashboard before combining that dashboard with another.  Said another way, only the dashboards and data table(s) can be open - before combining.  So, I'm not sure if your error is because of that, or the script literally cannot locate a data table (based on your error box).  I don't think having multiple data tables is a problem, but that is outside the scope of my experience.


If this does not help, I would work directly with JMP support; I am about out of ideas!  Either way, please let me know how this gets resolved.  I want to learn from this experience too.







Display dashboard



RAM Dashboard






/////////////////////////////////  Create Tabbed Dashboard //////////////////////////////////////////////////
wait( 2 );
dashes = Find All(Reports);
tb = Expr(Tab Box());
For(i = 1, i<= N Items(dashes), i ++,
tabPage = Expr(Tab Page Box());
dfcb = Expr(Data Filter Context Box());
lub = Expr(Line Up Box(N Col(2)));
hlb = Expr(H List Box());
//Get Data table name to use with the data filter
wintitle = dashes[i] << Get Window Title;
wordone = Word(1, wintitle, "-");
wordtwo = Word(2, wintitle, "-");
dtname = Substr(wordone, 1, Length(wordone)-1 );
dt = Eval Expr(Data Table(Expr(dtName)));
//Get dashboard name 
dashName = Substr(wordtwo, 2);
failed = 0;
j = 1;
//Loop through the tab page boxes in the dashboard, and extract the scripts
While(failed ==0,
Try(tpb = dashes[i] << Find(TabPageBox(j)),
failed = 1; Continue();
//Try to get the script from the display box if it exisits
Try(obj = tpb << Get Scriptable Object;
script = obj << Get Script,
j ++; Continue();
//If the script is for the local data filter add the script to the H List Box
If(Char(Head(Name Expr(script))) == "Data Filter",
FilterExprStr = char(NameExpr(dt)) || " << " || char(Name Expr(script));
FilterExpr = Parse(FilterExprStr);
Insert Into(hlb,NameExpr(FilterExpr));
//Else add it to the lineup box
If( Char(Name Expr(script)) != "Scriptable[]",
reportExprStr = char(NameExpr(dt)) || " << " || char(Name Expr(script));
reportExpr = Parse(reportExprStr);
scrollbox = Expr(Scroll Box());
Insert Into(scrollbox, Name Expr(reportExpr));
Insert Into(lub,Name Expr(scrollbox));
j ++;
//Build up the display boxes
Insert Into(hlb, Name Expr(lub));
Insert Into(dfcb, Name Expr(hlb));
Insert Into(tabPage, Eval Expr(Title(Expr(dashName))), 1);
Insert Into(tabPage, Name Expr(dfcb), 2);
Insert Into(tb, Name Expr(tabPage));
//Create combined dashboard window
New Window("Combined Dashboard", tb);
//Close all the individual dash reports
For( w = 1, w <= N Items(dashes), w ++,
dashes[w] << Close Window;




Hi again Kevin (@kjdoran),


The error message above has nothing to do with the data source being multiple tables. On the other hand, if the name of one of the data tables contains a hyphen (-), I can not get the CombineDashboards.jsl to work. Removing the hyphen from the name solves the problem. 


Thanks so much for your assistance and advice, I have learned a lot through the process of debugging! 


Ah - that is a good learning; and will need to remember this restriction.


You are very welcome.  I hope your project turns out great!


Good luck to you,