logo

NJP

Burst Reporting - Leveraging Workflows in Analytics - Dec. 2, 2020 - Performance Analytics Academy

Import · Dec 02, 2020 · video

welcome to office hours we're going to go ahead and get started um there may be a lot of questions so we want to make sure that we get done in enough time for all of the questions that come out so again welcome to performance analytics office hours um good afternoon good morning good evening wherever you happen to be in the world um so we'll just go over some housekeeping things before we get started so make sure my there we go sorry about that let me go back all right so this is for you so we try to bring fresh ideas and better understanding and practical guidance to different things that are out there that we get within the community or questions that are directed to us directly so again this is your time this is for you so please make sure that you get everything out of it that you can uh this is being recorded uh we will have this out on our youtube channel and also in the community when it's done so if the company that you work for has an issue um with recordings you may want to drop now so it is being recorded it's there for you q a so please use the uh q a for any questions ask any questions that you'll like we will try to answer those as we can as we're doing the actual preso when we get to the end of the preso uh and we're actually open the floor four questions we will we will answer the questions that are related to the topic uh first and then if we have time uh if there's any time left then we'll go ahead and answer the other questions um and during the preso if we can actually answer the questions while that is happening we'll do that um as well right there in the qa so my name is thomas davis and i'm the host today and uh adam will actually be presenting today you probably heard of both of us and seen both of us before so uh this is who we are so uh upcoming sessions and past presentations are always out on the community so make sure that you go there uh we try to list out anything that is in the future and then of course there are links to everything that's already out there you can definitely find all of the recordings um in the community whether it be on the office hour site or there are some other locations that are actually in the community but please go out there and look around i would suggest that you do that prior to a question that you may be getting ready to pose in the community itself because there's a good chance that there may be already in office hours that's around uh or very similar to the question that you're going to ask so i would definitely recommend that you do that prior to asking a question in the community if it's not there and you search throughout the community and you can't find what you're looking for then by all means ask a question in the community there so again as we've been saying in the past few office hours the k20 labs are still out there um definitely take advantage of the fact that they're there for as long as they may be there um that time may be coming to an end uh soon we don't know uh necessarily but just take the time to go out there and look and again this sort of goes right back to the same thing that i said before if there's a question or there's something that you're thinking about there quite possibly would be a k20 lab that is out there or if you just need some general learning uh or some even some ideas of some things to do uh definitely go out there and check out those and not and now learning taking full advantage of those so with that today we're going to talk about burst reporting in servicenow and with that i'm going to pass it over to adam you there adam i'm here thank you very much all right i'll stop sharing all right am i sharing now you are perfect thank you very much okay so let's talk about burst reporting it is a question that we get um all the time it comes up uh frequently enough and it's not the most straightforward thing to do in servicenow so we have scheduled reports which allow a user to get a report you can create a list so i can send an email out to all my managers with active incidents but um what we asked for we get asked for more specific use cases which we're going to go through today all of this is made possible as we recap a little bit about float by using flow designer so flow designer allows us to consolidate our capabilities configuration so i can as we'll see i'm going to configure everything i want um have access to all these different things in a low code environment in one place promoting automation is i think this using this technique is something that helps you do this as a analytics owner it's something you can do without having development uh with having to wait for your admins to build something for you right so it helps us promote this automation that we want to get to so i don't have to get a report slice and dice it and email it out manually to all the people who need it and then reduce costs because once we get this to work we'll see how easy it is to repeat and it doesn't take it takes a little bit more time to get set up the first time but then it's very rinse and repeat going forward and it's extendable for what we're doing today um some of it can be done just with out of the box components but i extended flow designer with a spoke that we talked about in a couple sessions ago um we'll talk about what those are specifically in in this use case but flow designer i wanted to do a little bit more a way that i wanted it to do it so i was able to extend it and still get that low code uh low code experience for users going forward what we're working with today in flow designer there are flows sub flows and actions flows and subflows are very similar that they are calling their actions the difference being that a flow has a trigger a sub flow doesn't um so flows might call subflows or you might call subfloor directly but if i have the trigger it's a flow if i don't it's a subflow and they're all calling actions in an order that we want them to go through but those three are very key to flow designer and when i do trigger it lots of different ways to trigger it we're going to focus on our burst reporting on a scheduled execution it's something i'm going to send an email out every morning to the right people but i can fire a flow uh many different ways too whether it's inserting a record or updating a record to a certain state if i get an email do something back to it anyway and anyway you can call a script you can do that as well so lots of different ways to fire what we're looking at today we're going to look mostly at scheduled execution because that's the use case we see most often ask for um and then we are going to walk through some flows to go through and flow designer allows me to build that flow logic out so in no code development um we are going to do a live demo which i'm it's going to go smoothly and we do as we do the demo we're going to see the experience of what it's like to build and again i had to extend it with a little bit of code but then once it's extended i can reuse this over and over and i can build as many burst reports as i want and all those all that extension even that a lot of that it's more of a low code experience so i'm able to cut and paste a little bit of code in um into an action but i can also reuse a lot of very common things like looking up a record i don't have to have a code to look up a record or ask for approval or send an email so it's a mix it we're in that low code space augmented with your pro developers to get it to do what you want but then once it does that you can call it very easily all right enough about that you'd seen it you've you've seen that some of that content before um and if you want more detail on it i recommend going back to the session from november november 4th where we go through it in much more detail but today we're going to talk about how do i use it in this specific use case so joan comes up to me and asks um i need to send a report out of all my active incidents to all the managers that have them great i can do that right i can schedule a report i go to the report and report designer i schedule it and i just put in all the managers names or maybe the group uh but then but then joan adds to it but if they don't have any don't send it to him well that's a problem right because today i send the report it goes to everybody on the distribution list and they have to find out if it applies to them what goes through and then i also get it even if they do have them joan adds on to it a little bit further and only send them their incidents because they don't care about anybody else's incidents um i don't know about you i have heard this quite a bit this is what we're trying to do and let's let's figure out how we're going to solve this so the way that we do address it with the tools that we have is a couple different ingredients we need we are putting these together so we need a standard report we are we are not going to do a custom notification custom scripted thing which is something which which is an option we're going to avoid that i want to do as little custom work as possible and make this as repeatable as possible with even less work so we're going to use a standard report with a dynamic filter so really important we're going to use a dynamic filter uh so that we get the is me i get that personalization from that then the scheduled report we are we have our standard report and we're going to use the scheduled report job this is important because we're not going to send a direct email we're not there in flow designer i can choose to send an email notification we're not going to do that because the scheduled report does a little bit more where it executes the report puts it in a pdf or an a csv or a png it does that for us and i don't want to recreate that right but it would have what's there is good enough for me so we're going to use that as our scheduled report we're going to schedule them dynamically in flow designer but we are using that schedule before functionality and i want to execute this on demand and to do that i have to have something that's in the scope the scheduled a scheduled report as a job jobs can only be executed in the scope that they're in so there's a couple different options here i created my reporting global so i had to have a hook into global so i needed a very very small script include in global to allow me to execute the job i can call that script include from my scope from a scope but uh it's got to be there if my spoke was all in global this wouldn't be a problem and if my report was in my scope it wouldn't be a problem um but it is an issue just to be aware of and i want to be upfront that i i am calling a global report so i have a global script include to allow me to execute now um there's probably some ways to get around that there are some ways to get around that i've got just using the scheduling but the way i'm a bit of a control freak and i want to make sure that when i say run the report send the report i can execute that scheduled report now we're using a custom spoke with actions um again we'll talk about what these specific actions are there was a bigger list discussed a month ago but we're going to talk about three specific actions that i use for for this uh this recipe and then we're using flow designer just flow designer to put it all together so as we walk through those pieces again i'm using a standard report so my standard report i'm in report designer i the use case that we have is my active incident so i am looking for incidents or active and then the extension we have here which we don't always use in scheduled reports is where the assignment group manager is me that me is really important because we're going to schedule these reports to one one report per user but uh per manager and it's going to execute as that manager and that's when it's going to get the me part of it we're not running one big report and slicing it we're actually going to run a report for each manager so again very important to use the is dynamic me we're using assignment group manager this could be assigned to this could be department dot vp a custom field it doesn't matter but we are using we want a dynamic filter that translates to a user because the report's going to run as that user that we tell it to or those users that we give it and evaluate me right it could be my groups it could be whatever it needs to be but it's going to evaluate to that user it's not a parameter we send to the report the report itself knows that we're just calling it that way scheduled report so again the scheduled report it's not like we're just sending an email with a message but we are we are setting up um we want to use that functionality that already exists so which email which users to send it to the subject um very important here is that there are limitations in the in the flow designer it's not smart enough to use reference qualifiers in the form so when you schedule a report it knows what type of report you were sending so if i'm sending a list report which i believe the example is here i can only send a list report as a pdf excel or csv if i were sending a an image i was sending a chart a bar chart i wouldn't have csv or excel i could do pdf but i could do png as well it's important to know this because when we're putting it in i can tell to do the wrong thing and then it won't work right right so i know i'm trying to send a a list i need to pick one of these and not pick embedded png if i'm sending a bar chart i need to know not to pick excel i know but i know i can pick pdf or png so again be aware of what's there even though you're not creating it uh in the ui you do have to know what the ui would let you choose so it's good to run through it once and make sure you get the right thing and that global script includes so this is my logic of my global script include again these slides will be posted um you could this is not very complicated logic but what we are using is this global script include that uh i have a method and says execute scheduled report which all it does is get a scheduled report it queries the scheduled report table and then it says execute now very simple but the the walled off nature-ness of scopes to protect from scoped apps doing things they shouldn't do we have to create this entry point which effectively gives us permission to execute scheduled reports from whatever scopes can call this and that again that is the entire the entirety we've talked about this again before running pa jobs in the session before if you were a pa job you need the same or very similar thing um there is there and there are some differences this is permissions issue and there are some differences between scoped apis and global api so if you need some legacy global api you can use the same script including putting your different methods in there and then the custom actions so i created a custom action a custom action allowing that says get groups with aggregate and what it allows me to do is to get a distinct list of values what one of the things we're looking for is who to send our our report to so again the use case was i need to send a report of all active incidents to the managers that have them so the first thing we're going to do is will give me a list of all the groups that have active incidents and there there is a nuance there we'll go through um because we're actually going to call this twice one to get the groups and one to get the managers because there are some limitations on dot walking and grouping by dot walk fields and getting that data back so we do it in two pa two pro two pass process but again i have this custom step which runs a glide aggregate to just say give me the list of groups that have active incidents so we have uh again that code here very small and able to paste in and then i have schedule report so uh i in schedule report i have two steps there are two steps in the one action and one is to normalize the the the variables so when i create a scheduled report it's able to do some logic about setting defaults and putting things in and when you just click schedule from report designer it fills some stuff out for you well what we are doing is we're inserting that record manually so we need to in our code emulate what the ui actions make us do because otherwise by bypassing the ui the normal business rules the normal form layout by bypassing all that uh we can get things that don't work so what i have in here is one a very small script that just says to set my defaults if you give me a chart title use the chart title if not use the name set if you give me a subject use the subject but if you don't give me a subject put in the blank i put put in the name not hard um i think some of this actually is not done when you schedule the report you have to put it in and you can end up with an email with no subject so i want to always prevent an email with no subject so my action goes through the logic of how do i want to set the defaults if you don't give me this use this if you do go ahead and use that and then from there we are just doing and i this is probably a bit small but we're doing an insert record so we're going to create a scheduled report and all we do in flow designer is say create a record in this table and put these values in and i drag and drop the pills to get the right values and what i want to see very simple but it means that i don't have to think about this when i reuse it this is that low code environment that i need to build once and then i'm able to reuse it over and over again so this is a great place where you'd wanna where you depending on on how your organization works you might want to team up with your pro developers to go this is what i need and then give me access to do it going forward right so you never have to write code but you can work with them one time to go this is this is effectively how i want to work this is not out of the box um because there are a lot of options on what you want to allow it to do not allow it to do um and there aren't a tremendous amount of best practices on what you should or shouldn't do it's it's very use case specific so for your organization you're going to want to just to decide what am i going to let it do what i'm not going to let it do okay so we have a scheduled report and then again i am a bit of a control freak i want to send that report immediately so i have this i have um this step or this action that calls my global script include to say execute this scheduled report now send it now it's a very useful thing to have to just make sure it gets sent um i may not need this if i just schedule the report to send a minute from now it would send it i don't have to force it to go but again in mine i wanted to make sure i could just make sure that report goes down and there are those design choices right do i want to do i want it to go in five minutes do i want it to go immediately what does immediately mean um if i'm scheduling it it probably doesn't matter but if i'm doing it on demand then maybe it has an effect all considerations when you're putting your flow together about what your use case depends on okay so those are the components that we have and now we're going to go through some of the actions so we see working with my pro developer um with my admin i made sure i had all the components i had that script include i had my actions built out for me in a spoke what are we going to do to configure that low code environment so this is my burst reporter so i schedule it i want this to run at 6am this is showing me the time that i see it as so uh i'm in pacific time thomas is in eastern time zone so if he looked at the exact same thing he would see 9 a.m i see 6 a.m that's okay that is right just make sure you understand what you're putting this in as we're going to aggregate my group so i'm going to get my groups with active incidents and then i'm going to take the results of that and i'm going to run it against to get the managers from those groups and then we're going to go through a for loop then say well for every manager send that report this is an interesting one too as we come through that i don't want to just loop this through for all of the groups because a single manager might have multiple groups and the report handles that already because it's just saying give me the things where i'm the manager so that a manager has three groups doesn't get three emails putting in the second step of distincting out the managers allows us to reduce those emails so again very use case specific on what's the right thing to do and that's why floor designer is great we can just reconfigure it for the use case and then as we go through very simple settings so we have that get get groups with aggregate and this is actually sorry i took the screenshot later this my test data i didn't have many active incidents but all i'm putting in is i want to get groups from accidents from the incident table get groups with aggregate from the incident table group by assignment group um this is an api i do have to type in the field name um i don't have my chooser here so i'm going to group by assignment group and in this case it's giving me all incidents i really should have an encoded query which is active equals true to meet the use case we're looking for but again very simple to call the code that we've already written that we only had to write once i'm going to call that exact same um action again and now i'm going to say use the sys user from the sys user group table group by manager and then the condition here is scripted and i don't think i have that in here um i i will go through it in the demo i did have to put a small script in here uh to to do this distinct the the right way and then a for loop for loop is very easy all we are saying is uh loop through all the records that come back from step two right step two is the two records super simple it's not i don't have to know the script i don't have to know javascript syntax i just have to go yeah a for loop for everything in that list go through it and then what do i want to do we're going to schedule a report and again we set all those defaults so all i'm doing here is saying i want to schedule a report the report name in this case is burst test i'm selecting the specific report i'm sending that's got that dynamic field i set a name the user that's going to run as so we're looping through and we're going to see the incidents for thomas the user id of thomas is sis id and then again the same thing for the name and the subject although that actually gets done in the defaults i'm going to send it the body of the message and i want this to be a png it's going to be a png attachment and then again i want to schedule i want to execute that report now i didn't give it a time uh i think i took it off of this list when you're scheduling you actually i could have another parameter which is what time do you want to send it time and date how often do you want to send it that could all be done that's not my use case today but i could do it and then we're going to have execute report and i'll take in a side that i could merge these two together so it could just be schedule and immediately send a report and not have to do it in two steps it's again up to you and your use cases and what's most common for you so here we're going to schedule my report all i'm doing is saying send this report in step 4 we get back a report that was created and all we're saying is run it really simple and then again once we get it put together we're saying it's 6 a.m every morning get all of the groups with active incidents take those managers and get the or take those groups and get the distinct list of managers from there and then for each manager go through every manager schedule the report that we've specified to run as them when we specify the user it's going to run as them and then we want to execute that report and we'll go through that until it's done very simple so my managers are um i am sending a a report of active incidents to my my managers only if they get it because if they don't have active incidents they're not going to be in the first group they're not going to come back their groups will not come back in step one and i only want to send them there so i'm doing that by sending that report out separately and running it as them using the dynamic filter so again we had a good amount of setup uh the first time to create my spoke maybe to create my script include but then from then on i'm able to do this and i am going to put my money where my mouth is and we're going to do a live demo where we're going to build the no code part of this so i am going to switch over to my browser if everybody has any questions we can take those now okay so now we are in we are inflow designer and i'm going to take a couple notes to note things that that i look at as i come through here so the first thing is i am testing email and if i am testing email it is rather important that i do not send email um so i'm on on a sub production instance my email properties i go to uh which are email properties as an admin i can change these so email sending is disabled for this instance if i do need to test it for some reason and i can view the emails that are generated which is enough for me but if i if i did need to see the emails then what i have this set for is yes on the emails but send all emails to me send all the emails to my my work address and then you'll you'll see what's being sent on but that way no emails go out to real people so again if you're testing email stuff or testing burst reporting make sure you just test these settings so that you don't send a bunch of emails to people and confuse them i'm not going to explain why i know that but trust me don't do that okay so those are my email properties uh my script includes so i have my global script include so in global i have my script include uh this does have my mysq data collector from the example before but then this is the one we're looking for which is just simply schedule a report again it just says give me a sys id get that sis auto report by re-querying that's very fast it also makes sure that we're not executing something that's not a scheduled report only scheduled reports can live in here so that's that that's the protection so that we're not scheduling something we shouldn't be running uh through even through flow designer so get the report and then execute now that's my global script included again needed to actually run the report but you if you could if you were just scheduling it to run at a future time you wouldn't need this i need a report that said i need a report uh plain and simple so i have a report of active an incident active incidents and again the is dynamic me is very important if i run this um i am in this case we're grouping by the assigned two so every morning i can see the workload of my of my uh the people in my group um i yeah this is on their assigned to so for the groups i own this is what's coming in perhaps there's something better a list view might be something more appropriate to send out um or i could do things like active incidents that have breached right i want to get an email of breached incidents every morning so i know what's going on i want to view a dashboard as well but sometimes it's it's good to get that reminder as an email when it's needed right not every day for nothing but when you need to see you need to see it this one's going to be simple with our test data and then we're going to look at our scheduled email so right now we have uh scheduled email reports we have no scheduled emails these are the emails in my system or this how we're going to validate so there have been no emails sent this month um and then uh and then i have my list of groups as i was debugging this i want to make sure that i get i in my test data i have lots of groups that don't have managers that's a problem for testing so i can set some of those and then incidents these are the uh this is that query we're running to say how many incidents what incidents are active so if i'm looking for test subjects as long as some of these have managers we'll get that data back all right let's build it oh sorry the last part is my actions i do have those actions so in the i i built a custom performance analytics spoke which lets me do things with pa whether it's getting a score um getting it just some aggregate that comes through the ones that we are using are execute scheduled report scheduled report and get groups with aggregate is the only three we need and we talked about those a little bit earlier so now we're going to create a flow so i'm going to come in and click new flow this is going to be first test burst and active incidents um i'm going to put this in global it's fine uh spoke would probably be good but for this case we'll we'll do global um this is gonna um we're gonna run this as system uh to make sure it doesn't have any problems scheduling the reports again the reports are going to run as the users they're supposed to run as but we're going to the actual creation and querying we're going to run this as system so we don't get caught up on acls and who can see what again use case specific but for my use case i think system user is more appropriate so we'll start out with the trigger so my trigger uh we're gonna do daily and we'll do 7 am sounds good to me so i have my 7 am trigger and i'm done with that now we're going to add a flow so we're going to add an action so i'm going to go to my actions again i have a performance analytics spoke you might create something like this yourself for analytics or whatever you want to call it this is a custom scope performance analytics and we are going to get groups with aggregates so i get groups with aggregate again what we talked about before we are going to query incident condition is going to be active equals true and again i could get that from my list view i can just come in i get the right this is the right list that i want to get for or get i will copy my query paste that in group by we're going to group by assignment group spelling matters okay that's it we're done there so i'm done uh after i get that lit actually i'm gonna go ahead and put a message in here which is get list of groups with incidents good and now i'm going to add a new step we're going to add new action again we're going to we have the list of groups we need to get the managers so we are going to get groups with aggregate the table here is cis user group says user group my conditions my conditions are a little bit more complex for this one um i actually might write a new action for this but as i was going through i didn't want to do that yet so i'm going to write my conditions it's script i'm going to have a little bit of a script to come in here so what it does my script variables have access to the previous steps so this step is get groups with aggregate step one get groups with aggregate records and what i'm doing is i loop through the object that's returned from here and i put it into an array so that my condition is manager is not empty and cis id of cis user group is from one of those groups so you could do some complex processing even in line if you want to um this one's okay but again it's one where i might have a object to list action in this spoke if it's something it's a little bit more common for me to use okay and my group by field my group by field here i want mana the distinct managers the distinct managers from these groups so i am going to do manager um the aggregate we're not using uh we actually we can this is designed to say give me um how many groups in this case would be how many groups does each manager have um that's fine but we don't we don't need that uh it's just a bit of a throwaway thing this is the way to distinct out the list without having to loop it i'm getting the database to distinct for me rather than having to loop through indistinct okay we're done with that and now what do we want to do oh again i forgot my description so let's go put a description in here descriptions super useful when you're calling the same action multiple times and doing different things and now what do we want to do we're not doing an action but we're doing a flow so i'm going to go to flow and i want a for each and again awesome thing with flow designer i can come in and i want to do for four each in step two and just drag that in if i didn't like to do that i can just click on the pill here and go through records so you have everything available here to drag and drop or we can come in here and now what are we gonna do for each for each we're going to schedule a report so again i have that custom action here we're going to go to [Music] schedule report under reporting what report are we going to send so the report for this is my active incidence that's the right one the name what are we going to send for a name so this is where i have a little bit more configuration because it's what i want to see we are going to do active incidence 4 i'm going to i'm going to use the pill here we're going to go to the for each well it knows that the record and in that record what i what my get groups with aggregate returns is three is an array of three things the sys id or the i it could be a choice value or the the sys id the display string and then the count which again we're ignoring the count uh but that that's what's here but the display and id so in the subject i'm going to use the display the user the user is different the user i'm going to come into my for each and i'm going to pick the id right there so again whether you use the picker here or use or you pick or you drag and drop from data doesn't matter it does the same thing the subject um i believe that's handled by our default so we're going to go ahead and just leave that empty in my intro this is the text of the email take care of these and then the type and again there are different choices here than you might have so this is a chart i cannot send the chart in excel or csv because we're just have kind of a dumb list without the reference qualifiers uh i could choose csv and it will not do the right thing whether we'll get an error or blank email i'm not sure but it's not what we want but in this case i can choose pdf so i'm going to go ahead and choose pdf and then i'm done there um my scheduled report could have had when to send it frequency to send it but i am going to choose an action of performance analytics execute scheduled report and again the data collector and the scheduled report pretty much the same thing but i do separate them out um you know maybe this could be one and it would allow either one of these but it's so that way i can't accidentally send it the wrong thing because when we are saying to execute it um we could choose a scheduled report which we have none of if you if you knew what you wanted to do um that wouldn't be really good in this use case but what we're going to do is just say the scheduled report this action gives me the sys id that was scheduled so all i want to do is pick that record so execute that scheduled report and again i did paste that little bit of code in here which i we could have made a little bit better but other than that just drag and drop click what you want it asks for the information it needs not what it doesn't um and parameters can be can be mandatory or not mandatory um so that's important as you're as you're building any of these if you're building them or you're just filling them out so we're going to click done that's it we have everything this is going to run at 7 am uh but let's test it you know testing is always good one of the great features i find in flow designer is how easy it is to test this stuff so i'm going to click test it's going to confirm you want to do this and again i know my emails are off we looked so i'm going to go ahead and run test so it's running the test it's doing the work and then we have the output of the flow and what we see here is i have an error this didn't work i don't know how any of how something i wrote didn't work but it didn't work what happened so overall there was an error uh my aggregate came back i can look and see what's here so that's what i queried that came back with data came back with the right data i want to see and all of the different groups that's good so then we come back and in here again i get all my users that's good so we're expecting to have four emails being sent out here i can see the loop every one of these things comes through so did an error on one of them or all of them and as i go through it aired on the first one oh aired on the second one it aired on all of them i can go in and see what the error was i can see this results of the different steps and what the parameters were in and out so really really useful to understand oh this is the part that's broken right as opposed to having a script and i don't get the right results this is always debugging all the way along the way and it is recording what's happening in production as well so if there's something that doesn't work that your testing didn't catch you can also v view these logs as they're going all the inputs and outputs lots of logging lots very easy to debug and we do have an issue so what's the issue here is that i have a private script including pa actions well yes i have a private script include so i have my global script include but i said only this scope can can call it so i need to make this available to all application scopes we'll go ahead and click save and now when i come back we'll exit that because that did fail i'm just going to run the test again and now when i run the test no errors everything completed and in the same same vein here we can come in and look go through the iterations go through the loop and see we sent out an email for abraham lincoln for me for hans and for paul we scheduled all the emails we executed them we got results back very very good this is what we're looking for and as we go back to validate did it really work right this looks like it worked i feel pretty good about this but as we look at it we're going to see the scheduled emails so the scheduled email reports we are scheduling to them to run on demand when they were when they were scheduled this is the right time for me um so i scheduled these they're here they're i don't have a clean up job for these they're just scheduled on demand in my um the way i configured my scheduled report is if there is another on-demand one for the same report for the same user it will update it so these will get reused and not create i'm not going to create four every day but that's how you want to do it what's new and what's not new what should you coalesce on all just clicking options when you're configuring flow designer but you do need to configure them uh this meets my use case and then the emails did they really go out so when i look at my emails yes we sent out four emails they're in send ready because we have email turned off and if i go into one of these we're going to see the email so it says you can click on this if i preview the html body take care of these that's the email body they're going to get and we're going to see the email attachment that they have their attachment and i don't i think you can see this so we can see that this email is sent to paul right i have my nice my nice bar chart so for paul this is the data he's getting uh with uh aileen alejandro and if i go into other scheduled emails and if i go into abe lincoln's so this went to abe lincoln we're going to view his attachment and in his attachment it's just for uh troy is the only one that has one right so i get my burst reporting pretty easy to set up again the second time you saw we went through it and maybe 10 minutes walking through every step to get what we want to get to you just have to know well who's supposed to get it how do i get that list and then send the report and execute the report all right so we saw the demo it worked exactly as designed and i'm going to go back all right so we went through the demo you know what else could we do with this and again as we're talking through that feel free to submit some more for more questions in the q a that we can address but how can we expand so this is uh one flow one report i i don't burst a lot of reports so that might be okay um i could i think we can make this more dynamic by building a custom table that stores what report and what's the conditions in what field right we just put those in there's not a lot of fields there i feel like we can do something to get the uh to just configure this and say i want a burst report and the burst report executes the burst report flow that takes all of these in parameters as parameters reads them from a table so again something pretty simple to do that just takes us to the next level that might have an issue where we have to distinct out and distinct out so that may not be appropriate here or how we want to do it or handle that somehow in some logic but i feel like we could do a burst reporter application that seems doable um i can create an app um oh sorry i flipped these two so that's to create the app right create the burst reporting app uh the first one is to read the query from the report so we had to put in the active is true we had to do that twice active is true is okay but what if it was more complex um one of the areas i was looking at was can i read the query from the report which you can do but then you have to parse the query and remove something because the is dynamic returns nothing if system user uses it right it has to run as abraham lincoln as hans as as me as those managers so either we do two queries which is fine um or i think you could pick something up to say use this report source and that's the query i want to use or we can actually just say for this report get it and remove any is-me's because we know his-mis won't work so there's some there's an api that parses uh query conditions a little messy to build up but if it once it's written as an action again you just call it so that's something they look into building the app um and then maybe something like if this runs multiple times a day i'm sending this out at 6am pacific but for thomas um you know he's he's already on a second cup of coffee by the time but by the time i wake up so maybe i want to have this run every day but then pick the users to run run every three hours every two hours and send it for at 6 a.m local time for that manager right we have the manager we know their time zone we can adjust that make it really smart and all i have to do is make my flow just a little bit smarter to do that and schedule to run once an hour and now managers get this notification 6am local time right again maybe that works for use case maybe it doesn't but flow designer can build that up so i don't have to think about that ever again right i build it once i test it once i can look through all my data again even without the emails on i can validate those emails are there and i'm and i'm confident that each step particularly if i'm using atf for that in flow designer i can make sure each step works and all i'm really working on is my logic i'm not worrying about my code working right the code will so work area ways to improve that and then as we go through so we went through a lot of of what's going on in flow designer and all of those things um there is a lot more training for you as thomas mentioned before the training um now learning is out there so now learning has flow designer fundamentals um it's a big course i think we have 12 hours there are lots to do but it goes through building a flow of building a subflow building in action um there's some other labs involved as well so lots of of content on this you may want to do it you might want to have your pro developers do it so that they can build you the right thing again every organization is different but lots of training on there there's no reason to do this because i don't know how to do it you can learn how to do it in in pretty short amount of time and this these labs are hands-on really really good labs to walk you through assuming you know nothing 12 hours from then you'll be able to do it if you have some uh understanding the more understanding you have the faster it will go then uh and that's my slide from way earlier uh then additional training uh we also on the developer side there's there's flow designer training there as well um this and then now the now learning one they'll spin up an instance for you this one's intend to be more self-paced even more self-paced on a pdi on a developer instance if you don't have a developer instance everybody can get a out-of-the-box service now instance by going to developer.servicenow.com and you can walk through this uh and and see how it works great uh a great thing to the way i do this is that i do build my spoke my spoke in a scope which means it's an app and it's pretty easy to move from instance to instance my custom applications have nothing to do with my use cases right they meet they meet their needs and i add new ones as i need to but they are very very very reusable and not data specific all the data that we're doing comes in the flows the flows i might put someplace else but the flows can call actions from that spoke right so understanding how you want to structure this all that the training helps walk you through some of that and what you want to think from through all right and if if you have any questions please add them in the q a if you have any questions about this if you have any questions about anything else uh performance analytics and reporting related um and as you're going through and you get hands-on and i hope you guys do go through this take those labs if you get stuck you have a question what how should we do this post in the community feel free to tag me there is we all a lot of us live in the um in the analytics intelligence reporting forum that's a very good form i like it but there's also a developer forum that might be a good one if you have a flow designer question about how should i do this and you can always tag analytics as a topic and so we all see it i certainly monitor the developer one as well so please uh ask your questions how should i do this share some ideas and again feel free to tag me um i'm not saying i'll answer but i'll definitely look at it and then thomas will probably swoop in with the right answer so adam we did have a question come in but prior to that so let me say that that was awesome and and very in-depth and uh you know from someone that's in the community a lot like yourself i know that this is something that's asked for uh quite often so it's going to be really great to be able to refer them to this office hours and and i too agree very rarely do you you do any uh code mistakes although i think you just put it in the demo i still think you're perfect at that so uh we all understand what you're saying so the question that came in um and let me see if this is necessarily related this is not necessarily related to the topic but there's no other ones but i'll go ahead and ask it here anyway so how can i run monthly year-over-year reports not pa widget use case we have an it manager dashboard with reports only there are five interactive filters all actively used concurrently one of the reports is a spline manager wants to have year-over-year spline showing previous year as a different color line pa widget is not accessible solution because it would not be able to use the same interactive filters possible idea had ad option to have per month month without year on the aggregate report similar to per day of week only for month and without years so if i'm understanding what the question is the the big overall question is being able to have year over year but have a separate um color for the previous year so i don't know if petra can confirm that's the question but i believe that's what she's alluding to he or she is alluding to um so i believe the trend chart is what we want and it has certain choices and it has month the month i believe has month and year so there is not a good way of doing this without pa um what you can do in reports you could add an additional data set perhaps well the additional the additional data sets going to be the previous year though it won't line up because you have to drop out the month right yeah the trend chart is the way to do this uh but it doesn't support that use case um and and and we have tried uh yeah we tried the data set thing as the year issue there so pa is the way that we support the year over year comparison when we look through it um and and i get the the multiple interactive filters um and concurrently the uh that's it's just not supported today depending depending on the filters the way we normally address this is a workbench um where we're able to kind of slice and dice the way we want because but you can't use them all concurrently i mean a lot of what we get into is that we need to use it's arbitrary which five i need to use or which two or three of the the five i need to use um but we wouldn't support having five on at the same time uh when it comes down to it and it's uh the way if i needed to do this today and i absolutely had to do it you'd have to have a custom visualization which there there is a lab on that um okay the k19 on the developer site has the the the lab on custom visualizations and we did we did a session on custom interactive filters before it's very similar and i think has a link to the lab that covers custom interactive filters and custom visualizations but there is not a simple way to do this um because the data sets doesn't work the trend should work but doesn't have the data set you the comparison you want and then pa has a year over year but pa uh won't support in the workbench you can kind of get three levels of breakdown depending what they are but you can't get five so not a great answer but you could build your own report with your own visualization to get it to be custom if that was the only thing that you needed to do you could get it to work and good luck um and again the if you go look at the the office hours from custom interactive filters there is a link to the lab and the recording um from crea it's from creator con 19 but in knowledge19 and there there's the recording and there is the walkthrough of the lab that goes to the visualizations with a bunch of examples we don't have that one but it there's a couple that'd be pretty close to that um and then you just have to you actually would then be querying multiple data sets and then merging them on your own rather than having the system do it thanks adam are there any other questions about anything all right we can give people back a few minutes yeah another time yeah let me go ahead and share so everybody wants to sign off and start get and get started really quickly and i will mention that um uh well i built this all on a paris instance um i don't think there's anything we did that wouldn't work on uh new york or orlando i think you should be fine before that there were some changes i think in madrid uh but i don't i think actually still would all work um and uh and then there are some enhancements that are that are planned to come forward that uh should help this as well so i think this is an active area to kind of nurture and get people using your analytics in your workflow get it to the right people we sent an email but you know maybe send a slack message lots of things you can do uh with the scheduled jobs and other things that are going in um a question did come in about how how do you uh how do you tag somebody on the community i believe you can just do at and their username uh and their their name so mine's adam stout i think thomas is at thomas davis yep um and uh and we come in i think we both use our full names and there's nobody else with our names so when you tag us i'm pretty sure you always get us uh if you if your username or your display name is uh a single letter or multiple letters something like that then i'm not sure what it's going to do there but for for thomas and myself david is often on the call um and then there's a lot of other um really smart people that know uh feel free to tag us and and it does alert us that there's a tag and i definitely don't skip the ones that are tagged okay awesome thank you adam awesome presentation today so uh real quick so we can kind of close and give you a little bit of time back uh like adam said we know you all are ready to start uh creating some scheduled reports some burst reporting so um again this is a slide that if you've been on the call before you've seen before before anybody knew so uh there's a great uh post out there that actually explains better on how you should ask a question in the community so you can get better answers to the question that you have so you know please check that out again like i talked about early in the call make sure you search first uh there's probably a good chance that what you're asking is probably out there in the community or the uh docs or even on developer site so um you know look for those first and then be very you know specific about your issue and if you can actually attach screenshots in some cases that really helps out a lot as well so but definitely check out this blog and it'll help you make really good questions uh so we make sure we give you the right answer so again as you saw earlier please go and check out our office hours page within the community so you can see what is upcoming uh in the future and again of course see that anything that was in the past to help you out with that that is always out there and updated regularly um and we of course need your help so if there are questions or anything that you'd actually like to see in a future office hours uh please please let us know that so please share something in the community and tag of course adam myself or or david uh as well and we'll definitely try to get that on the list in the future so um actually it's missing a slide uh where is the slide i don't know where it went but actually for the upcoming i don't know where it went uh probably i i think it's after but uh the next office hours actually that i'll be presenting on december 16th is actually going to talk about um some advanced uh and leveraging formula indicators uh actually getting into using uh the the new feature of methods to actually make the formula indicators uh work even better for you different situations or whatnot so please come back on december the 16th uh and be present for that one um as well so until next time remember use the community ask your questions away but make sure that you search first to make sure that an answer is not out there again you can catch up on previous office hours on that office hours uh if you go to the performance analytics um actually community site you'll see a button that says office hours where you can go and see the existing one uh ideal portal don't forget about that so quite often there are questions that are asked in the community that uh they're just not available yet within the platform itself and we definitely recommend that you go and put in an idea in the ideal portal so hopefully that can get uh reviewed and potentially be in a future release and take some training so uh if you're new to performance analytics there's some really good training that's out there and now learning uh the essentials and uh fundamentals and advanced uh courses that are out there and then of course the k-20 labs are a great source that you can bring yourself up to speed on a lot of different things that are out there but if you're not able to find anything within the training um or in the k-20 labs then please feel free to ask away in the community there are some great experts that are even outside of um the now intelligence teams there's people that are customers just like yourself that are really good at what they do and they answer questions as well so hopefully your your questioner uh will get a great answer from that so with that um i think we'll give you uh five minutes back to your day i don't see any more questions and thank you all for joining we really appreciate it

View original source

https://www.youtube.com/watch?v=QKaqzQs_Gic