I like when my JMP reports are updated daily and published automatically without having to press any keys. So, to demonstrate what I mean, I will use a case study that should be of interest to most people. Starting in 2020, I wanted to look at the evolution of the pandemic to predict whether or not future lockdowns will happen in specific countries.
First, I had to look for a good and reliable data source. After researching the different publicly available databases, I chose the Johns Hopkins Coronavirus Resource Center. My next step was to import three different data sources into JMP to analyze daily cases, daily deaths and daily recoveries. I selected Internet Open in the file menu, which made it easy and straightforward to import the data. Below is an example of confirmed COVID-19 cases.

To get this into a script, I had to convert this manual import step for the three data sets, as shown below. Here an example of the data set for the confirmed COVID-19 cases:
Open(
"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv",
HTML Table( 1, Column Names( 1 ), Data Starts( 2 ) ));
The main syntax that I used is the “Open()” function, which opens tables and scripts, as well as data from the internet! This statement is much simpler than the one automatically written to the table.
Next, the data is imported into JMP:

Now we are ready to take the next steps to get the data ready for analysis.
- Stack the dates into one column with generic referenced columns names (since the data get updated daily). The Stack option is a fantastic platform in the Tables menu that enables this task to be performed manually.

- Rename the Columns in Cumulative Cases, Cumulative Deaths and Cumulative Recovery.
- Join the three data sets: daily cases, daily deaths and daily recovery.
- Change the Date Format into Numeric and Continuous and set Date Format.
- Create three new columns using formulas for daily new cases, daily new deaths and daily new recoveries without negative values by using the Dif formula function for each column.
The negative values appeared when the location was switched in the data set (see below), which, of course, does not make any sense. Therefore, I had to create three new columns to replace the negative values with a 0 (by using the Max formula function for each column).

The final data set is now ready for analysis.

To get this automated at this stage, all the different steps for the data preparation have been scripted. And thanks to Action Recording in the log, which is new in JMP 16, my life is now so much easier. I can now easily extract the different scripted data manipulation steps from the Action Recording itself and insert them in the final script.

Now that I have the script for all the data import and preparation steps, I can use Graph Builder to visualize and analyze the data in a useful manner, as in the example below:

The top half of the graph contains the worldwide cumulative cases, deaths and recoveries. The bottom half has the worldwide daily new cases, deaths and recoveries. I added a Local Data Filter, which allows me to filter on a specific country. I added the graph script to the final script.
As last step, I want to publish this to JMP Live or JMP Public. Below is the published web report on JMP Public, the public version of JMP Live:
Since publishing in JMP 16 has changed quite a bit, here’s how you can use a script to publish from JMP 16 into JMP Public. First a JMP Live connection using desktop JMP needs to be created. In JMP 16, go to File -> Publish -> Manage Connections. Add a new connection. Next, specify the URL and API Key. To get the API Key, generate it from the JMP Public or JMP Live account settings.
In the JSL, use that connection to publish to JMP Live. Here an example of the script to publish the analysis to JMP Public (where graph1 is the report to be published). I set it public so that everybody can consume the report).
webreport = New Web Report();
webreport << Add Report( graph1, title( "Graph1 Title" ) );
use_data = "true";
jmplive = New JMP Live( Connection( "JMP Public" ), Prompt( If Needed ));
jmpliveresult = jmplive << Publish ( webreport, Public (1));
report = jmpliveresult << As Scriptable;
Since this report is updated daily with new data, the existing reports need to be replaced.
jmpliveresult = jmplive << Replace( webreport, ID( "website ID" ) );
The website ID is the code after public.jmp.com/packages/ (see below), which enables you to replace the content of the existing report rather than having to create a new report with updated content.

So far so good! To get this published on a daily basis, I use the Windows Task Scheduler. In the Task Scheduler, I select a Basic Task, create a name for the task, and then have it triggered it so that it publishes the report every day at 8:00 a.m.

The last step is to tell the Task Scheduler which program to open and which action to take. Therefore, I defined the JMP16.exe path and the JSL script to be used.

Et voilà, now my report will be published and updated every day without pressing any keys. You will find the published report at JMP Public.