Design Like a Pro: Reporting

Tips for Building SCADA Reports

56 min video  /  49 minute read
 

About this Webinar

Learn how to more easily and quickly create top-quality, information-rich reports that provide greater value to the organization in this "Design Like a Pro" webinar. Just as previous webinars in the series shared practical principles of project development, alarming, HMI optimization, SQL databases, and other topics, this webinar gives you techniques for building better reports.

Bobby McKenzie, Director of Training at Inductive Automation, will focus on the fundamental tasks of querying data, structuring data, and delivering reports.

Webinar Transcript

00:00
Don: Good morning, everyone, and welcome to today's webinar, Design Like a Pro: Reporting. Tips for Building Better SCADA Reports. Just to introduce myself, my name is Don Pearson, I service Chief Strategy Officer here at Inductive Automation. I'll just be the moderator for today's webinar, and we also have another guest speaker who I will introduce to you shortly.

00:22
Don: I know that many of you have attended other webinars in our Design Like a Pro content series, which is really just all about providing fundamental ideas, tips, and practices to help you build the best HMI SCADA projects that you can. In the first part of this series, we discuss laying the foundation for a successful HMI SCADA project, developing with speed and precision and about launching projects. In the more recent installments, we looked at SCADA alarming, optimizing the HMI, utilizing templates, and combining HMIs with SQL databases.

01:00
Don: Today, we're gonna turn our attention to reporting, however, I do want you to know that we have all of these previous Design Like a Pro Series webinars archived, so if you miss them and wanna look into any of them, please feel free, they're available all through our website.

01:16
Don: Just to give you an overview of today's webinar, I'll give a quick introduction to Inductive Automation and our software platform, Ignition. Our guest speaker will then discuss and demonstrate the best practices for using parameters and reports for data structuring and for delivering reports.

01:34
Don: To give you some background on our company, Inductive Automation, it was founded in 2003, and I just have to say we're extremely pleased with the response that we've received to our software, Ignition, from integrators and industrial organizations just across the world. Ignition is serving the HMI, SCADA, MES software needs of enterprises really pretty much anywhere in the world. Today, it's been installed at industrial and manufacturing sites in more than 95 countries, and our integrator program has a... Well, north of 1300 integrators and continues to grow. Ignition also, it's being used in virtually every industry, oil and gas, water, wastewater, food and beverage, government transportation, packaging, energy, databases. As many, many others that you can think of is probably a place where Ignition is being used.

02:27
Don: We're also in 32% of Fortune 100 companies. Thousands of companies around the world are using Ignition. I think we're around 25% of Fortune 500 right now. You can take a look here, just a few of the major companies that depend on our software to build their own flexible and innovative HMI, SCADA and MES systems. If you're interested further, certainly you can go to our website and there's a more extensive list of customers and also a little breakdown by industry, if you're interested in seeing who's doing work with Ignition in your industry. And if you're new to Ignition, and this maybe is your first time, we'd certainly be proud to have the opportunity to serve you and your organization also.

03:07
Don: So just a question of why is Ignition being adopted so quickly across so many industries? Really, it's because the end user organizations, the integrators, they're realizing that it really is a powerful platform, it really is a lot more than just HMI, SCADA. And it's SCADA also, it's MES also, but it gives you the power to just do about anything you wanna do, architect any kind of system you want. It's unbeatable as HMI, SCADA, and MES clearly, but the technology, the licensing, the architecture, are really different from any other SCADA software. So it's powerful enough for just about any project, flexible enough for just about any architect you may wanna do, and capable enough, as I mentioned, all the industries for just about any industry.

03:55
Don: If you're new to Ignition and wanna know more, certainly we have many webinars archived and more than willing to give you that kind of background. You can also go to the site and download it and just learn for yourself. I'm just gonna take one slide and hit six key characteristics of Ignition, and then we'll get off into our reporting presentation for today.

04:16
Don: First one, its Web-Based Deployment. With Ignition, you have the ability to instantly launch clients from a central server to any industrial, or any individual machine you may have without your industry or organization, and all it has to do is be equipped with a browser. Unlimited Licensing, Ignition's unlimited so you can have the freedom to add any unlimited number of clients, screens, tags, connections, devices at no extra cost to you, unlimited projects, many designers as you want. So it's very powerful in the fact that it does not put any breaks on you as far as expanding your projects. You don't have to think about that licensing component of tags or clients when you're creating. The third characteristic, Security and Stability. Ignition is built upon industrial grade security technology with a solid, unified architecture and built-in redundancy.

05:10
Don: Next, the Real-Time Control and Monitoring. Ignition's real-time status controls and gives you the ability for analysis, so you have the power to quickly analyze and easily display the status of your facility. And rapid development, and I would also say rapid deployment here. It's object-oriented, so that object-oriented rapid development environment allows you to quickly create powerful, dynamic HMI, SCADA projects and do it with ease.

05:42
Don: And the last bullet here, I guess, is Easy Expandability. Ignition's modular architecture is extremely flexible and scalable so it perfectly fits your company's HMI, SCADA and MES requirements. And that means it grows with you, so it's really perfect fit for your company now, wherever you are, and also into tomorrow as you expand and grow.

06:03
Don: With that snapshot of the Ignition platform, let's move on. I'd like to introduce today's presenter, Bobby McKenzie. He's Director of Training here at Inductive Automation, and Bobby's actually been with Inductive Automation since 2007, working in project implementation, software support and training. Currently, he leads the company's training division, and in that role, he delivers overseas Ignition courses at our technical training development center and throughout the US. He also manages the development of online training content for Inductive University. So Bobby, thank you very much for being here. I'm gonna turn it over to you and you take it from here.

06:46
Bobby: Alright. Thanks, Don. Today, I will really be focusing on the fundamentals of report data and delivery. The reason is that there are many different reporting systems available, and each one has a different interface for visually designing a report, but regardless of which reporting system you're going to use, you have to know how to get the data that goes into the report, how to structure the data and how to deliver the report to the people who need it. Those tasks are the real keys to building better SCADA reports. The tips that I will give you are pretty broadly applicable, but I'll demo them using the Ignition Report Designer.

07:27
Bobby: So first, let's talk about how to use parameters to build your report. All reports start with data. Whenever you create a report, you need to specify one or more data sources, and more data for more sources makes for a more valuable report. Data sources can include various types of queries such as SQL queries, tag historian queries, tag calculation queries, and alarm journal queries, but data can also come from scripts, they can come from static CSVs, Excel files, and even web service. In order to get any of that data, though, we need to create some sort of a set of parameters.

08:08
Bobby: So what is a parameter? Parameters determine how we get the data for our report. To summarize what parameters do, parameters are what you use to set values for a report. Parameters get passed in when a report is executed. You can make a data source dynamic and customize your reports by adding parameters and they allow you to define where you want to get data from. All parameters have these basic properties, a parameter name, a parameter type, such as date, string, double, Boolean dataset and a default value. There are two different forms of parameters or two different ways to use them. There are data parameters, which are values that can be shown on a report, but the more commonly used form are filter parameters, which we used to go retrieve data. An example of a data parameter is one that's linked to the current value of a tag, like maybe tag/time. And an example of a filter parameter is something like the start date and end date for a query.

09:19
Bobby: Parameters are important because they let you build a report in one place so that you can use it over and over again. It can reference different things, but it's defined in just one place. If you create a report without parameters, it'll just fetch data and you'll be stuck with whatever it gives you, you won't be able to customize it. And back in April, we did a Design Like a Pro webinar about templates. In that webinar, Travis talked about the template parameters and the same ideas apply here, you design it once and then use it over and over. And trust me, you'll save major time and effort when you don't have to define boundaries of your reporting data again and again. As a quick example, let's say you have four different machines and you need a data report for each machine. If you don't use parameters, you'll have to create four different reports with the exact same data and hard code which machine you want to get information from. But with parameters, you can create just one report that you can get any of the data from the four machines.

10:21
Bobby: So now I'll show you some examples of the parameters we've talked about using the Ignition software. So I'm gonna bring up my design here, and you can see that I have in my designer a window with the tag history report on it. And if I select the tag history report, and I come down to the very bottom of the property editor, you can see that we have these three report parameters already configured on it. We have a start date and an end date, and we have a title. For those of you that are familiar with Ignition, you can see that the start date and the end date are already bound to something, and in fact, they're bound to this date range selector down at the bottom. So if I go and move my date range to a different day or a different size of time, then it'll adjust the tag history accordingly. Alternatively, we have this title here and the title is just a value that's directly put into the report, and like I was talking about default values here, the default for the title is this tag history report, but if I change it to something like my report, then you can see the title up at the top is modified, and these are in the designer, but of course, you could add additional components onto your screen to allow operators to modify these on the fly.

11:36
Bobby: If we go down in the project browser here to the reports section, we have our tag history report here, so if I hit my preview tab, you can see it's the same one. But if I go back to the data tab here, you can see here where our parameters are defined. We have our start date, our end date, and our title, and for each of these, we have some default value, like I was saying before, tag history report for the title. And you can set your start date and end date to something like the last five minutes or the last three hours, or go fetch data from the database or whatever you want to do with it. But once you get to your window, then you can put bindings on any of these things. So let's go back here.

12:26
Don: Let's see if we have any questions here right now. I'll look at it right now, we might just... I've mentioned we're gonna take a break every so often and just see if there were any questions and give you guys a chance to answer them. So a couple of seed questions here, I just wanna ask one of 'em 'cause I think it's one that someone's gonna ask anyway, but you mentioned default value for parameters. Are all of the default values static or can it be dynamic like for the last six hours of the most recent shift today and so on? We might have mentioned some. Can you make sure that's clear on how that works with dynamic or static values?

13:00
Bobby: Yeah. Like I was showing there, we had an expression that was built up using our normal expression language, so our start and end date, while in our example was bound to a date range selector, it also has the ability to do... In that case was date arithmetic. But like I was saying previously, you can find that using whatever method that you want to, so that way you can have data retrieved from anywhere in your system as a default, and we'll take a look at that later when we talk about sending reports out automatically and why that might be important.

13:39
Don: Okay, cool. So here's a couple more, we'll just take you on in this particular section before we move on. Is it possible to pull data from a query result into a parameter? It's Peter's question.

13:48
Bobby: Yeah, Peter, there are several different ways to do that. One of them, probably the most straightforward way would be once you already have the report on the window, you can find any of those parameters using all of our standard bindings. So if it's a dataset type, then you have access to more, but with the standard types like date and integer, and float, and all those, you have access to the property bindings, expression bindings, the SQL query bindings, and the tag bindings as well.

14:22
Don: Okay, let's take a couple more on this subject here. Well, first off, what's the device you're using to select the date, time range?

14:29
Bobby: The component that we use for the date and time range was the date range selector component, and that's just a personal preference for me, that's the one I like. But we also have a dropdown date component, we have a static date component that looks like a calendar, both of them, so that you can click on the day and then select it by typing in the time at the bottom. Or you could go and have something that runs a query against the database that fetches information for your time.

15:01
Don: Okay, and John, your question is, what version of Ignition's being used? This new reporting module that we're doing here came out with a 7.8 version of Ignition. So a couple more quickly before moving on. In looking at the setup races, I'm assuming you can add parameters by selecting the plus icon?

15:19
Bobby: Yeah, that's right. If you click on the plus icon, it shows you all the available types of parameters and data sets that you can add.

15:26
Don: Okay, this is a backing question, what is the designer built with? Jython? And what do the GUI front end? Or is it built from scratch? Or are you building on another software base?

15:35
Bobby: Well, the designer itself is built-in Java. Ignition is written with Java, and so we did that designer from scratch on our own, but once we give the designer to you, we use that graphical interface where you can drag objects in from the right-hand side of the screen, and then we actually have Jython as a scripting language to allow you to do more complex actions.

16:00
Don: Okay, some of these, well, I'm gonna give a couple more here, you guys got great questions, but I've got a couple of more answered now and then we'll move on 'cause I think you'll have more even as we go further in. But, Can you use a UDT in a report?

16:09
Bobby: Unfortunately, right now, the UDTs aren't supported in reports. You can always grab individual parameters from a report... From a UDT by just adding multiple parameters, and you could have a parameterized UDT on the screen and then have the report run from that.

16:33
Don: Okay, and last one before we move on here, and then we've tried it on all of these, but just wanna know, is it easy to convert existing reports into the new report designer, and how, and is it recommended?

16:44
Bobby: Yeah, absolutely. We try to make it as easy as possible to do that. When you install the new version of Ignition, your reports will stay exactly the same from the older version, and then you have the option to right-click and then upgrade the report. Now, we do recommend, of course, that you check and make sure that it's done everything properly before blessing it as good, but it should be very simple to do, and we're constantly working on improving that system so that it's more and more foolproof as we go along.

17:16
Don: Okay, I'm not gonna be able to get to all the questions right now, but we're gonna try and answer all of 'em. Do you want me to describe that one too? Oh, that one's, that's gone okay.

17:26
Bobby: Yeah.

17:27
Don: Okay, good, we'll keep getting to questions, but let's have Bobby continue on for a little bit now.

17:33
Bobby: Okay, there we go. Okay, so now let's talk about data structures, the next part, which is what we're used to putting the reports together. There are three main data structures that will go over today, single dataset, peer data sets, and the parent-child dataset. Let's start with the most basic, which is a single dataset. So what is it? It is exactly what it sounds like. It's one dataset composed of simple data in rows and columns from a single source. Single datasets are used to make the simplest types of reports. And why would you use it? Well, when you only have one dataset that you wanna display. For example, you would use a single dataset when you query a historical source like tag history, and you get the one result back. So you create a report for your history with no other data on it, get that one simple data and display it in a graph or a table, and you're done. Many of the reports in Ignition are done just like this.

18:44
Bobby: So probably everyone listening to this has made a simple report with a single dataset. But what happens when we have multiple different datasets that we need to bring together as one? How do we represent it so that we can build the best report possible? In those cases, when you have more than one thing to display, you need a more structured approach such as a peer dataset. So what are peer datasets? They are sets of non-related data. So the data going into the reports have no inherent relationship, but we want to show them both in the report or all of them. We aren't sure how long the datasets are going to be, but we wanna show them one after the other in a way that is easy for the reader to look at.

19:32
Bobby: As an example, when you use a peer table, take for example, a recycle facility that might need reports for different products that were made in the same day. You could have all the plastics recycling for that day followed by all the aluminum recycled for that day, and so on. You could have different columns returned for the different datasets because you may need to get different values for aluminum than you do for plastic. The data are not related except for the fact that they are from products that were made on the same day.

20:02
Bobby: So now I'll show you how to do peer tables in Ignition. I'm going to pop back over to the designer here, and then if we go into our recycle report here, you can see that I'm on my preview and I've got plastic information with date and timestamps, and then we have the type of plastic, the density of the plastic, colors and then maybe values related to what's been managed. And then for aluminum, we have different information, maybe the energy it takes to retrieve the aluminum, the value may be the same and maybe we have multiple lines for it. So we have two datasets that don't fit the same category and can't be combined naturally, so if we go over to our data tab here, you can see we have our start and end date parameters similar to the previous report, and then other data sources we have two distinct queries, one for aluminum, which you can see we're grabbing all the information from an aluminum table where our timestamp is between our start date and our end date. Again, we're looking back to those parameters.

21:04
Bobby: And then similarly, we're gonna go to our plastics table and do the exact same thing, just the data from a separate table. Once we've got all that information into the report, we can click over to the design section, and then on our table, and that's in the center here, you can see now we've configured it as a table group. So now we have plastic first and then aluminum second, and as I cycle through the two, you can see it jumps back and forth between the two different table designs. And all that means is, first, it's gonna show the information for our plastics, and then once that's done, go to the aluminum.

21:39
Bobby: So now let's talk about the parent-child dataset. A big difference between a peer table and a parent-child table is that the peer tables are for unrelated data while the parent-child tables are for related data, as the name suggests. They are related in the sense that each record of the parent is related to a whole other data set in the child. So child tables are inserted into each row of the parent table. The parent-child format is really useful for structuring different sets of data, it's very important that you know how to bring back different kinds of data from a history and the database script, web service call, whatever you'd like, and to put it together in a parent-child relationship. Parent-child is also referred to as nesting, because you can nest one set of data inside another. In other words, the child data is nested inside of the parent. This structure lets you gather data from different sources that showed the relationship between the data in your report.

22:44
Bobby: As an example of parent-child or nested datasets, let's say that you have a report set up with a row for each piece of equipment that you're listing. You wanna add a separate table under each row that shows some additional information about that piece of equipment such as downtime for each equipment.

23:03
Bobby: So now I'll show you how parent-child data structures are done in Ignition. We'll pop back over to our designer here, and this time I'm gonna go to my nested report, and then in this nested report, you can see it's very similar to the recycle report we just looked at, except we have one query here that gives us our run information, so we're going into our production runs table, we still have that same start and end date, but we're pulling back information like the ID for the run, which line it is, what the product is, all that stuff. But for each record that this query returns, if you look over on the right here, we have this nested query section. So for each record that this query returns, we're gonna go grab history. If I click on that, you can see here's our historical tag selector. We have this downtime Pareto dataset, which is going to grab a special format of our downtime table for each run. We have comments that are associated with each individual run, and we have downtime entries, the actual raw entries for each run.

24:11
Bobby: So let me show you what this looks like. If we click over to our preview tab here, we have a report that's not quite a bit more interesting, we have our Line 1, Run 1 and we have a process trend, we have our downtime Pareto, we have the actual raw downtime information, and then we've got the comments below that, and you can see we have multiple pages because each of this is now repeated for each run, each one of the parent records. So now let's... Time for Q&A.

24:44
Don: I do, we'll have a couple questions and stuff like that. Just a couple here to start off with here. So you're talking about nesting and parent-child relationships, but a common question is, how deep can you nest in a parent-child report? Entities you want, whatever, what's the deal on the nesting limit?

25:03
Bobby: Yeah, there actually is no limit to how far you can nest in those parent-child relationships. The real realistic limit is, how far does your data actually go. We don't impose any sort of limit on it, and you can keep going until you run out of data.

25:17
Don: Okay, and you mentioned also a couple things as far as different data sources to come into the child report underneath the parent. What's the breadth of that? How many data sources? How many different types of data source? Can you bring ERP data? Is there a limit on what kind of data you can bring in?

25:34
Bobby: There's no limit at all on what kind of data that you can bring in. A good example of that is, if you have an ERP system that pulls in maybe different products that are on your schedule, for each product you might have in your database information about the run for that product, so you can say, go query your ERP system, and then from that, bring in accounting information, bring in run information, bring in downtime information, whatever else you have, as long as there's some way to link back up to the parent row, some identifier that you can hook into, then you can bring that data back.

26:11
Don: Great. I know this is a side question, but since someone asked it, I might as well bring 'em up, just speed a little bit, what is Jython? Can you give a quick answer to that or define?

26:20
Bobby: Yeah, so Jython is a programming language that it's Python for Java, so that means that inside of the Ignition, which is written in Java, we give you a space to write Python code, and then it's just automatically converted into Java for you. So it actually ends up making your scripting very, very simple inside of Ignition. If you've ever done any kind of programming before, I highly recommend looking into Python. It's very, very easy to use, and the syntax, it reads like English, so it's very simple to understand what's going on in one of those, which is why we chose that.

27:00
Don: Cool. It says, What did you right-click on? You right-clicked there. Why did you right...

27:04
Bobby: Why did I right-click on?

27:06
Don: Yeah. I'm not sure what part of what your [chuckle] download was being asked on, so I'm sorry, Kent, we're not sure what the question is relating to on the right-click. So let's go over to the next one. Can you design the tables to be side by side?

27:22
Bobby: The tables can be side by side. The ones that we saw there, we had one parent and multiple different children that were all children of the same parent so they were side by side, they were next to each other. If you wanted to, you could nest them inside of each other, but then again, you'd have to have some hook to reference between the two.

27:44
Don: And Rey, just to your question, you have 7.7, this new reporting module came out with 7.8, so you need 7.8, you gotta upgrade to 7.8 to have the capabilities there. Can you design the tables, Howard says, can you design the tables to be side by side? I'm sorry. [chuckle] I lost track there. Okay, good. Do the databases have to be at the same server? Or can they be on different data connections?

28:11
Bobby: The databases, it's most certain they can be on different servers if you want to, and in fact, that's what we recommend. Ignition has the ability to create as many database connections as you want, and so long as you're on the same network as the database connection or the database you want to connect to, it'll work just fine.

28:30
Don: Okay, this one here is where you use the question mark as a placeholder in the SQL query, is there any limit to the number of place-holders you can use in a single quarry?

28:42
Bobby: No, there is not. You can have as many question marks as you want, and each one has a little space at the bottom of the page, and if they get too small, there will be a scroll bar created there, so you can keep going indefinitely.

28:54
Don: Oh, okay, Kent, thanks. She says you found it, right-click on Report Viewer Converter, thanks. Glad you got your answer, Kent.

29:01
Bobby: That's right. When I said right-click on the report viewer to upgrade it to the new 7.8 version, I meant in the designer, right-click and there's a convert option.

29:09
Don: Thanks. Okay, we'll do a couple more and then we'll let Bobby continue here. Is it possible to control the moment the report queries are run? Or they're automatically executed when opened?

29:23
Bobby: Yes, and we'll talk about creating reports on a schedule in just a little bit here.

29:28
Don: So let's hold. Eduardo, you will get that answer more fully as we go forward here. Can you make each run on its own page?

29:37
Bobby: Yeah, absolutely. There are Page Break options inside the report designer that you can say for each individual record in the run table, jump to the next page. Absolutely.

29:48
Don: Okay, cool. And one more here and then we'll let you continue. Can you bring an image data?

29:53
Bobby: Yeah, you can bring in images. There is specifically an image component that you can use inside the report designer, and then also there's a way to get images from the database to create mappings.

30:07
Don: I'm gonna do one more 'cause I think others may have the same question. Can the same data be exported to Excel or external programs like JMP's statistical data?

30:18
Bobby: The data can be exported from Ignition, how you want to export it is up to you. We'll look at a list of all of the exports we already have natively, but specific programs like the JMP... I've lost it. The JMP, the software, that one, we aren't familiar with that data format, so if you wanted to export to that particular format, you'd have to know a little bit about what that format entails.

30:52
Don: What does the question mark refer to?

30:54
Bobby: The question mark refers to a parameter or some other value that you're going to be passing into the query.

31:02
Don: Great. Okay, guys, we're trying to keep you guys along so keep bringing in your questions, but I'm gonna stop now and turn it back and let Bobby just move forward and we'll probably get more answers as we go along.

31:11
Bobby: Alright. So now, let's talk about delivering reports. Now that you've defined and structured data for your report, you have to get it in the hands of the people that need it. There are basically three ways to get a report into someone's hands, you can manually generate up a report, you can schedule reports to run at regular intervals, or you can generate a report on some event like something happening in the PLC. So let's look at each one of those delivery options.

31:44
Bobby: So you can manually generate a report in a client or application, you can fill in the data and the parameters, and you'll get back a report that you can print that right there on the fly. The use case would be that someone requests a report that they can get quickly because of some urgent or special need.

32:05
Bobby: So here's how you would manually generate a report in Ignition. Now this time, I'm actually gonna go to our client instead of our designer, and you can see, I have that same tag history report. Once you're in the client and you go to a report page, you'll remember that we had a specific date range set up, and I can adjust this however I'd like, and if you right-click, you can see you get several different options here. I can go and print out the report or I can save it as any of these three different types. So if a user wants a specific report right away, then they can just go into the client and grab it.

32:44
Bobby: So the next method here, the automatic reports are scheduled at a set recurring time, something like every hour, day, week, month, whatever you'd like. They're set to run automatically at the same time, so nobody needs to take any action to get the report, and this is the delivery model you'd use when you're going to need the same info at the same time on a consistent basis. For example, if you need a report every work day at 5:00 PM so you know how your operations performed for the day. Once the report has been scheduled for automatic delivery, we have to select how it will be delivered. Usually, reports are emailed to someone or printed, saved to a server, it might be uploaded to a website, or we can use some combination of these methods.

33:36
Bobby: So here's how to make automatic reports in Ignition. Again, I'm gonna go back into my designer here, and then if I go back to my tag history report, then over on the right, up at the top of the screen, we have this Schedule tab, and on the Schedule tab, you get to set up however many schedules you'd like to go and do whatever you want. So for example here, we've got one new schedule. You just click on the little plus icon on the far right, adds a new schedule here, and then you can select whatever rate you want it to run at. In this case, I've chosen twice per day, 0, 12, star, star, star, and what that means is at midnight and noon. And you can see there's lots of different options with the words here for you. Or if you want to, you can choose a custom one, and if you choose custom or if you come and modify any of these values, then it'll automatically flip to custom, and you can see here that we have the minutes, we have two different hours of the day, and then every day, every month, every day.

34:40
Bobby: Once you have your schedule set up, you can come over to the Parameters tab here, and you can see here that we have the three different parameters for this report, that same start date, end date, and title. And we're just using the default values for them, so I believe that was five minutes worth of data, or you can uncheck these and then put in whatever expression that you want using the standard Ignition expression language. Once you've got your parameters set up based on your schedules there, I can click over to my Action tab and you can see here, we have this Save File action. Now, if you click on the little plus icon here, you can see we have a whole bunch of them, you can print the report, send it to an actual printer on the system, you can FTP it, you can save it to a hard drive somewhere, which could be a shared drive if you wanted to. You can email it or you can do this run script, which is just a script where you can do anything you want.

35:34
Bobby: For example, here on Save File, I'm going to save to a folder that's called Ignition Reports on the C drive, and that's actually on the computer Ignition's installed on, and then I'm gonna save it using this format for my file name, so whatever the report name is, plus add some date information. And then over on the far right-hand side here, we have all the different formats. So we have PDF, HTML, CSV, all that information, so that you can save in whatever format you'd like. And of course, some of those formats make sense for some reports and some of them don't. For example, CSV doesn't make sense to use that one if you have a graph, but PDF is fantastic if you have pictures in your report.

36:21
Bobby: So the third type of reports here are those that are triggered when an event occurs in the PLC, and these are also called event-based reporting. For example, the report will run when triggered by an event such as a tag change, a shift change, finishing a production run or whatever you'd like. As with the automatic reports, we have to specify how we want the triggered reports to be delivered, whether by emailing, printing, saving, uploading, whichever. As an example of a triggered report, let's say your manufacturing widgets, you're putting widgets into a box, and once the box is full, the PLC knows it and says I'm done, it presents a WIP or Work-in-Progress label automatically. So if someone just gets the label, slaps on the box and the box continues on its way. That WIP label was generated automatically based on the event of the box getting filled, no one has to push a button at the right time to make a label. Another example would be that some event occurs and then it emails the report.

37:32
Bobby: So let me show you how to set up triggered reports in Ignition. I'm gonna pop back over to the designer again, and then you can see here, I have my tag browser and I have this report trigger tag. Now, this could be anything that you want, but for simplicity, I've made it a memory tag, and if I right-click and edit this tag, you can see that it's got a tag event script on it. And if I go to my value change script, you can see here every time the value of this tag changes, it's gonna go and execute this script.

38:06
Bobby: So it's a pretty simple script, the important part here is we have this system that reports that execute and distribute. We give it the path, the name of the report in this case, which project the report's a part of, what action we want. So I want to save it and then some action settings, and the action settings change depending on the action. You don't need an email address if you're saving, but you do if you're emailing. So here we have the path that we're sending it to, what file name I wanna use and what format we're going to use. And that's it. All we have to do is just trigger this tag to change a value and then it'll go and save off the report.

38:46
Bobby: And there's another thing worth mentioning about delivery. Many industries today have certain reporting requirements that they need to comply with. You can use existing PDFs as the background of your reports, which makes it very easy to create compliance reports, and compliance agencies are now providing lots of ways to automatically send those reports in, like using web services or FTP. That's really good to know because it saves you time, it reduces the possibility of human error and it makes it easier to meet your compliance requirements.

39:22
Bobby: So before I pass it back to Don for Q&A, I wanna invite everyone to a follow-up training session that we'll be doing in one week from today. On Wednesday, November 18th, we will do a personalized reporting training session on GoToWebinar. We'll demo more of the reporting features in Ignition, which includes a fully rebuilt designer interface, which we've seen a little bit of. And if you're interested in that, here's all you need to do. After this webinar ends, you'll get an email from Don, click on the link in that email and it will take you to the sign-up page. This is an exclusive invitation to our listening audience today so please watch for Don's email so you can sign up and learn more about this subject. Thank you everyone for coming today. And back to you, Don.

40:07
Don: Okay, that's cool. Thanks a lot, Bobby. And we're gonna get into the Q&A, but I just wanna mention a couple things before we do. One is, some of you may be new to Ignition, so please try it for yourself. We're gonna get into Q&A, but nothing replaces, just put your hands on it yourself, so you can download it in InductiveAutomation.com, it's full version, it's free, it will be up and running in three minutes, you can install, design, and never times out. So if it times out after two hours, it runs for two hours, you can just reset that timer and build your own system with Ignition, giving you a chance to try it fully before you ever have to buy it.

40:51
Don: Next, I wanna emphasize, I mentioned at the beginning that Bobby's responsible for the content and development now of the continued growth of Inductive University. If you're not familiar with it, you should go to Inductive University and take a look at it. They have Ignition development tips, including videos. I think there's close to 600 going there, Bobby?

41:09
Bobby: Mm-hmm.

41:10
Don: Six hundred videos, they're 1-3 minutes that give you an opportunity to just learn any aspects. You can search for a certain area if you just wanna know more about alarming, but you can also get credentialed, which leads towards certification. It's a free online training service, and you can earn your credentials so just sign up and start. Now, we're gonna go into a fuller Q&A. One that was asked before, I'm not sure... How can I get that icon of reports in the menu of the designer. In my designer, I just have a report viewer in the right menu.

41:44
Bobby: Okay, so if you're talking about... Let me pop back over to the designer here. If you're talking about this reports object here in the project browser, that's new in 7.8, so the reports were designed differently in 7.7 and below, so you need to have 7.8 to have this new style of reporting.

42:05
Don: Good. Thanks, Bobby. So let's go to, for example, this is a question I think about the recycling demo. I think we already answered that set side by side verse on top. That's great, I'm thinking that maybe when the report is opened, we haven't set the proper parameters yet. Oh, that's Eduardo answering his own question. Can you name the parameters instead of with a question mark?

42:28
Bobby: There's two different ways to do queries, we have a SQL query and a basic SQL query. One of them uses named parameters and the other one uses the question mark, but if I pop back over here real quick, into the data section, if I go to our query... Excuse me, let me go to the other one. The data under the recycle report, we used question marks here for a timestamp, and then down at the bottom, you can see that we have our parameter one and parameter two objects here, and these are created because of the question marks. If I were to add a third question mark, then it'll add a third parameter here. So it'll do something like this. There we go. So once we have that third question mark in a different spot, you can see now we have a third parameter.

43:24
Don: Thanks, Bobby. Here's another one here.

43:28
Bobby: That was it.

43:29
Don: Oh, then we just did that. Can you pull the data directly from the operating machine and can your software navigate the newer security internet connection?

43:42
Bobby: So in terms of if you can pull data directly from the operating machine, it depends on how the data exists on the operating machine. For example, if you have a serial connection into the operator's machine, then we have a module that allows you to directly pull in that information as well as you could script it, if you wanted to. If you have flat files that are stored on the computer or maybe your machine is spitting out CSVs or something like that, then we can also pull in the data that way. There's lots of different options for getting information off of the existing computer.

44:21
Don: Okay, Pete Hafsor's apologizing for joining late, but we'll let him slip in a question here anyway, okay? So Pete, your question is, "I joined late, sorry. If you can... " We covered this already. "Can I call stored procedures? I'm using SQL server."

44:35
Bobby: Yeah, absolutely. This select query is run against your database connection, so as long as your database allows storage procedures, you absolutely can, you just need to know the format for it, which is usually you put in Exec and then the parameters for your... The name of your stored procedure and then the parameters for your stored procedure...

44:57
Don: So is it possible to upgrade a 7.7 report to version 7.8? And also an add-on question, Is it possible to upgrade to version 7.7 project to version 7.8?

45:09
Bobby: Yeah, absolutely. We try to be 100% backwards compatible all the time, and 7.8 is no exception to that rule. All you have to do is run the installer for 7.8, it'll see that you have 7.7 installed and running, and it'll upgrade everything that's in your gateway for you. The one exception is the reports, you have to go right-click and say, "Convert to the new version." Because we decided not to do any of that automatically because it's a compliance issue, it's generally a very touchy subject, so we make you do that on your own. But absolutely, you can upgrade it all. We do highly recommend though, run a test environment, especially if you wanna just use our demo or trial version, you can use a gateway backup, upgrade, make sure everything works perfectly, and then you can load it on to the production computer.

46:11
Don: Great. Is it possible to control the moment the report queries are run? Or are they automatically executed when opened?

46:18
Bobby: Yeah, so when we talked about scheduling, that allows you to have a specific moment that they are run, but when you open them up on the window, they do run immediately on window opening, so you have both options available to you.

46:35
Don: Okay, let's try another one. Can the question mark parameter be used in the SQL query be used in 7.7? I think that's a no.

46:44
Bobby: The question mark parameter used in the SQL query in version 7.7, technically, yes. The answer is yes, but not in the way you would think. It's a prepared statement for those of you that are familiar with the terminology, which allows us to put that question mark in so that we don't have to add quotes and take into account characters that might end your query and do an injection attack. It makes everything very safe, but this whole query section doesn't exist in reporting in 7.7. So no, you can't do that in reporting, but yes, you can because in the old reporting, you would just use a SQL query to go and fetch that information, and if you did it in a script, then the script does allow you to run prepared statements, so yes, you can use the question mark then.

47:38
Don: Cool, thanks. Yeah, John, I think we, hopefully, answered your questions. John, if you have more and wanna get deeper on that kind of stuff, certainly we can follow up and help out in that area. So I was talking about a question on trigger reports. With a trigger report, it appears it was a static file name as report, PDF. How do you tell this to use the script created file name?

48:01
Bobby: So you can't tell it to directly use the expression in your schedule there, but you can use expression or scripting to go and create the file name in the same way. The idea of being here, when you're triggering the report, you're almost certainly going to wanna put different information in, so you're not just gonna use the default stuff. So you can go and create whatever name you want, use whatever timestamps or anything like that, just for simplicity's sake, I just hard coded the name.

48:36
Don: Steven, you said what? You are asking a question if there's gonna be a webinar about tag building and screen creation. I don't know that we have one on tag building and screen creation right now on our agenda going forward, our lineup, but we just got your input so we'll just take it into account and if more people are interested in that, that's how we determine what the topics are for our Design Like a Pro Series. So anybody interested in that topic can give us feedback, and if it's enough folks want it, we'll do it, Steven. Next one here, When scripting, does a tag that exists only within the script have to be present in the tag database?

49:12
Bobby: Well, tags exist inside the gateway and there's no exceptions for that, they always just exist inside the gateway. It has to exist somewhere in order to be a trigger for it or to be used in a script, but you don't necessarily need to use tags, you can pull information from your database or whatever else you'd like. If you had a button on a window that triggered a report to run, you could use the exact same script there and then reference properties that are on the window.

49:42
Don: Since you can go to PLC, some are TCP/IP, Mon TCP/IP, Get TPIP. Is that all possible?

49:57
Bobby: So when we connect to devices, Ignition separates that out quite a bit. We have our own OPC UA server that allows you to connect to many different devices based on the drivers we have, so like Allen-Bradley, Ethernet, Modbus, TCP and RTU, and those sorts of things, Siemens. But if we don't have the driver for you, you can always connect to another OPC server, so like Kepware or Matrikon, or whatever you'd like. And then if they have the driver you need, then we connect to them and they connect to the device, and then it just comes into Ignition regardless of what OPC server it came from, it comes in exactly the same as an Ignition tag, it's just a different OPC guided path. So absolutely, you can use anything that you can connect to through any OPC server.

50:50
Don: So John has a question, how often do you all tend to upgrade your software and are all those upgrades covered by a support agreement? We certainly have upgrade protection and total care support, and yes, they are covered. As far as upgrades, I can tell you that we're looking at 7.9 as far as major version sometime in the middle of next year. What are we, Bobby? 12-18 months? I don't know. In terms of major releases?

51:14
Bobby: Yeah.

51:15
Don: And then of course, a lot of releases along the way in terms of improvements, minor releases.

51:19
Bobby: Yeah, minor releases are always free for the people that have that version.

51:25
Don: That version, yeah.

51:26
Bobby: And we release those as quickly as possible to make sure everything works correctly, but yeah, major releases are every year, year and a half.

51:32
Don: And we have 7... Are we 7.8.1? Is that, what's the next...

51:36
Bobby: Yeah, 7.8.1, like I said, we're always making small fixes to the software to make sure everything works perfectly. So 7.8.1 is in the works right now, we're doing extensive testing on it at the moment. Soon. It's hard for when we can say...

51:52
Don: Soon. So your question, Gimli, Any updates to 7.8 coming out soon? The answer's yes, coming out soon so just stay tuned. We got a few more, just a couple more minutes here. We'll take a couple more questions. For automatic report delivery, one of the options was email. Do you have to have your own email server to deliver these reports?

52:10
Bobby: Yes, that is true. You do have to have your own email server. We don't have any sort of hosted email solution, but your IT department should be able to give you all the information you need, and it's all very basic, it's just SMTP servers, so you'll just need the SMTP address if you're using SSL, what port, what username and password, and that's basically it.

52:33
Don: Okay, would you need to have the alarm notification module to trigger a report when a certain condition occurs?

52:41
Bobby: You do not need the alarm notification module to trigger a report based on a value turn into true or something like that, but if you wanted to trigger it based on an alarm happening, then the alarm has to exist, which means you have to have the alarm notification module, or you'd have to have the alarm module, but you could just mimic that without the alarm module if you wanted to by using maybe an expression tag or something like that.

53:10
Don: Cool. So can report parameters access the user credentials for authorization to run reports and/or see certain reports or set certain content?

53:20
Bobby: Yeah, absolutely. That one would mean that you have to set up your data sources in such a way that it checks for the user credentials, but yeah, absolutely, you could do that.

53:31
Don: Can I make a report to run only when the window is open for the first time? Are reports requiring substantial time to produce?

53:39
Bobby: Absolutely. The way these queries are going to work is that when the report is first opened on a window, it generates immediately. If anything changes, then it will automatically re-run, but if you have nothing on the screen that automatically updates, then it won't run until... For example, I had that date range selector at the bottom, it didn't re-run until I moved the date range selector.

54:04
Don: So I think we're coming to the end of our time, I think what I'd like to do, there is still... I just want you to know there's still questions in the queue, you guys have been a very active audience, so obviously this is a pretty important topic to you. We will get to these other questions, but I wanna... And it's time to finish off now and ask you if you have any final, anything to say?

54:25
Bobby: Yeah, if you've used the report in 7.7 or earlier, you guys know that it's gotten quite the over... Excuse me, overhaul. I highly, highly recommend that if you haven't played with it, download the new version of Ignition and try it out. Even with our trial mode, you can play around, basically, indefinitely with it and give it a go and see if you like it. I really, really like it. I think it's been a very major improvement to the system, and I think you guys will love it too.

54:55
Don: Bobby, I really wanna thank you for taking so many questions, covering things so thoroughly. The last screen that's up here, you guys can see just for the question, the comment screen, you got the Director of Sales, Melanie Moniz is there. All of our account executives with the extensions are listed. If you want a deeper dive, if you want to have someone really go into reports and do a demo for you individually, or you have other people in your organization that you want to get a better understanding of, please contact your account executives. If you don't have one, you can contact Melanie and give us a chance to answer your questions and let you get your hands on it yourself. The best way to see it is to download it, but if we can demo it and give you some runway into understanding it, let us do that. With that, I think we're at the end of our hour, I appreciate all of your participation. I hope this was a useful Design Like a Pro Series presentation today. Have a great rest of your day.

Posted on November 10, 2015