Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
This is a recording of a Support Techspert Thursdays session.
This session addresses:
- What the App Analyzer can do
- How to set it up
- How to improve app performance
- Troubleshooting issues
Chapters:
00:00 – Intro
01:26 - App Analyzer Overview
02:39 - When the App Analyzer is Useful
03:43 - SaaS Standard Tier Capabilities
06:23 - How Qlik Sense Stores Data
07:32 - App Analyzer Dashboard demo
08:58 - Example App Optimization
10:54 - Best Practice thresholds
12:02 - Threshold Analysis Sheet Demo
12:32 - App RAM to Quota Sheet Demo
13:19 - Example App
13:47 - App Analysis Sheet Demo
14:39 - Rolling Analysis Sheet Demo
16:28 - Reload Time
17:06 - Setting it up
18:11 - TIP: Relative Path
18:47 - Creating a REST Connection
20:34 - The right space to use
21:16 - Troubleshooting: SET ErrorMode
22:13 - TroubleShooting: API Key
23:29 - App Analyzer on Qlik Community
24:41 - Qlik Diagnostic Toolkit
25:41 - Qlik Sense Admin Playbook
26:13 - Q&A
App Analyzer on Qlik Community
STT - Optimizing Qlik Sense SaaS Apps with App Analyzer
Q&A:
Q: I noticed sheets supposedly in my app according to the App MetaData Analyser that are not part of my app. Is the presented data reliable?
A: Neither the App Analyzer for Qlik Sense Enterprise SaaS or the App Metadata Analyzer for Qlik Sense Enterprise on Windows track sheets – they only gather data model and reload metadata. That said, there was a bug in the App Metadata Analyzer for Qlik Sense Enterprise on Windows that did associate some fields/tables to the wrong apps that has since been addressed. You can always grab the latest version of the App Metadata Analyzer for Windows here.
Q: Hi, super interesting stuff! is the very same App Analyzer available to non-SaaS customers?
A: The application that the App Analyzer was modeled off of is the App Metadata Analyzer for Qlik Sense Enterprise on Windows that ships with the product. You can find the most recent version of that application here.
Q: The configuration of REST Connector is throwing error "cannot connect"...are there any setup needed on the tenant level?
A: Please refer to the installation guide for the App Analyzer and if you are still having issues, please post on the Qlik Community entry here.
Q: Can we setup Qlik Alerting to inform us as we get closer to threshholds?
A: Absolutely, yes. This is a great way to stay on top of monitoring your applications. In addition, you can also monitor one of the charts from the app in the Hub to have a quick look at where everything stands each time you login to the tenant.
Hello everyone and welcome to the first edition of Support Techspert Thursdays for 2021.
My name's Troy Raney and I’ll be your host for today's session. Today's presentation is: Optimizing Qlik Sense SaaS Apps with the App Analyzer.
Our presenter today is one of the architects behind the App Analyzer: Daniel Pilla. Dan please tell us a little bit about yourself and what we're going to be talking about today.
Yeah, absolutely. Thanks Troy. So again, my name is Dan Pilla. I’m a principal analytics platform architect; previously enterprise architect at Qlik. I’ve been here for roughly six years at this point and my expertise lies within the architecture frameworks, integration topics as well as our cloud strategy at Qlik.
The presentation today, what we want to go over is just a high level: What is the App Analyzer; kind of where it came from and why was it created. We'll walk through a high-level demo; kind of paging through each sheet to show some of its capabilities and highlight a couple of examples. Along the way we'll talk about how it's configured. I’ll actually show a short little demo of that. We'll highlight a couple of troubleshooting issues, though hopefully you shouldn't have to deal with many. And then lastly, we'll talk about a couple of things to remember; some resources and of course how and where to get the application itself.
Can you start by explaining for us, yeah, what the App Analyzer is?
Yeah, no, absolutely. So we'll go over a very quick high-level overview, but ultimately the application it's a direct port from the App Metadata Analyzer, per Qlik Sense Enterprise on Windows. This application is actually, or its predecessor is actually shipped with the Windows product. You can find it with the additional applications like the Reloads Monitor, the Sessions Monitor for the Windows platform. And given that the API endpoint was the same in our SaaS platform, it seems like an obvious first choice for a monitoring application to port over. Now the data present in the application is pretty much identical across both platforms, and you're able to get the app base RAM footprint. That's the RAM footprint of the app opening from disk, so without any users or session cache. That's actually a direct quota that we’ll talk about in just another slide. In the SaaS platform, we'll talk about the peak reload RAM. So the maximum amount of RAM the application takes to reload, and then there's a number of other metrics. Like the table and field RAM, the overall row counts of the tables, cardinality, and then the presence of data islands, and synthetic keys, along with circular references that can kind of give you some hints on the integrity of the application itself.
What are some example use cases for it?
When to use it, there’s obviously a myriad of different times that you might want to come in. But at least at a high level: number one, just tracking of app RAM size against tenant quota. We'll talk about the quotas on additional slide but this is going to be a key metric that you will need to monitor in SaaS. We’ll talk about anomaly detection and again it can be used for identifying potentially problematic applications. As well as, of course, optimizing. These tend to go hand-in-hand. Lastly then data modeling standardization and best practices. So kind of: holding all of your developers to a certain bar and making sure that you're preventing any potential problems in the future for your end users.
Dan, does this come pre-installed as a part of the SaaS tenant?
At this point in time, it does not come pre-installed. So we'll talk about the configuration but you will need to grab this application from Qlik community and import it into your tenant. The good news is: it's just an app; and it should only take about 10 minutes to configure.
Nice. So you're going to show us a demo now; and what tier of SaaS are you about to demo from?
Good point. So I want to bring up, just to add a little color in context because not everyone on the call might be aware of the you know what the tiers are and what the standard quotas are and so forth. So we’re going to be demoing from a tenant that just has the standard tier enabled. What that means is: out of the box everyone gets this. There's no additional charge for this whatsoever. It's kind of baked-into the standard license, is that the base RAM quota per application is five GB by default. And again that's excluding all users excluding all caching and so on. It's just, if you were to open the application in RAM; how much does it take? And that is one of the default quotas in the SaaS tenant. There's no horizontal limit so you can open as many applications as you want that are under five GB. You can have as many users on them as you want. No limit from a horizontal scaling perspective.
There is also a quota of peak RAM reload it's 3x what the base RAM uh quota is. So ultimately when you reload the application, 99% of the time you should be under this quota of 15 GB for a maximum reload RAM. However, you know if you’re doing a mountain of joins, or auto generates, or auto numbers; you know there is the potential to hit this, however it is quite unlikely. But the application will highlight this; will track it; so, there's no guesswork. The application will illustrate all of these quotas for you.
And what happens if someone tries to use an app that goes above these quotas? Like a base RAM quota of an app that's above that; will it even upload?
It will. It, well, it depends. I don't want to get too deep into that. But you could have an application that; let's say, two gig on disk, that you could upload. And it might break, you know in a week or two. As you start to reload it, right? You can upload one that's right before.
Yeah.
But there are recent improvements in the upload service. So it now should check the RAM on import; and actually, from a distribution perspective, be smart enough to say that ‘Hey, this application won't open in RAM.’ So I know that actively product management and R&D are working to make that a better and better user experience; to potentially, you know, suggest that you might need an additional tier. And there's more “smarts” going into that in the future.
Okay, cool.
This is just the standard tier. There are additional tiers. So if you did want to upload an application that's 10 gigabyte on disk, 20 gigabyte on disk. I can say that almost every single corporation I’ve worked with has at least one that's larger than, you know five gig in base RAM. We do have additional tiers that can serve up to 50 gig applications in RAM. So please do contact sales, if you are interested in that. There are additional paid offerings.
Can you quickly explain how Qlik stores data?
Yeah absolutely. I did want to pull this up, because I will be directly mentioning symbol tables and data tables. And if you haven't seen this slide, or if you're not really into Qlik data modeling; you might not know what that is. So keep in mind that if I were to pull in a simple table; let's say, just region and sales. That the way that Qlik actually stores this data under the hood is in bit stuffed pointers. So you will actually see the symbol tables and the data tables illuminated inside of the app metadata analyzer. So you can get a concept of how much memory does an individual field take as part of the data model. And then how much memory does an individual table take as part of the data model. So just kind of keep this in the back your mind as I go through the demo; as that this inherently is how we store data. And that that becomes pretty apparent when we actually look at the application itself.
It's great to see it visualized like this.
No more PowerPoint. Let's actually hop into the presentation here. Now I’ve already imported the App Analyzer. Note that there is a version here, because we are continuously releasing new versions. For now let’s just open it up, and we'll do a demo of the front ends before we walk through the back end.
So right now we're looking at the dashboard sheet. On the left hand side, you can see a number of the thresholds. The top two are the most important that you'll want to pay attention to throughout the application. That's the quotas for the standard tier. And what I’m doing is: I’m giving you an alert at the 80 % threshold of that quota. Note that is configurable. You could swap that to 60%, if you wanted to be more conservative in the load script. And it's saying that you've got four applications that have basically exceeded the threshold. That are at least nearing the quota. As well as peak reload RAM that we've actually got one that's exceeded that 80% mark of the quota.
You can use this along with other sheets to track, to see apps that are encroaching up to that quota. So you can make sure that, you know, they're rectified before they will no longer open within the tenant.
I love how it identifies potential issues. What else are we looking at here?
Across the top you can see the number of KPIs. This is just helpful from a pure inventory perspective, quite frankly, to see how many apps you have in your environment; how many tables across each individual app. I can select, you know, any arbitrary application. I can then see all of the tables; the total table RAM footprint; the number of fields; and there are many other additional thresholds that you can set in the load script.
For example, you know, I don't want applications to contain more than 150 fields or I don't want an app to contain more than 100 million records. Just from a sheer best-practices standpoint, all of those are adjustable.
Now I actually want to take this moment to call out an example here. So, I’ve clicked on a single application. Note that it’s pretty much completely capped. It's at our base RAM quota; from a peak reload RAM perspective, it's okay. But you know, at some point in time in the very near future, it's no longer going to open on this tenant. I can then see that I’ve got a line item table that's taking about a little over a gig in memory, and then I’ve got some comment fields it appears as if that take a very large amount of space. So one individual field is over one gigabyte in RAM. I could pretty much drop down to 80% if I just dropped that individual field.
Now in the Windows world this would just be considered, you know, optimization. In the SaaS world, this is going to keep your apps running at no additional charge; so it becomes even more important.
I can then take a look at another application here, that's my optimized version. If I select that app, you can now see that I’ve dropped all of the comment fields. I actually dropped eight comment fields. I dropped down from 5 GB to 1.7 GB, and that was just eight fields. And let's say that you know, you probe your users; you interview them to see ‘are these fields that you're actually using?’ ‘Are these critical to your analysis?’ You know, obviously before you drop them. But you might not have ever known that they had consumed that much memory. This makes it very very easy to do some pretty simple optimization.
That's a dramatic improvement. That's really impressive.
Yeah, and I can say that we have one customer example: they had an 18 GB app on disk. This is obviously in the Windows world. They used this application to drop, I think it was a total of 5 fields, and they optimized a few time stamps. They dropped it down to 10 GB in RAM. So they shaved 8 out of 18 GB off from just changing a few different fields. Especially once you start to hit high data volumes; little things like that can make a really big difference.
Now I want to clarify something. Those red lines that kind of make a dramatic impact; are those system thresholds? Or are those just sort of ‘best practices,’ ‘this is what we recommend’ thresholds?
Yeah. No, that's a great question. So these are arbitrary, you know, system administrator thresholds. They’re rough, kind of default lines in the sands, but you don't have to use them truly as guide points. In SaaS, roughly the 100 million record is actually probably a rough ballpark, quite frankly for the SaaS tenant. These are intended to say you know; as developer, I know what data sources my users are going against. I don’t want someone pulling in half a billion records. I don’t want them loading in 400 fields into an application with a select star. Or I don’t want them to have 100 tables in their application. They're more meant to be guide posts that an administrator can set up and then monitor you know, what developers aren't following their definition of best practices. So those are intended to be customized.
And does the number of users affect the RAM performance?
From this app's perspective, no. That's actually a really good distinguishing point. This is only looking at the data model, without any users. So, it's just pure application. This threshold of 5 GB excludes all user activity. It's simply for the data model.
Okay, can you walk us through the rest of the sheets?
Yeah, absolutely. So, if we go over to the threshold analysis sheet. So, let's assume that you've you know, selected an application. You can then see all of the details for the individual tables, the individual fields. You've got some additional thresholds that are set in here. Again, the number of field records, field cardinality, table number of records, as well as you know number of fields. I believe the setting here is 150. So, just more detail. Same general metrics that you would see on the dashboard sheet, just a different way of looking at it.
From the app RAM to quote up perspective, this is my favorite sheet from like a tenant inventory; to see where my apps stand today, and realistically you know, should I be considering additional capacity in my tenant, right? If I see that I’ve got a pretty heavy %age of apps that are at 60% + of my tenant, it might be time right to look into having additional capacity. Or maybe, should I be looking into something like On-Demand App Generation, or Dynamic Views to start thinning out my data models. Either or could be good routes. But really it's looking to see what %age of all of my applications sit within what %age of base RAM footprint of my quota, as well as peak reload RAM of my quota.
Now note, you might have you know some applications; for example, this one that has a pretty high peak RAM, but relatively low base RAM. This could be from using you know, monolithic QVDs that take a lot of RAM to buffer. It could be that you're using two dozen auto-numbers right in your in your script that takes just a lot of overhead. More than likely I’d say, 90% + of the time, this quote is going to trip before this one will.
If we go over to this sheet. This should look familiar to some users, especially from the Windows world. I’m focusing kind of heavily on ownership here, as well as a little bit on garbage collection. So, I do want to call out this visualization in the top right, where you can see: A) some apps that have never been reloaded on the tenant, and then other ones that haven't just been run in a really long time. So it might even be worthwhile; make a selection here, see if there's trends in ownership. See what spaces they belong to, and see you know, are all of these applications actually necessary? So it does have the capability to do a little bit of garbage collection within the tenant.
I’ll leave this to you on what you want to do with this. You could of course, go in and select ‘I want to see trends by users of you know synthetic keys,’ by data islands, by number of fields; and you could actually start to develop potentially users that might need training.
Now this is probably the most complex sheet, at least from an analysis standpoint; and what it's capable of doing. This has been running for quite a while, so I’m going to filter this to pretty recently. And I have some applications here that I wanted everyone to specifically take a look at. So, I’ve set up a few applications here that are reloading every night. And they're growing on at least what I intended to be a 1%, 2%, 5%, 50% growth rate; so you could see a few trends here. On the left-hand side, all of these buttons will change the actual metric that it's running. So, if I select this app that's growing at a rate of 50%, I can expand this and I can see that you know; daily I’m increasing at a rate of 50%. You could then anticipate potentially when this number is going to hit 5 GB, which would be within this week, more than likely. If I flip that metric to go ahead and look at peak RAM, you can note I’m actually really close. And because of this, I’m using auto-number; I’m using auto-generate within that script. You will actually hit the peak RAM threshold before you would the base RAM. But this becomes very simple to you know, come in and you could tie alerts to this. Because I don’t want to have downtime of this application.
Yeah, this is great! You can really see trends and anticipate problems before they happen.
Exactly! And if you go ahead and click on total rows too; now I can see where hey, if I stayed under that 100 million benchmark that my you know, sysadmin had set, likely wouldn't have to worry about either of those base RAM thresholds. But it can still be that nice guidepost that you can pretty confidently say that you'll be able to stay under a certain threshold. So you'll have to kind of play with that a little bit, and use this application to see how applications profile with your own data sets.
Lastly you can take a look at reload time as well; which is handy. This can be nice to see hey, is it potentially on the sheer data volumes from Qlik's perspective? Or is it potentially my database is taking longer? Or I’m using a rest API and that's taking longer? It'd be interesting to actually be able to track those trends from a reload time perspective as well. I hope that at least sheds a little bit of light on what this application does.
Yeah, it's an amazing amount of information on how the tenant is performing overall; analyzing specific apps and helping admins find ways to optimize and improve. Now, since it's not pre-installed, what's necessary to set it up?
Yeah. Let's go ahead and take a look at the data load editor. I promise it's not too daunting in this application. So this is you know, exactly what you'll see when you pull in the application from Qlik community, and we'll show that in just a moment. You're just going to see 4 variables. And I’ve tried to outline you know, there's a full walk-through guide, so you don't have to use the comments in the load script. But I did comment out everything, so you should actually be able to just follow it from here if you had to. Note at the top, it does require Tenant Admin. And you will have to have the Developer role, because you will need to use the REST Connector, which requires an API key. To get an API key, you have to be a developer. You have to be a Tenant Admin, because obviously you have to be able to see all of the applications, and we of course want you to be able to get everything in the tenant.
That makes sense.
The first is just as simple as possible. I actually forget what my URL is. I’m going to: ‘ea-hybrid-qcs-internal.’ Our region is ‘US.’ That can be one of a few different regions. Now this set REST Connection; I want you to notice one thing. First notice that there's just a ‘:’ so I’m actually sitting in the Monitoring Apps Dev space. So, if I wanted to fully qualify that, it would look something like this. The ‘:’ is for a relative path; so if I was moving this across spaces, and I had a data connection named ‘REST for App Analyzer’ across multiple spaces, I could move the app freely without having to worry about the actual qualified space name. So, that's more of a tip and a trick, quite frankly.
That's a great tip.
I’m going to name this ‘Delete Me,’ because I don’t want to muddy-up my tenant. But we're going to create one really quickly. So, we're going to create a new REST Connection. I can search for REST. Now the tenant URL; again, this is all in the guide, ‘qcs-internal.us.qlikcloud.com’ So, that's my tenant. And we can put in any arbitrary API endpoint. I’m going to use ‘/API/v1/items.’
Now below, you only have to fill in one query header; and that's ultimately for your API key. So, the query header is ‘authorization.’ And then you'll put in the word ‘bearer’ space and your token. I’m going to simply paste that from my clipboard. But if I go back over, I can see ‘bearer’ space and the token. Name this ‘Delete Me,’ because that's what I said it was going to be called. I’ll test my connection. Connection has succeeded. So, now you can see that connection, because I’m in the Monitoring Apps Dev space. This relative path will pick it right up. Below that, this application incrementally loads. So, you don't have to pull all of your applications every single time. It'll do it since the they've been last reloaded; which is the only time the metadata actually changes for the applications. I’m just going to put them right in the Data Files for this space. So, you can just do ‘:data files.’ Alternatively, you can store them in S3, Azure, Blob, Google Drive; wherever you store your data. The last one here, we'll talk about in in just a moment. But it's used for troubleshooting, so you can ignore that for now.
But let's go ahead and hit ‘Load.’
Does this take a long time to reload?
It does not. So, even on some fairly large tenants; we're talking about minutes. This already has the incremental QVDs that you can see sitting in Data Files, so it's only going to pick up you know, a few applications since it's been last reloaded. But I believe on this tenant, which has roughly 100 apps; it's roughly 30 seconds or so. But we're talking minutes.
In which space would you recommend this app be in? Should this be in a shared space?
Yeah. I always recommend that if an application is going to be published out that it begin in a shared space. It's always easier to start in a in a shared space. And then I typically, as my convention states, I’ll name something you know, ‘REST for App Analyzer,’ and I’ll have my Dev version, and then I’ll have a Prod version of that same connector that lives in my managed space. It's different from a Windows perspective. From you know, having a Dev tier and a Prod tier and a QA tier and a Test tier. In the world of SaaS, you can do that with spaces. So, I usually just qualify them in whatever “tier” they are, and I always use Shared spaces for that.
So, what would happen if an app that the App Analyzer is reading from suddenly gets deleted? Would that cause any problems?
Yeah, no. It's a great tee-up for this Error Mode. So, from a troubleshooting perspective, 100%. If you're in a very large active tenant, where even if you're doing you know, programmatic testing; that's where it's going to come up, especially within our own R&D tenant it comes up quite commonly there. You might see a ‘404’ or two. And the reason being is: once the application reloads, it does a GET of all applications across the tenant. And then it iterates over every metadata endpoint for every app. Now if one of those apps vanishes in the middle of the reload process, it's going to say ‘Hey! I can't find this application.” Which is a 404. So, once you've configured the app, it's generally considered just a good practice to set the Error Mode to 0 for the application, if you know it's functional of course, to kind of steamroll over those errors as they come up.
Just note that if this is set to Error Mode; and you're steam rolling over those errors. And at some point in time you know, your API key expires. It's going to steamroll over those errors too, and you're no longer going to be able to update your application appropriately. So, in conjunction with that, because this is the other place that the app could fail; when you create an API key, and you set your expiration date for that API key, put a reminder in Outlook or put an alert somewhere that will remind you let's say a week prior to update that API key. So, you don't have to worry about you know, that also causing an error you know 365 days from now right? Or 90 days from now, however long that you set that expiration for.
That's a great tip: to put it in the calendar; because otherwise, it just expires and causes problems.
Yep. Otherwise, it's going to throw you for a loop one year from today or however long you set it. Guaranteed. Because you won't remember.
Are there any resources that admins should be aware of?
I have a resources-slide here. I’ll pull up a couple of those pages that I talked about. I just want to hammer this point again. That it is available on community. I’ll go and visit that site in just a in just a moment. But again, it doesn't ship with the tenants; so I suggest that you subscribe to you know, to this post and follow it.
So, here's the page for the App Analyzer. You can see that it's actually been up since August of 2020. I believe there have been one or two version changes since. But you can find a demo very similar to the one that just gave on YouTube. You can also find a pretty exhaustive install guide for the app here as well. So, it's going to show you exactly how to set up and generate an API key; how to build out that REST Connection. A step-by-step guide to make sure that you'll be good-to-go for the application. So, you don't just have to go off the script notes. And then you'll see the actual you know. dot release version of the app. I just want to call one other thing out briefly. That the App Analyzer isn't officially Supported by Qlik, but we do have both Product Management, R&D, along with Pre-Sales (including myself) that are following that community entry. If you have issues there, please post them up; even just general feedback. We do look at it. We do address it. You know, we've got many customers that are already using this, and we know that it's going to be critical, so we will Support it you know, to the best of our abilities. But it isn't officially supported, and I am mandated to say that.
Can we take a look at those best practices sites you mentioned?
Yeah! So, we've got the Diagnostic Toolkit, which has been up for a couple of years now. And quite frankly, some of this is borrowed from the QlikView days, because we're working off the same engine here. What this does is: it gives you - don't have to fill out the top bit - it just exports a PDF if you wanted to. Again, like I said, some of our customers actually do require the output of this in their publish process.
It's these bullets below that can be really helpful as you're validating or you're building out a data model, and each one of these typically has links to relevant community articles. For example, this one actually links out to Rob Wunderlich’s utility. There's a whole bunch of articles that link out, you know, Henric Cronström’s old post. HICs if you're familiar, old posts. There's a lot of really good collated content here in one centralized place. And a bit of interface performance too. But the relevant bullets for the data model perspective are all in this top section here.
So, from the Admin Playbook perspective this is a recommended playbook and best practices guide for the Windows platform. There is a lot of overlap from an application perspective. But the reason I’m pulling this up is: we're currently investigating and exploring in 2021 the possibility of building something quite similar for the SaaS platform. You know, this took roughly a year of work to build out for the Windows platform. So, this is more of a ‘I’d keep your eyes peeled for something similar to this in the future from a SaaS perspective.’
Okay now it's time for some Q&A. Please place your questions in the Q&A panel on the left side of your on24 console. Dan, which question would you like to address first?
Yeah, let's go ahead and start with the first one that I see here. So, does the App Analyzer need to be purchased separately?
While it is separate, there is no fee. This is a free application that Qlik has provided to you. Again, while we don't have a strict Support policy for it per se, we will do our best to Support it over time, at least unofficially from a Pre-Sales perspective and a PM perspective. But it is something that we plan to make readily available for the foreseeable feature at no cost that you can import into your tenant and give it a run.
The next one here: Is there a version of this app for QlikView?
That's a really good question. So, one thing that I didn't call out during the presentation, and if you weren't already aware is: Qlik Sense Enterprise SaaS can host QlikView applications. And the App Analyzer will actually pick up those applications. So, if you're using let's say QlikView Publisher to distribute out QVWs, the App Analyzer will check whether those are you know, under 5 GB in RAM or not, and actually give you metrics about the model itself, which is unique to the SaaS platform, considering that it's you're able to analyze both types of applications. So, good question.
I’ve got one here that says you know: I’ve got some large applications in my Enterprise on Windows environments. What do I do with apps that are let's say 10 GB on disk?
So, yes. I did bring up that this presentation predominantly was focusing on the standard tier. We do have two additional tiers at this point in time: Expanded Capacity and Dedicated Capacity. Both of those allow for applications that are up to 50 GB in RAM. There is of course you know, an up charge for this, but do contact sales if you are interested.
We've got one that is: are there tips for optimizing peak reload RAM?
Yeah. I did mention at least one of them which was: you know, try not to use monolithic QVDs. Just the way that Qlik loads QVDs, they can they can take a lot of peak RAM to buffer in. So, it's why generally, we say you know, partition your QVDs. Be that by month; for example, potentially by dimension, because they will actually be easier to consume or less RAM intensive to consume. Also, just trying to avoid you know, massive nested Ifs, egregious usage of you know, auto-number or autogenerate, and things that are kind of notorious for taking a lot of peak RAM that you might be fine with eating in the Windows world. But from a SaaS perspective you know, it might behoove you to seek out alternative strategies there.
We've got one that's: will running the App Analyzer itself impact the performance of other apps on my tenant?
Good question. For this one, I mean generally speaking, no. Because it's reloading so rapidly. And we don't suggest that it reload you know, more than once a day, quite frankly. You know, it's, this isn't an app that you're gonna have reloading every 5 minutes. You're probably going to be checking it on at most a daily basis. So, I usually suggest running it you know, in your batch window overnight. Additionally, you know, because of the SaaS platform by nature; it's a microservice you know cloud-native offering. So, you're not going to hit the same bottlenecks that you might hit in the Windows world; so, even if you were running it you know every 5-10 minutes, I still don't think it would impact the performance of your tenant.
We've got one that is: what are the minimum privileges needed to do this?
So yeah. We did cover that that's going to be Tenant Admin and Developer (role). Wou will need Tenant Admin to of course access all of the assets across your tenant, as well as the Developer role so you can get an API key to actually interact with the Qlik APIs.
We've got another one that: is this the same as the app for Windows, the Sense System Performance Analyzer?
No. However, it does have a direct correlation in parallel with the App Metadata Analyzer for Windows, which is pretty much the same exact data model. That is another application that does again ship with the Windows product. You've got to manually import it into your Qlik Sense Enterprise and Windows site, but it is pretty much identical to this application. Just note that this one is obviously, you know, all of the piping has been redone to work with the Enterprise SaaS APIs. Instead ‘how to get the CPU hit’ and ‘RAM expansion on open,’ in SaaS you won't get the CUP, but you will get the RAM. For the App Analyzer, that's the key metric that that application exposes. And again, that's the key quota that is for the standard tier. That 5 GB is that app open event that's actually a good way of, it's actually the exact event that we throttle with REST Connections where data limits are in place.
… pagination…gotcha. So, basically, the question is: in the SaaS APIs, there are, there's limits on in the amount of data that's returned so you do have to paginate.
And yes, if you actually take a look at the App Analyzers load script; on all of my REST calls to get the apps, to get the spaces, to get the users, all of those are set up to paginate by default. So, if there are, let's say, more than 100 apps in your tenant, that will be a minimum of two API calls to fetch all of those; and yes, you can you can use those example scripts to use in your own applications, if you see fit.
Is there an application like a License Monitor for Qlik Sense client managed?
Great question. And we get asked this a lot. This App Analyzer is the first monitoring application for SaaS, because it is quite frankly, the simplest to port, because of the fact that it's built off of the same JSON structure, the same application metadata that's available on both platforms. It was pretty close to plug and play in our SaaS tenant. That said, we completely understand that you know, user monitoring, adoption, I want to see what applications users are using, what sheets are they navigating to, I want to be able to do things like track expensive objects, absolutely. That is coming. In fact, the latter is coming in the February release, to be able to actually look at performance of individual objects in the application itself from a user perspective.
We are absolutely, product management and R&D are researching the best way to expose those metrics, but we do recognize that you know, that is of course not available in this application. But just to be frank, that's not the intent of this application.
Okay Dan, we have time for one last question.
Okay gotcha. Let's take, this is a good one: so moving from the Windows platform to SaaS, how do we know if it will fit in standard tier?
Really good question. So, we have developed a tool internally. We call them the SaaS Readiness Applications that pre-sales services, a number of different organizations across Qlik can help run on your site. They are just simply; it's a QVF that we can hook up to your site that will do a profile of all of the applications for you, and it will actually, you know, what respective tiers each application would fit in. So please do reach out to your account rep, and we can work with you to run that to make sure that you'll be you'll be as prepared as possible to migrate over to SaaS.
Note on the Readiness app mentioned:
The SaaS Readiness apps are available on the Partner Portal for download. That said, this was built as an internal PreSales tool that was then exposed to Partners. It requires interpretation. There have not been any major enhancements made to this app in a while.
A more complete toolset is now available publicly that incorporates much of the SaaS Readiness app (it was built on top of it) and that can be found in the Migration Center.
Great! Thank you very much, Dan. I think this can be really useful for people.
Absolutely! Thank you, Troy for having me.
Thank you everyone. We hope you enjoyed this session. Thank you especially to Dan for presenting. We appreciate getting experts like Dan to share with us. Here's our legal disclaimer, and thank you once again. Have a great rest of your day.
QlikView and Qlik Sense provides the capability to extend presentation capability by creating extension objects.
It is important to note that Qlik only supports the API calls made to the QlikView or Qlik Sense server. Qlik does not directly support 3rd party extension implementations. For issues with 3rd party provided extensions, the primary support channel is the 3rd party extension provider.
For Qlik to support API-related issues, the script or code must be minimised to show the issue is related to the specific API and not the custom code using the API. This initial troubleshooting and simplification of the script must be done by the extension developer.
Extensions provided by Qlik employees on Qlik Community are not supported by Qlik. These extension solutions are supported within these communities.
Extensions developed by Qlik’s partners, including certified Extensions, are supported by the Qlik partner.
A customer should also consider this:
Beginning November 1, 2022, Qlik is enforcing rate limits to API requests on Qlik Cloud REST APIs. This means any API request originating to a REST API endpoint on Qlik Cloud is subject to rejection if the number of requests to an endpoint exceeds the allowed amount in a specified duration on that endpoint.
API rate limiting is a mechanism for ensuring API and platform performance and scalability. It protects the platform from being overwhelmed by requests made to API endpoints by throttling the number of requests an endpoint will accept before blocking or rejecting more requests from a client.
All REST endpoints in Qlik Cloud have a rate limit tier assignment. Any requests made from Qlik Sense REST connector, requests made from Qlik Application Automation, qlik-cli, any REST client like Postman, or custom application you create is subject to rate limiting.
Limits are enforced per tier, per user, per tenant. When a rate limit is reached, all endpoints in the same tier are blocked until the retry-after time expires. When you exceed a rate limit, your application receives an HTTP 429 status code response such as below:
Depending on the language, client, and code you’ve written to interact with Qlik’s APIs, you need to accommodate it to handle rate limits based upon the APIs you’re using. One way to do this is to add code that handles the 429 response by reading the `retry-after` response header and adding a function that throttles your application to wait until the retry period has elapsed.
Initially, rate limits are going to be enforced on Qlik Cloud REST API endpoints only. It is our intention to add external rate limits for other types of traffic including but not limited to websocket connections in a future release.
Here are the enforcement tiers for the number of requests allowed on an endpoint based on its assigned tiers.
Tier |
Limit |
Description |
Tier 1 |
600+ per minute |
Supports majority of requests for data consumption with generous bursting. |
Tier 2 |
60+ per minute |
Create, update, and delete resource endpoints with occasional bursts of more requests. |
Special |
Varies |
Rate limiting conditions are unique for methods with this tier. Consult the method's documentation to better understand its rate limiting conditions. |
We identified these tiers after observing API requests and rate limiting decisions from the beginning of 2022. Additional consideration has been paid to endpoints with heavy usage to make sure the services the APIs call scale to support the anticipated request volume.
API rate limiting is a mechanism for protecting your experience using the Qlik Cloud platform. Here are some reasons why we’re beginning to enforce rate limits on tenants:
Information about Qlik Cloud API rate limits is visible on qlik.dev beginning today, October 11, 2022. In the API reference section for Manage APIs, you can identify the rate limit tier for endpoints you use. Any special tier endpoints will indicate the specific API rate limit on the APIs reference page.
We released a new API Policy for working with Qlik Cloud’s APIs. Please review this page so you can ensure the end users of your solutions receive a pleasant experience interacting with Qlik Cloud.
Scripts need to be exported using the Qlik Sense Engine APIs.
The Engine API and the Capability API both have a method/function called GetScript() that will allow the app script to be exported. Once the script is accessed, it can be saved to disc, for example, a folder that is perhaps monitored by a change control system. The Engine API can be found here and the Capability API can be found here. The following are examples of both APIs:
Engine API:
IAppIdentifier foundAppIdentifier = _location.AppWithId("....appId....");
IApp app = _location.App(foundAppIdentifier);
string script = app.GetScript();
Console.WriteLine(script);
Capability API:
var app = qlik.openApp("....appId....");
app.getScript().then( function(script){
console.log(script);
});
Get started with APIs on Windows
GetScript Method (Engine)
getScript method (Capability API)
Qlik Sense: call Qlik Sense Engine API with Python
Qlik Sense Repository API/Engine API(Enigma.js) example with JWT authentication: duplicate/scramble/export
Qlik Sense: Getting started with the .NET SDK
Using the change-owner REST API call for app objects or the qlik-cli app object change-owner command results in:
403 - Forbidden (empty response)
This is a current limitation. As specified on the API call information page, the user running the call must be the owner of the object. Even tenant admins won't be able to run the call, if they are not the object's current owners.
As the qlik-cli command uses the same API call, the behaviour is identical.
The user running the call/command is not the object owner.
This is a sample of how to call the Qlik Cloud APIs to assign an Analyzer license to a user with PowerShell/JWT authentication.
In order to call Qlik Cloud API with JWT authentication, the first step is to call POST /login/jwt-session to get the necessary cookies. Which API can be called depends on the privileges the JWT user has been assigned.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$hdrs = @{}
# Put your JWT token here
$hdrs.Add("Authorization","Bearer eyJhbGciOiJSU...pgacN8QqAjKug")
$url = "https://tenant.ap.qlikcloud.com/login/jwt-session"
$resp = Invoke-WebRequest -Uri $url -Method Post -ContentType 'application/json' -Headers $hdrs
#Fetch all required cookies
$AWSALB= [Regex]::Matches($resp.RawContent, "(?<=AWSALB\=).+?(?=; Expires)")
$AWSALBCORS= [Regex]::Matches($resp.RawContent, "(?<=AWSALBCORS\=).+?(?=; Expires)")
$eassid= [Regex]::Matches($resp.RawContent, "(?<=eas.sid\=).+?(?=; path)")
$eassidsig= [Regex]::Matches($resp.RawContent, "(?<=eas.sid.sig\=).+?(?=; path)")
$csrftoken= [Regex]::Matches($resp.RawContent, "(?<=_csrfToken\=).+?(?=; path)")
$csrftokensig= [Regex]::Matches($resp.RawContent, "(?<=_csrfToken.sig\=).+?(?=; path)")
$allCookies = "AWSALB="+$AWSALB.Value+";AWSALBCORS="+$AWSALBCORS.Value+";eas.sid="+$eassid.Value+";eas.sid.sig="+$eassidsig.Value+";_csrfToken="+$csrftoken.Value+";_csrfToken.sig="+$csrftokensig.Value
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
foreach ($cookiePair in $allCookies.Split((";"))) {
$cookieValues = $cookiePair.Trim().Split("=")
$cookie = New-Object System.Net.Cookie
$cookie.Name = $cookieValues[0]
$cookie.Value = $cookieValues[1]
$cookie.Domain = "tenant.ap.qlikcloud.com"
$session.Cookies.Add($cookie);
}
$hdrs = @{}
#Request that modify content such as POST/PATCH requests need the Qlik-Csrf-Token header
$hdrs.Add("Qlik-Csrf-Token",$csrftoken.value)
$body = '{"add":[{"subject":"DOMAIN\\user1","type":"analyzer"}]}'
$url = "https://tenant.ap.qlikcloud.com/api/v1/licenses/assignments/actions/add"
Invoke-RestMethod -Uri $url -Method Post -Headers $hdrs -Body $body -WebSession $session
This video will demonstrate how to use Qlik-CLI for SaaS to migrate Apps from your on-premises Qlik Sense environment to your Qlik Sense SaaS edition. Qlik-CLI makes it possible for scripting and automating App migration.
When running the executescript goal a nullpointer exception occured when trying to execute the ChangeMavenVersion command.
Remove --subjobs flag.
A --subjobs flag was used in the script, which caused the nullpointer exception:
java.lang.NullPointerException
at org.talend.commandline.util.ItemsHelper.getAllSubjobs(ItemsHelper.java:890)
Qlik Sense Repository Service API (QRS API) contains all data and configuration information for a Qlik Sense site. The data is normally added and updated using the Qlik Management Console (QMC) or a Qlik Sense client, but it is also possible to communicate directly with the QRS using its API. This enables the automation of a range of tasks, for example:
Using Xrfkey header
A common vulnerability in web clients is cross-site request forgery, which lets an attacker impersonate a user when accessing a system. Thus we use the Xrfkey to prevent that, without Xrfkey being set in the URL the server will send back a message saying: XSRF prevention check failed. Possible XSRF discovered.
Environments:
Note: Please note that this example is related to token-based licenses and in case this is needed to be configured with Professional Analyser type of licenses you might need to use the following API calls:
Furthermore, combining this with QlikCli and in case you need to monitor and more specifically remove users, the following link from community might be useful: Deallocation of Qlik Sense License
This procedure has been tested in a range of Qlik Sense Enterprise on Windows versions.
$hdrs = @{} $hdrs.Add("X-Qlik-xrfkey","12345678qwertyui") $url = "https://qlikserver1.domain.local/qrs/about?xrfkey=12345678qwertyui" Invoke-RestMethod -Uri $url -Method Get -Headers $hdrs -UseDefaultCredentials
$hdrs = @{} $hdrs.Add("X-Qlik-xrfkey","12345678qwertyui") $hdrs.Add("X-Qlik-User","UserDirectory=DOMAIN;UserId=Administrator") $cert = Get-ChildItem -Path "Cert:\CurrentUser\My" | Where {$_.Subject -like '*QlikClient*'} $url = "https://qlikserver1.domain.local:4242/qrs/about?xrfkey=12345678qwertyui" Invoke-RestMethod -Uri $url -Method Get -Headers $hdrs -Certificate $cert
Execute the command.
A possible response for the 2 above scripts may look like this (Note that the JSON string is automatically converted to a PSCustomObject by PowerShell) :
buildVersion : 23.11.2.0 buildDate : 9/20/2013 10:09:00 AM databaseProvider : Devart.Data.PostgreSql nodeType : 1 sharedPersistence : True requiresBootstrap : False singleNodeOnly : False schemaPath : About
If there are several certificates from different Qlik Sense server, these can not be fetched by subject as there will have several certificates with subject QlikClient and that script will fail as it will return as array of certificates instead of a single certificate. In that case, fetch the certificate by thumbprint. This required more Powershell knowledge, but an example can be found here: How to find certificates by thumbprint or name with powershell
To manage and browse executions of your Tasks, Plans and Promotions, please use the correct objects in the processing entity.
As per our API doc https://api.talend.com/apis/processing/2021-03/ and PlanExecutable section, the object step identifier(stepId) should be equivalent to stepExecutionID.
For example:
{
"executable": "b91cf8b2-5dd1-4b18-915b-4c447cee5267",
"executionPlanId": "0798b8d1-0e12-472f-be02-a0f04e792daa",
"rerunOnlyFailedTasks": true,
"stepId": "09043c9f-02d0-41f6-b3cb-0ea53ffde377"
}
If we put stepId in the field, it is likely to get exception when calling API to execute plan
"Validation do not allow processing entity"
The solution is to get all steps for a plan execution (order by designed execution, only steps, without error handlers) to gain stepExecutionID from query by issuing this API
{{apiUrl}}/processing/executions/plans/:planExecutionId/steps
And the executionID in the successful response array of StepExecution is the one you need to select and put in the stepID field of API call post /processing/executions/plans
various Talend Products
The listed commands are unsupported by Qlik Replicate. The commands work, but Qlik cannot give a guarantee that they will continue to function in the future.
If you do not have Qlik Enterprise Manager (QEM), then this is the option to script task starts and stops. If you do have QEM please look into using the restAPI calls to do the same things. You can reference the QEM developer's guide for information on this API.
To note:
You can start the task multiple ways based on the following parameters and flags:
Parameters:
1 = Start Full Load only
2 = Start Change Capture only
3 = Start Both
Flags Values:
0 = Resume
1 = Fresh Start (like starting as of now)
Start a task:
repctl connect; execute task_name 3 Flags=0; disconnect
Get task status:
repctl connect; gettaskstatus task_name; disconnect
Stop a task:
repctl connect; stoptask task_name; disconnect
Notes:
Repctl execute task=<task_name> 1 flags=1
repctl connect ip=192.168.165.11 port=3552 ; stoptask task; disconnect
Alternate (non-default) data directories must be provided using -d <path>
Alternatively in Windows use: ?set AREP_DATA=<path>
If the Replicate data folder is on another location you would need to set the path for repctl.
Example:
repctl.exe -d "E:\Attunity\Replicate\data" connect;
To run this on Linux you may need to add a back slash in front of the semi-colon:
repctl connect\; gettaskstatus task_name\; disconnect
In addition, while using Linux shell, you have to escape the semicolons with backslashes.
Example:
?./repctl connect\; gettaskstatus task_name\; disconnect
Further note on usage: be certain to have blank space following the semi-colon command delimiter.
The information in this article is provided as-is and to be used at own discretion. Depending on tool(s) used, customization(s), and/or other factors ongoing support on the solution below may not be provided by Qlik Support.
This explains how to set up JWT authentication to call the NPrinting API.
This customization is provided as is. Qlik Support cannot provide continued support of the solution. For assistance, reach out to our Professional Services or engage in our active Integrations forum.
If you do not have a certificate, for testing purposes, it is possible to use certificates generated by default by NPrinting in C:\ProgramData\NPrinting\certificates:
cert.pem
key.pem
For production environments, for security purposes, we recommend that you use a certificate you have purchased or generated yourself.
It is possible to use the debugger on https://jwt.io in order to generate a JWT token.
{ "mailaddress":"youremailaddress@email.com" }The email address should be the email address of an NPrinting user.
Below is a PowerShell script that is calling the API using JWT authentication. The JWT token needs to be passed in the "Authorization" header and be preceded by the "Bearer" keyword, the same method can also be used in the Qlik Rest Connector or Postman.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy $hdrs = @{} $hdrs.Add("Authorization","Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...3TOMbQPF2gCb5xnzB9mKumqldotYBH_2OjKZakYHQzNTRzMNRoH5eG6UovkPBA") $url = "https://nprinting01.domain.local:4993/api/v1/connections" Invoke-RestMethod -Uri $url -Method Get -ContentType 'application/json' -Headers $hdrs | ConvertTo-Json -Depth 10
For information about running script in PowerShell see Qlik Sense QRS API using Xrfkey header in PowerShell
This custom solution is limited to NPrinting API's only and does not apply to Qlik Sense and NPrinting On Demand reporting (NPrinting On Demand with Qlik Sense support NTLM only. JWT is not supported for use with supported Qlik Sense NPrinting On Demand report objects)
This session addresses:
-Understanding new SaaS capability
-How to get started
-Troubleshooting common issues
00:00 - Intro
01:08 - What is Qlik Reporting Service
01:45 - Difference from NPrinting
04:28 - 1st: Sheet Size should match Paper Size
05:32 - 2nd: Reports based on Public Sheets
06:18 - Creating an Automation from Templates
07:30 - Creating Report Automation from scratch
10:18 - Previewing the Report File Size
11:02 - Troubleshooting automation workflow
11:50 - How to skip a block
12:25 - Reviewing Automation logs in QMC Catalog
13:02 - Identifying and correcting errors
13:43 - Information to create a Support Case
14:34 - Limitations
15:18 - QnA: Can you see the file size of a report?
15:56 - QnA: Can you see how many times a report is downloaded?
16:18 - QnA: How does this compare to NPrinting?
16:59 - QnA: Does this work with QlikView?
17:08 - QnA: Can any app be used to generate a report?
17:32 - QnA: Can Reporting be added to a button?
18:12 - QnA: How can you preview the report?
18:55 - QnA: Email attachment or file storage for download?
19:31 - QnA: Is it available for QSEoW?
19:57 - QnA: Rights to generate reports?
20:10 - QnA: Possible to use different report colors than in App?
20:34 - QnA: Possible to adjust font size or resolution?
Resources:
Triggering an automation from a button on a sheet
Help page documentation - Limitations
Qlik Application Automation Info Checklist
Q&A:
Q: How does this compare to NPrinting?
A: NPrinting is a fully developed, on-premises product for QlikView and Qlik Sense, which offers a wider range of report formats besides pdf.
Q: How much of NPrinting functionality does Reporting Services cover and how is the roadmap?
A: Qlik Reporting Service is not a replacement of NPrinting; it is a new reporting service in Qlik Cloud. More features will be added. We have a dedicated forum: Reporting Service
If you have any ideas to improve the service, please submit it as feature request: Ideas
Q: How to send out emails with Excel reports? pdf is fine.
A: The current format option is pdf only.
Q: Is this available on Qlik Forts?
A: No, Qlik Reporting Service cannot access data stored in Qlik Forts.
Q: Can we deliver a report as a spreadsheet? If not, is that a feature for the future?
A: You can accomplish it by using Qlik Application Automation: Using Qlik Application Automation to create and distribute Excel reports in Office 365
Q: Does this apply to QlikView, as well?
A: QlikView is not supported.
Q: Does it matter how many people are distributed to in an automation "run"?
A: No limit on the number of report recipients, but automation jobs have limitations such as the duration of execution. Qlik Application Automation limitations
Q: If we purchase the additional license there will be another additional limitation?
A: It would be up to its license. For further information, please contact your account manager.
Q: Does QRS use our organizations SMTP Server? If so, is the send rate customizable, one of the issues with NPrinting is that the send rate exceeds the allowable by Office365?
A: Any SMTP server should work.
Q: Isn't it possible to combine content from different applications/tabs?
A: A report is generated from a single app.
Q: Is report automation intended for normal users of the application? If so, what security rules are needed to enable this capability?
A: You can only make a report automation with Qlik Sense apps you have permission to access.
Q: Can't the report filter data for each different user that is going to receive it?
A: Yes, you can. Please watch this demo: Did you say Report Bursting? Show me more!
Q: Could you please let me know how can we migrate our Qlik Sense apps from Qlik Sense Enterprise on Windows as well as QlikView apps to Qlik Sense SAAS?
A: Please refer to our help site: Moving from client-managed Qlik Sense to Qlik Sense SaaS
Q: Will the generated reports look exactly like the sheet export to pdf? What happens to elements like tables that don't fit the screen? As far as I remember, they are simply cut in the pdf extract but can flow over to a next page in NPrinting.
A: Please leverage Manual download in PDF. The preview shows you a final outcome in advance.
Q: What about the 100 reports mentioned on the price list?
A: The limitation are listed here: Qlik Reporting Service specifications and limitations
Limitations have updated with the 4th of April, 2024. See Reporting Service Packaging Changes.
Q: Is it possible to add filters based on the different user when distributing the report, like NPrinting, Example John Doe only wants to see Country US, but Jane Doe want to see US & Canada?
A: Yes, you can. Please watch this demo: Did you say Report Bursting? Show me more!
Q: What NPrinting functions cannot be done in Qlik Reporting? My question is: why the client usually makes those evaluations about what functionality he will not have anymore if he has to choose to change from NPrintng to Qlik Repoprting?
A: Qlik Reporting Service is a part of the Qlik Application Automation Connector, which facilitates the report distribution tasks. While NPriting is a separate on-premises product with more mature features. Having said that, more features on the road map.
Q: Where can you send the files to?
A: You can send a report as attachment or a public storage using the following connectors: Amazon S3, Dropbox, FTP, Google Cloud Storage, SFTP.
Q: Hi, about launch an automation from a Qlik Sense app, which rights are needed so users can launch this automation or report?
A: You don’t need a specific right unless your tenant admin disable the Application Automation.
Q: Is there a limit of the size of the PDF that can be generated?
A: No file size limit, there are other factors you may want to consider. Please see the limitations: Qlik Reporting Service specifications and limitations
Q: When will other file formats (for example, PowerPoint) be supported?
A: They are on road map, so please stay tuned.
Q: Can you use only complete sheets or also specific diagrams?
A: Yes, as long as they are public sheet. You may want to consider the size of the sheet; otherwise, the sheet may not fill a report well.
Q: Can you repet please how much reports can we send for free?
A: Number of reports per tenant per day: 10,000.
Q: Can you "print" a whole Table? Or only the first 20 Rows, which are seen?
A: You can make a selection in a block and filter it. Add a selection to the report
Q: Hi, you talk about 5000 free runs : it is about automation or report number ?
A: The limitation are listed here: Qlik Reporting Service specifications and limitations
Limitations have updated with the 4th of April, 2024. See Reporting Service Packaging Changes.
Q: Can you use filter?
A: Yes. Creating a Qlik Reporting Service report
Q: Are there plans to be able to send Excel format as the report?
A: Application Automation can distribute data in a Excel format: Using Qlik Application Automation to create and distribute Excel reports in Office 365
Q: Can you add the company graphical profile?
A: If you can add it as image on a sheet, then yes.
Q: In the future will be possible to generate other report formats such as PowerPoint?
A: If you have an idea, please submit it in our Ideation: Ideas
Q: Can you include 3rd party chart types (e.g., Vizlib charts) in Qlik Reporting Service?
A: Yes, what you can see in the sheet will be in a report.
Q: If you need native reports as PPT you should use NP?
A: Yes, Qlik Reporting Service only generates a report in PDF.
Q: Do you have central place to monitor all automation/reporting tasks? To see errors, last execution time or status?
A: Tenant admin is able see all the automation on the list in Management Console.
Q: Any plans on bringing this to Qlik Sense Enterprise on Windows?
A: No, this is a feature in Qlik Cloud.
Q: Please forgive if this has already been covered as I joined late, can we select landscape or portrait paper format?
A: You can adjust a sheet size, which will be your report size.
Q: When do combination of apps in one report come?
A: Please submit your idea in our ideation page: Ideas
Q: Is multi-format reporting on the roadmap for QRS? or will multi-format reporting stay with NPrinting only? Do you believe that eventually QRS can complete all NPrinting tasks?
A: Qlik Reporting Service is a different feature in Qlik Cloud. If you are looking for a solutin in Excel format, you can use Application Automation to generate and distribute a Excel spreadsheet: Using Qlik Application Automation to create and distribute Excel reports in Office 365
Q: Can you use it for on-demand reporting?
A: You can trigger a report from the sheet by implementing an action button: Triggering an automation from a button on a sheet
Q: The actual limit of 100 report, is 100 runs or 100 reports? I mean, can I send one report to 200 users with 200 different filters?
A: The limitation are listed here: Qlik Reporting Service specifications and limitations
Limitations have updated with the 4th of April, 2024. See Reporting Service Packaging Changes.
Q: I heard about a limit of 100 free reports by tenant by months?
A: The limitation are listed here: Qlik Reporting Service specifications and limitations
Limitations have updated with the 4th of April, 2024. See Reporting Service Packaging Changes.
Q: Can you show us how you set the screen size of the report so that it matches the page layout?
A: You set the sheet size in the app, which will be your report. The reporting service will try to optimize for portrait/landscapes.
Click here for video transcript
In case you missed it, Google finally set Q3 2024 as the date for 100% blocking all content relying on third-party cookies rendered on web pages in Chrome. At Qlik, the date is not a surprise to us, and to all our customers who embed Qlik Sense, we appreciate your collaboration and patience. We’ve been working hard for two years to prepare our products to handle this change and the impact it has on your end users. Here’s some additional information we believe will help you understand the changes Google and other browser makers have made to their software and how to configure Qlik Cloud and Qlik Sense Enterprise Client-Managed to keep embedded analytics working smoothly with your web applications and mashups.
Browser makers are handling third-party cookie blocking in different ways. You can learn more about the browsers Qlik supports for Qlik Cloud and Qlik Sense Enterprise Client-Managed and how those browsers handle third-party cookies and the changes they’re making by reviewing Google's Privacy Sandbox pages, and Saying goodbye to third-party cookies in 2024. Here’s a quick recap for popular browsers:
Microsoft Edge & Mozilla Firefox do not currently break Qlik Sense embedding with default privacy or cookie configurations. Please refer to your browser provider for up-to-date information.
If you're embedding Qlik Sense into a web app or mashup, we recommend reviewing configurations and deployments end-to-end to ensure they implement best practices for operating in browsers blocking third-party cookies. By default, Qlik Cloud and Qlik Sense Enterprise Client-Managed utilize cookies to maintain an authenticated session between the client browser and Qlik services. Because of the browser changes your solution may not display embedded content. To mitigate this issue, you can augment your solution to change how Qlik maintains an authenticated connection from your application to Qlik Sense.
Since release at the end of 2022, embedding analytics from Qlik Cloud is possible using OAuth2 tokens for a cookie-less session. You can learn more by reading our authentication best practices for Qlik Cloud.
Using OAuth2 works with many of our embedding frameworks, including the new qlik-embed framework, capability APIs, nebula and enigma, and the various SDKs.
If you are using classic embedding libraries like the app integration and single integration APIs, you can use a session cookie proxy for Qlik Cloud, although you should look to use qlik-embed where possible in place of these experiences.
The easiest way to mitigate third-party cookie blocking is to use a trusted domain certificate issued by a valid certificate provider. This will enable your web application and the Qlik Sense server to share the same root domain name (e.g. example.com). Therefore, there will be no third-party cookie issue with embedded content between the Qlik server and your web application. The typical implementation uses a wildcard certificate so that your web application and the Qlik Sense server share the same root domain but have their own subdomain names. For example, with a wildcard certificate “*.example.com”, your web application would be “web-app.example.com”, and your Qlik server would be “qlik-sense.example.com”. You can learn more about adding a signed server certificate on help.qlik.com.
This article provides an example on how to use the Qlik Enterprise Manager Python API to start a task from timestamp. The example runs a task by cdcposition using Python API.
This customization is provided as is. Qlik Support cannot provide continued support for the solution. For assistance, reach out to Professional Services.
"""
@author: Vinay Vitta
"""
import json, glob, os, sys, base64, requests, re, time, urllib3
from datetime import datetime
from datetime import timedelta
from calendar import monthrange
from enum import Enum
from copy import copy
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Don't want to print out warnings
RepServer='79' #change Replicate Server name
RepTask='mysql2file' #change for task name
api_base_url = "https://snsql2014a/attunityenterprisemanager/api/v1/" #change for QEM server
auth_string = "Basic c25zcWwyMDE0YVxhZG1pbmlzdHJhdG9yOmhheWV6aXJh" # Change for base64 hash user password ,, make sure to keep the Basic
login_headers = {}
login_headers["Authorization"] = auth_string
print(login_headers)
session = requests.Session()
response = session.get(url=api_base_url + 'login', headers=login_headers, verify=False)
# print(response.json())
if response.status_code == 200:
session_id = response.headers['EnterpriseManager.APISessionID']
api_session_header = {}
api_session_header["EnterpriseManager.APISessionID"] = session_id
session.headers.update(api_session_header)
urlResumeTime='servers/' + RepServer + '/tasks/' + RepTask + '?action=run&option=RESUME_PROCESSING_FROM_TIMESTAMP'
print(api_base_url + urlResumeTime)
data = {"cdcposition": "2023-07-14T01:01:01"} # change for the CDCposition
resumeTimeResponse = session.post(url=api_base_url + urlResumeTime, headers=login_headers, json=data, verify=False)
print(resumeTimeResponse.headers)
Example from the log file of the task executing from timestamp:
00008888: 2023-07-17T16:57:34 [TASK_MANAGER ]I: Task 'mysql2file' running CDC only in fresh start mode, starting from log position: 'timestamp:2023-07-14T01:01:01' (UTC). (replicationtask.c:1770)
00008888: 2023-07-17T16:57:34 [TASK_MANAGER ]I: Feature flags for process are: (ar_feature_flags.c:232)
Qlik Cloud has a built-in method to export apps from your managed spaces, along with APIs available which allow for automation.
Content:
This is the recommended method.
As of the 30th of January 2024, Qlik Cloud has introduced the functionality to Export apps from Managed Spaces.
Space Owner and users with the "Can Manage" role, can now export Qlik Cloud apps from Managed Spaces.
These apps can only be exported without data. Storytelling is not exported.
This possibility allows you to re-establish a parent - child relation of your source and published apps, in case the source app was accidentally deleted.
For more information, see:
You can also export the app from a managed space without data through the REST API or Qlik Cli in a supported way.
These apps can only be exported without data, even if the NoData parameter is not set to true. Storytelling is not exported.
Requirements:
$hdrs = @{} $hdrs.Add("Authorization","Bearer eyJhbGciOiJFUzM4NCIsImtpZCI6IjUzYj...VJaO0zSKZs7Q") $tenanturl = "https://yourtenant.ap.qlikcloud.com" $appid = "7972e3ae-df5c-4ed3-81f4-e2220d76972d" $url = $tenanturl+"/api/v1/apps/"+$appid+"/export?NoData=true" $output = "C:\temp\MyExportedApp.qvf" $firstcall=Invoke-WebRequest -Uri $url -Method Post -Headers $hdrs $url2= $tenanturl+$firstcall.Headers.Location echo $url2 Invoke-RestMethod -Uri $url2 -Method Get -Headers $hdrs -ContentType 'multipart/form-data' -OutFile $output
Reference:
Exports a specific app | Qlik Developer
qlik app export 7972e3ae-df5c-4ed3-81f4-e2220d76972d --NoData > C:\temp\MyExportedApp.qvf
Reference:
Alternatively, an app can be unpublished from a Managed space and obtained for editing. This method maintains data, including storytelling.
Use this method at your own risk. Direct API calls make changes which bypass safety nets and the end result can lead to unexpected results.
Requirements:
This will move the app from a Management Space to your Personal space with the REST API.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $body='{"spaceId":""}' $hdrs = @{} $hdrs.Add("Authorization","Bearer eyJhbGciOiJM4ImtpZCI6IjBkZmQ5YzM2LTcy...YLmG54QLpd") $hdrs.Add("content-type","application/json") $url = "https://yourtenant.eu.qlikcloud.com/api/v1/apps/APPID/space" Invoke-RestMethod -Uri $url -Method Put -Headers $hdrs -Body $body
Troubleshooting:
See following article if any TLS/SLL error are output when running the PowerShell script:
Qlik Sense API: Could not create secure SSL/TLS channel (Powershell)
This will move the app from a Management Space to your Personal space with the REST API, wrapped in the QLIK-CLI.
Alternatively, if qlik-cli is installed, the following commands can be used. In the code, replace APPID with the correct one (e.g. 68aae8b0-3770-435d-951d-7b97469fb78b).
qlik app owner APPID
qlik app space update APPID
qlik app space update APPID --spaceId SPACEID
The admin using the qlik-cli commands will need to have full permissions on the Managed space that hosts the app.
Use this method at your own risk. The direct API calls used in this workaround make changes which bypass safety nets and the end result can lead to unexpected results.
QMSEDX is a community-provided customization. Qlik does not provide support or direct assistance for this solution. For assistance, contact our Professional Services or engage in our QlikView Integrations forum.
EDX is a trigger mechanism for starting a QlikView reload or task from an external source, such as a scheduler or application. To start a task using EDX the QlikView Management API must be used and this is delivered in the form of a Web Service.
QMSEDX is a third-party app designed to perform said mechanism. For more information, see Using EDX in QlikView 11.
QMSEDX is an open source tool that is developed by CwolfX on sourceforge where you can find more information and maybe support: https://sourceforge.net/p/qmsedx/wiki/Home/ Also keep in minde that as it is an opensource it could have other developers making there version available online, juste make sure to contact the one that made the version you are using
For custom developments. Documentation about QMS API is available at Qlik Help.