Today's guest blogger is my product marketing partner, Nicole Tamms. She will be providing an update on our QlikView and Qlik Sense dual-use offer.
Over 100 Thousand Dual Users
Customers like you are adopting our new QlikView and Qlik Sense dual-use licensing at an incredible rate, since the offer was first announced by Qlik CEO Mike Capone at Qonnections 2018 in April and via press release in August. We are proud to share we’ve achieved 100 thousand licensed dual users! QlikView and Qlik Sense are better together; and dual use is the most cost-effective way to adopt Qlik Sense while maintaining your QlikView footprint. At a mere 30 percent uplift on your current annual maintenance, you can give the gift of Qlik Sense to your entire QlikView user base.
As your organization evolves and digital transformation becomes a business imperative, Qlik Sense, our modern analytics platform, may be the best fit. It supports the full spectrum of analytics use cases to meet the requirements of your evolving organization.
New dual-use customers expect Qlik Sense to provide a modern UI, faster development, ease of use, and best in class mobile support. Many have already found their QlikView data models can be directly used in Qlik Sense. Several customers have shared their plans to utilize Qlik Sense on new projects. And others have been interested in adopting Qlik Sense for a while, but budget constraints prevented them from doing so. They found the dual-use offer enabled them to acquire the licenses they needed to kick-off new projects quickly, instead of having to wait on budget.
We’d love to hear from you too. You’re invited to participate in a quick survey on your QlikView usage and interests. We want to ensure we’re heading in the right direction, speaking your language and continuing to meet your needs. Click here to participate in our 5-minute survey. The first 25 respondents will receive a free Qlik t-shirt*.
Dual use requires a QlikView November 2017 or later release. Whether or not you’re planning to adopt dual use right away, there is still tremendous value in upgrading to the latest release, QlikView November 2018. Recent releases include the latest Qlik Associative Engine, which is the same engine powering Qlik Sense; plus, advanced analytics integration, a new shared file structure, a fresh graphics library, improved security, support for non-English characters, and more found here.
For more information on the dual-use program, check out the attached datasheet and contact your local account manager.
*Only respondents located in the United States are eligible for the t-shirt giveaway. Additional rules, plus terms and conditions, can be found here.
... View more
With 2018 coming to a close I wanted to look back on a few of the coolest things to come a developer's way from Qlik this year.
Qlik Sense Themes
Themes was a feature that's been requested since Qlik Sense was first introduced, and it was delivered with Qlik Sense February 2018. Themes define the style of an app. Developers can create custom themes and apply themes to their extensions and mashups. Below are some links to resources and a few cool projects.
Custom Themes Introduction - Start here to create custom themes
Theme API - Theme API reference
SenseTheme - A neat tool to create a theme using a UI
Qlik Sense Theme: Matrix - This is necessary
Picasso.js is Qlik's own open-source library for creating visualizations. It enables developers to create visualizations by simply defining scales, components, and interactions. It's totally responsive, allowing a developer to configure which parts of the visualization are shown at different sizes, it renders in svg or canvas, and it can be extended and themed.
Picasso.js - Here you can find the docs, tutorials, and examples
Picasso Designer - Cool Qlik Sense extension for creating Picasso.js visualizations in Qlik Sense
The Qlik Associative Engine inside a Docker container. Yea, this is awesome. Add some open-source tools. Scaling and performance management with Mira. Communication with the Qlik Associative Engine with enigma.js. Simple data loading with halyard.js. And rendering visualizations with Picasso.js. Oh yea, this is definitely awesome.
Qlik Core - Here you can read more about Qlik Core, find tutorials, and try it out for free
... View more
As we continue to invest in capabilities and improve the user experience of Qlik Sense, I am pleased to introduce new navigation options in the Qlik Sense client.
Qlik Sense Cloud and Qlik Cloud Services were updated today to allow users to easily navigate between Data, Analysis, and Stories with just one click. We also have consolidated the list of actions and navigation options into one single menu on the top left-hand side of the client. The menu is now context aware so only the options which are applicable to the current space will show.
Navigation Tabs Across top
Combined Navigation and Action Menu
These are part of the single page application experience in which less page reloads in the client provides easier access to different spaces as well as reduces to move between spaces. These changes are now available in Qlik's cloud offerings and will be available in the Qlik Sense February 2019 release installation packages.
... View more
The Now and Today functions can be used in a chart expression or in the script to return a timestamp or current date from the system clock, respectively. They each take one optional parameter (0, 1 or 2) that is used to indicate when the timestamp or day is captured. By default, the parameter is 1. Let’s look at some examples of the Now and Today functions using all 3 parameters and see how they differ.
Now(0) - Returns the timestamp of the last finished data reload. Today(0) - Returns the day of the last finished data reload.
When using the 0 parameter, the timestamp or day can vary depending on when the reload occurred – it may be 5 minutes ago or one day ago as seen above. If you are using one of these functions in the script with the 0 parameter, note that the last finished reload will not be the reload that is currently running but rather the last finished reload (the reload that ran previously). In the example above, the last finished reload was yesterday, December 6th.
To get the day or timestamp of the current reload, use 1 as the parameter or no parameter as seen below.
Now(1) or Now() - Returns the timestamp of the function call in the current reload. Today(1) or Today() - Returns the day of the function call in the current reload.
When using the 1 parameter, the results will vary depending on if the function is being used in a chart expression or in the script. In a chart expression, the timestamp or day will be when the expression is added/created or refreshed. For instance, if I refresh a sheet that is using the Now function in an expression, the timestamp will be updated to when that function was called in the refresh. If these functions are being used in the script with the 1 parameter, keep in mind that the Now and Today functions will reflect the timestamp or day when the app was reloaded. Therefore, if you are looking at the results of these functions the next day or a week later, they will look old because they are reflecting the timestamp or day of when the app was reloaded (which may not be the current day).
Using 2 as a parameter will show the timestamp or day when the app was opened.
Now(2) - Returns the timestamp when the app was opened. Today(2) - Returns the day when the app was opened.
The parameters used in the Now and Today functions allow users to pinpoint when they want the timestamp and/or day captured. I have used these functions with other functions such as the Date function to format the timestamp and/or day and the ConvertToLocalTime function to convert the system timestamp and/or day to another time zone. There are many ways the Now and Today functions can be used in chart expressions and within the script.
... View more
Qlik Core has been with us for a while and now with the November release a lot more exciting stuff are delivered by Qlik's R&D team.
Qlik Core Scaling, is a repository with a preset solution ready to be deployed on a Google Kubernetes Engine. Since the solution is a group of .yaml files, we can deploy them in any Kubernetes host provider like Azure's Kubernetes Services.
Today I will go over on how to setup Azure for Qlik Core and on the next blog on how to setup Qlik Core. For this you must have sufficient privileges in Azure to setup an AKS Cluster.
First we need to create the AKS cluster that will hold solution. Go to Azure's Dashboard, click 'All Services' and then 'Kubernetes Services'. Click on the plus button to create the cluster. Add your Resource Group, give at a name and put 3 nodes just for a start, you can scale up later.
On the next screen make sure you check the enable RBAC.
Then on the next tab Networking, select "HTTP Application Routing".
You can have the rest of the tabs with their default values. On the final screen, review and create the cluster.
Now lets move on installing the Azure CLI and view the dashboard.
Run az aks install-cli, then get your credentials locally,
az aks get-credentials --resource-group <your-resource-group> --name myTestCluster and then open the dashboard
az aks browse --resource-group <your-resource-group> --name myTestCluster. This will open a new browser window with your Kubernetes dashboard.
We have setup the Azure Kubernetes and on the next blog I will explain on how setup Qlik Core.
... View more
Hey guys, hope you are enjoying the new Qlik Community and the many relationships it fosters as well as the numerous resources it offers. Today I want to introduce and demonstrate our new machine learning capabilities added to the Qlik Sense November 2018 release. At Qlik we have been talking about augmented intelligence for a while and we have delivered some great innovations, such as our new cognitive engine and the Insight Advisor; both released earlier this year. Now we have taken things to the next level and are yet again leading BI innovation with the release of precedent based machine learning.
With any AI functionality, it requires to be constantly fed more and more information in order to get smarter and smarter. You could think of it as an inquisitive child. With the Qlik Sense November 2018 release, we've released features under the umbrella of what is called precedent-based machine learning. Precedent-based learning allows our cognitive engine to constantly learn from the data it sees, so it becomes a learning model. As it sees more data, it gets smarter and uses that to its advantage to give you better predictions and at the same time solicits user feedback so it can produce significantly smarter insights.
Watch this brief video to learn more and see these new capabilities in action.
Can't see the video? YouTube blocked by your organization or region? Download the attached .mp4 to watch on your computer or mobile device.
Mike Tarallo (Twitter) Qlik
... View more
The Dashboard bundle contains six of the most popular extensions available in Qlik Branch (Garden). Button for navigation: it’s a very handy piece that let users to add buttons that trigger selection actions and/or navigation actions. Users can use it for simple navigation shortcuts, like navigating to next page or they could use it for more advanced actions, such as selection actions. A user could use one or multiple actions on click making the button a very attractive tool to create complex workflows within an app. This extension is commonly used to set variables values. Date range picker: this nicely finished date picker allows users to quickly and easily select dates and ranges. It’s very simple to configure, a user need to specify what data field the Data range picker will be displaying and single date or interval. The extension let users to define advanced options such as min, max, and/or start date. On-Demand reporting: generation of Qlik NPrinting reports is now possible from inside apps. This extension will display a button that will launch the execution of a Qlik NPrinting report. Simply add a NPrinting server path, pick an app, the report and the preferred export format. Show/hide container: it’s a placeholder for master items. This extension let users to decide when to show or hide each one of the elements that are contained in the object. To get the show/hide conditions to work users typically need an action on a second object. For example, it’s very common to use this extension in conjunction with the “Button for navigation” extension that comes in the bundle. The Button extension triggers an action that will make a chart show and other to hide. Another use example could be based on selection actions. Let’s say we have two fields, product categories (5) and product (200) and we are analyzing sales numbers, we want to display sales date by category as a bar chart and when a single category is selected we want the chart to display the products sales as a tree map. We could create both charts add them to the master library and then define the show/hide conditions when including the charts in the extension. Tabbed container: like the Show/hide container, the Tabbed container can hold multiple master items. This time to navigate from on item to another there’s a pre-built tab system, so there’s no need for a second element. Users could create multiple views of the same data, different objects, or as in the screenshot below to add a long description that helps users’ comprehension of the displayed chart. Variable input: users can set values with buttons, drop-downs, sliders, and input boxes. More info about this extension in one of my previous posts. Please check the online help to learn more about the new Dashboard Bundle and its limitations: https://help.qlik.com/en-US/sense/November2018/Subsystems/Hub/Content/Sense_Hub/Visualizations/DashboardBundle/dashboard-bundle.htm Hope you like it. AMZ
... View more
I’ve seen a few people ask how to authenticate from an app built with the Capability APIs recently, and while there’s a lot of resources regarding authentication with Qlik Sense in general, I thought it could be helpful to some people to discuss a few details when using the Capability APIs. Let’s clear up one thing right away. There’s no endpoint to call to pass along a username and password and authenticate users. Qlik Sense is not an identity provider. If you don’t already have an identity provider and expect Qlik Sense to handle that for you, that’s just not how it works. There are two more things to keep in mind. Requiring authentication is going to trigger CORS, so make sure your app is whitelisted. And when you use the Capability APIs you must load some CSS files and a require.js file, but fetching those files requires that you are authenticated. If you don’t take care of authentication before trying to load those files, then loading them is going to fail. When you configure your virtual proxy to use an authentication module the virtual proxy will redirect you to the authentication module when authentication is required. You can either use the default authentication module or build a custom authentication module. The default authentication module uses Windows authentication (NTLM/Kerberos) and can authenticate Windows users. It’s relatively simple to configure. Just choose ticket as your authentication pattern and define either “Windows,” to show a popup, or “Form,” to be redirected to a new window with a form, in the windows authentication pattern field. The “Form” pattern will only work if your app is behind the virtual proxy. You can also create and use a custom authentication module. To configure your virtual proxy to use a custom authentication module choose ticket as your authentication pattern and then enter the address of your custom authentication module in the authentication module redirect URI field. Just how should you create your custom authentication module? There’s really not one answer to that question. The basic idea is that you need to get a ticket from the proxy API, and then request a resource behind the proxy with the ticket included as a query parameter. That will return a response with a set-cookie header and create a session cookie that will be used to authenticate all subsequent requests. But how you go about this really depends on your individual case. I’ll give you a couple of examples. If your app itself is behind the virtual proxy (created in dev-hub or uploaded to extensions and served from Qlik Sense), then the best flow would probably be for your authentication module to redirect to a login form which verifies the user’s identity, gets a ticket, and redirects the user back to the app with the ticket appended as a query parameter. Since the app itself is behind the virtual proxy this will consume the ticket and create a session. If your app is not behind the virtual proxy but already has the user information available (from a session cookie for your app, for instance) then your authentication module can request a ticket and return the targetUri (part of the response returned when a ticket is requested, generated by the initial request URI) with the ticket appended. This is exactly what the qlik-auth library for node.js does so check that out if you are interested in this pattern. If your app is not behind the virtual proxy and does not have user information before it requests resources from behind the virtual proxy then your authentication module should redirect to a login form to verify the user’s identity, get the ticket, and then consume the ticket (you can just make a get request to the /qps/user endpoint) before redirecting the user back to where they came from. You can also completely skip the authentication module redirect stuff and just check if the user has a session, and if not, handle it. Just remember that the resources (the CSS and require.js files) will have failed to load if you try to load them in the head of the document and you are not authenticated, so you’re going to need to make sure they load somehow. Generally, if I’m skipping out on the authentication module I’ll asynchronously load those assets once authentication is complete. You can use JWT or ticket authentication for this, but if you use ticket authentication Qlik Sense will try to use either the default authentication module or a custom authentication module depending on whether you’ve specified an authentication module redirect URI, so you may see some errors. The idea is to just make a call to the /qps/user endpoint (prefixed with the virtual proxy you want to authenticate to of course). The response will contain a value for session, either an object with user information, or the value “inactive.” If it’s inactive, you can do something like show the user a login form which submits to an endpoint that either returns a JWT or a ticket from the QPS API, and then make a request to the /qps/user endpoint again, passing the JWT in the headers or the ticket as a url parameter, in order to receive the response with the set-cookie header which will create the session cookie. Then you can load the assets and carry on with the rest of the app. That’s all I have for now. If you have any questions you can jump on the Qlik Branch Slack and subscribe to the authentication channel or ask me below.
... View more
Four years ago, I wrote the Customizable Straight Table blog illustrating how you can build a custom table in QlikView. Last year, I wrote the Custom Report Extension blog that shows how to use the Climber Custom Report in Qlik Sense. Today, with the help of Patric Nordstrom and Jason Michaelides, I am going to blog about how you can build a custom report in Qlik Sense. With continued enhancements to the Qlik Sense table such as column show conditions and the ability to change the column order of a table, building a custom report in Qlik Sense is possible right out-of-the-box. Patric built the attached Qlik Sense app that illustrates how to build a custom report in Qlik Sense. In this blog, I will review the steps needs to build your own report. Below is an example of how the report looks with some dimensions and metrics selected. On the left there are two filter panes, one for the dimensions and one for the metrics, that can be used to select the columns you would like to see in the report. Then there is the table which by default will be empty and will prompt the user to select the dimensions and metrics. In this example app, the user is encouraged to select no more than 5 dimensions and 4 metrics. Let’s start by looking the script. You would load your data as usual but what you will need to add to the data model is a data island for the dimensions and for the metrics. In the script below, you can see how Patric did it, providing very clear details of each dimension and metric. The first field in each table is the dimension/metric grouping, the second field is the dimension/metric name as it will appear in the filter panes. The third field is a number to represent the default order of the dimension/metric columns in the report and the last field is description data about the dimension/metric. The KPIs table has a fourth field that shows the formulas for the metrics. Once the app is loaded with the data islands, you can begin to build the custom report. You will need to add two filter panes and a table to your sheet. The Dimension filter pane uses the Dimension field and the Metric filter pane uses the Metric field. In the table, you will add 5 dimension columns and 4 measure columns since that is what is encouraged in this example. Now here is where Patric used Jason’s FirstSortedValue trick. For the first dimension, enter the text below in the Field. And this in the Label: So, you may be wondering what the expression is doing. Basically, the Dimension field is being sorted by the DimensionNo field and then, since the third rank parameter is being used, the expression returns the Dimension for the nth sorted value. In the report screenshot above, the dimensions Product Name and Product Number were selected. When you sort these by DimensionNo, Product Name comes before Product Number since 3 comes before 4 and when you rank these by their sorted value, Product Name is first and Product Number is second. This same idea was used in all the dimensions as you can see in the second dimension shown below. The measures are done in the same manner. Below is the Field and Label for the first measure and the additional measure columns will follow the same concept as the dimension columns. Field Label Now the last step is to add a conditional show to the columns. Basically, you only want the column to show if there is a dimension and/or metric selected to be displayed. For the first dimension column, you will set the “Show column if” property to: For the second dimension, it will be the same except if greater than or equal to 2 and so on. The first measure will have the “Show column if” property set to: Additional measure columns will follow the same format as described above for dimension columns. Once all the columns are added and the properties are applied, the user can select the dimensions and metrics they would like to see in the report. By default, the column order will be based on the DimensionNo field but feel free to drag columns in the table to a new position. For more information on how Jason used FirstSortedValue, check out his document or Qlik Sense Help. Thanks, Jennell
... View more
H ey Guys - a few weeks ago I introduced the Qlik Cognitive Engine in the Design Blog, What is the Cognitive Engine? and how it is responsible for providing an (AI) Augmented Intelligence driven experience. BUT...exactly what does that mean - "Augmented Intelligence driven experience"? Sounds like marketing-speak, right? Actually, it's not a play on words. These are powerful terms that represent machine learning AND human intuition. Simply stated - instead of just solely relying on pure machine automation, as you may find with typical Artificial Intelligence applications, Augmented Intelligence works with human interaction and perspective to solve complex business problems. And when combined with our proven, super-fast, patented Associative Indexing technology - you enable context-aware suggestions that help you ask those random questions or spot hidden insights while exploring data freely. So let me see - (Augmented Intelligence + Associative Indexing) .....hmmmm...I think I'll now call this AI ² - - The Cognitive Engine is what powers our automated chart suggestions and our new Insight Advisor available in Qlik Sense. With the Insight Advisor you can search a governed library of familiar business terms that produce multiple insights for you to explore instead of a just a single presentation of data. The Insight Advisor allows you to do so much more than just ask data questions. It can be used as a way to jump start the creation of your analytics, or better yet, as you explore and make selections - new questions may be triggered and at that moment you can open the Insight Advisor and search while in the CONTEXT of your exploration using familiar business terms to find what you are looking for. Taking this one step further, the Cognitive Engine not only learns from the data, but your behavior as well, allowing you to teach the Cognitive Engine so it produced significantly relevant insights for you to explore. Want to learn more and see this in action? Check out this brief video and let us know what you think, we want to hear from you. Regards, Michael Tarallo (Twitter) Qlik The Insight Advisor NOTE: Can't see the video? YouTube blocked by your organization or region? No problem, just download the attached .mp4 file to watch on your computer or mobile device.
... View more