Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Qlik Sense documentation and resources.
There´s a common request to any Qlik Sense Enterprise Administrator:
"Is there any way to be informed by e-mail when a reload task fails?" Yes, there is!
Before that, let´s have some technical small talk (you can jump to session "Creating your config xml" if you want)
Qlik Sense Enterprise relies on log4Net a very mature Apache Project that is very reliable and powerful. It, besides a lot of features , has the concept of Appender. That concept means that the application being logged (Qlik Sense in our case) does not to take care where the log is being stored, log4net config files handles this.
You can change a config file and choose if your log are meant to be stored into a database, a flat file, a hadoop data lake and you can even send an e-mail for each error message. Qlik Sense Enterprise help to Appenders
1 - Creating your config xml
Pick your favorite text editor and write your config file according this https://logging.apache.org/log4net/release/config-examples.html
No, wait!
I´m posting here a functional config file, you can copy and paste it.
I´m supposing you´re going to use Gmail as the SMTP but is up to you chose any working SMTP that you want
<?xml version="1.0"?>
<configuration>
<!-- Mail appender-->
<appender name="MailAppender" type="log4net.Appender.SmtpAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<param name="levelMin" value="WARN" />
<param name="levelMax" value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<evaluator type="log4net.Core.LevelEvaluator">
<param name="threshold" value="ERROR"/>
</evaluator>
<param name="to" value="admin@domain.com" /> <!-- please use your admin e-mail address here -->
<param name="cc" value="someone.else@domain.com" />
<param name="from" value="yourgmailaccount@gmail.com" /> <!-- you´re supposed to change this -->
<param name="subject" value="Qlik Sense Task Fail!!!" />
<param name="smtpHost" value="smtp.gmail.com" />
<param name="port" value="587" />
<param name="EnableSsl" value="true" />
<param name="Authentication" value="Basic" />
<param name="username" value="yourgmailaccount@gmail.com" /> <!-- you´re supposed to change this -->
<param name="password" value="yourpasswordforGmail" /> <!-- you´re supposed to change this -->
<param name="bufferSize" value="0" />
<!-- Set this to 0 to make sure an email is sent on every error -->
<param name="lossy" value="true" />
<layout type="log4net.Layout.PatternLayout">7
<!-- You can change below code if you want to pretify your e-mail message -->
<param name="conversionPattern" value="%newline%date %-5level %newline%property{TaskName}%newline%property{AppName}%newline%message%newline%newline%newline" />
</layout>
</appender>
<!--Send mail on task failure-->
<logger name="System.Scheduler.Scheduler.Slave.Tasks.ReloadTask"> <!-- Filter what kind of exceptionname is beeing captured -->
<appender-ref ref="MailAppender" />
</logger>
</configuration>
2 - Saving your config xml
You must save your file with LocalLogConfig.xml name and under C:\ProgramData\Qlik\Sense\Scheduler (at least until version April2018). Anything different from this will cause your configuration not work.
3 - Restarting your Scheduler Service
Check if any task is running before restarting the service!!
4 - Test
Get a cup of coffee and wait for your task fail and your alert e-mail arrives at your inbox.
This blog post was written with fundamental contribution of ile that sent me a functional config file
This document shows how Set Analysis can be used to create a prior period comparison that is responsive to your current selections.
The expressions can be applied to any data set where you have your main date field broken out into Day, Month and Year fields.
This application is a Qlik Sense version of the QlikView app that has been uploaded to Community here:
QlikView App: Set Analysis - Prior Period Comparison
There is further discussion on the app and technique in the comments there (including some important notes about when your data set doesn't have values for all dates).
There are a number of other tutorials and downloadable examples on our website here:
https://www.quickintelligence.co.uk/qlikview-examples/
If you have any questions please post them in the comments below.
Steve Dark
Video explanation here: https://www.youtube.com/watch?v=8hDJlc6p5lE
Something that I come across on a regular basis is customers asking about dates in Qlik. Fiscal calendars, complete calendars, creating current year to date vs last year to date, and matching dates between two date fields are all things that have come up.
The answer to all of these is to create a master calendar. That said, creating a master calendar is not always the easiest thing to do or learn from online posts.
I have attached 'Master Calendar.zip' that contains two .txt files designed to automatically create a master calendar from your data.
In 'Master Calendar Variables.txt' you can paste the contents after your current load script in your app and fill in the variables:
- Table name that contains the date
- Whether you want to create a fiscal calendar and which month that fiscal calendar should start in
- Your Date field(s) - if you insert two date fields, it will perform an IntervalMatch
In 'Master Calendar Script.txt' you can either paste the contents below the Variables or use an Include statement below the Variables to call on the script.
That's it! Hope this helps!
Document Chaining in Qlik Sense made simple.
As we all know in QlikView document chaining is drilling down from one application to another automatically transferring selections.
Qlik Sense does not have document chaining yet,but we can do this in two ways.
To make this possible i'll use the second method to get this action in your qlik sense application
Now open to make it happen open a application sheet in chrome browser, copy the url and add the below code
='Your_URL' & '/select/' & GetCurrentSelections('/select/','/',';')
So it will look somewhat like this
='http://exampleQsDev.com/sense/app/aak0-aa55-4ahwe/sheet/f0a33/state/analysis' & '/select/' & GetCurrentSelections('/select/','/',';')
NOW ADD THIS TO THE EXPRESSION OF Website Uri.
when you do your selection the rest of url is made using GetCurrentSelections() function
4th parameter for the GetCurrentSelections('/select/','/',';',200)
Visit : GetCurrentSelections to know more
I have noticed if selection is more than 5 or 6 it will not generate the link as we need for performing the actions.
I am planing to make a proper extension to make this happen but till then this is what we have.
Thank You,
Ajay Kakkar
Hi All,
As we all know Qlik Analytical Platform is quite new in market. People are still in confusion as what QAP is, how it is different than Qlik Sense Enterprise. How to configure QAP Server, Manage QAP and especially what exactly the output of QAP. There are lots of tickets which give you chunk of information like difference between QAP and Qlik Sense Enterprise, how to reload on QAP server when there is no HUB under QAP but there is nowhere how to configure a QAP solution from scratch to end with details.
This document guide you to know what QAP is , how it is different than QSE, setup QAP Server, create and publish Mashup(Embed Analytics ) a, manage QAP Objects and reload application on QAP when there is no HUB at all.
Question: Why Qlik Sense client needs QAP ?
Answer:
QAP setup needs knowledge of Qlik Sense Enterprise (server configuration with security rules) and web developer skills (css and java script and basic HTML) who will help you to embed Qlik Object to web portal.
I have attached one QAP product presentation, you may start with it then below tutorial video so you have enough functional knowledge of product.
Important video tutorial of QAP:
Let’s start from beginning:
Difference b/w Qlik Sense Enterprise and Qlik Analytical Platform:
In principle QAP and QSE is same but in general QAP is subset of QSE means QSE without HUB(No Self Service). QAP is a solution of embed analytics. If no self service is there in QAP it means no "create things" but still developers can create visuals by APIs.
Https://HostName/hub you can view the application but when you open it, it will give you an error you don't have access pass, it means you can't view any apps object on hub.
QAP enables you to display sheet or charts into your website.
Commercial difference, QAP has core based license model unlike QSE which has token based license model (It means no user and login passes, which means you just need to grant the access to users or authorized users to the content which is embedded in web portal )
Recently Qlik introduced core bases license for self service too.
QAP is intended for using our APIs (Extensions, Mashups etc.) to deploy custom solutions.
The Qlik Sense client is disabled in QAP (when you will login to hub you would view the streams and apps but when you will click on any app, it will give you error of access passes).
It has same installation package as QES but applying a QAP license key will disable hub it means you can view the hub, streams list, and application icons but apps objects like sheet, charts, measures and dimensions will not open on HUB. It will give you an error, you hve no access passes.
QAP license policy: when a client buys a QAP token, it comes with minimum 4 cores, it means no matter how many cores or virtual processors are available on deployment server, it will only consume or utilize 4 core among all available cores. So, let’s say client's server has 8 cores or 16 logical processors on Qlik Sense Enterprise server and your application size is 1 GB and you are planning to use same application on QAP, So when you import this application to QAP, It will not work as it works on QSE sever cause QAP(as per the license capacity) will consume only 4 cores out 8 cores and your 1 GB application need 8 cores to perform or load objects like QSE.
Note: Do not be confused, what will happen when you will activate the Qlik Server with QAP license, you will get everything same i.e. QMC as Qlik Sense Enterprise but there will be no Tokens means you can't create any user or login pass which we use to authorize users to access the Qlik Sense content.
To implement QAP server, configured it security with custom properties so you would manage security of data for users with
https://community.qlik.com/docs/DOC-18066
These 9 points will create a stream, import the application and publish the application to the newly created stream and grant access to application and app objects.
Try to use Dev-Hub to view the object i.e single configurator.
Now, we will add one more new security rule which will grant all the users to access the APIs like extensions, mashups, Widget, Single configurator.
***You may create one new custom property QAPExtension with resource type Extension and User and the create a new security rule with Extension Template and write a security rule as:
((User.@QAPExtension=resource.@QAPExtension))
Then go to the extension by Click one start => Extensions => select your extension(Mashup) => go to custom properties and click on the Space bar and select the value you have given while creating Custom properties do the same exercise for users too .
Now, we don’t need to create any custom property because QAP is for all users (no limit) above activity started with *** is when you created a mashup and then you need to provide access of some particular Extension(Mashup) to any specific users.
So, for QAP, write a simple security rule as with template Extension:
((user.name="*" or resource.name="*"))
Which means all user will access the all the APIs (extensions, mashups, Widget, Single configurator).
Often, People ask what if my client hasn't any web portal so in that case above Mashup solution will work, Mashup is kind of website(.html file) or web solution.
This is best with Qlik comes Sense as we can create a HTML page with our Qlik Objects so easily(Basic HTML and JS and CSS knowledge requires).
Now point comes, if all user will come how to secure the data, here comes the real QAP solution,
Generally what QAP says, create an application on Qlik Enterprise or Desktop, import on the QAP server and publish its Objects to client website (Mashup is a HTML page but it’s not a web portal).
So above, you have imported an application, created stream, published application, granted access to all users. What is left now, go to single configurator, select one object, there will be two links come on top side, Iframe and URL, Copy anyone and go to the website page where you need to show these objects and paste it(Please take the help of web developer because every object needs a proper space and alignment).
If any user who is not authorized to view Qlik objects but has rights to login web portal where Qlik Sense objects embedded then it will show an error, so you may ask your web designer to handle this case and put any image instead of INVALID OBJECT message from Qlik Sense.
Now when any user will come it will see an error, access denied or ask for credentials , so You may configure the single sign on here ,Please refer the very useful document for single sign on :
Last Point, how to manage the QAP server application. I mean, reload and all. So, You can’t open any application on QAP HUB and there will be no script editor so how to reload if you have imported the application from Qlik sense enterprise:
If you have imported the apps from another Qlik Sense Server the required data connections are unfortunately not imported together with the qvf-file. That is probably why the tasks fail since the data connections are missing. Check in QMC > Data Connections if they are there and if they are properly set up.
Please refer this article to reload data in QAP: https://qliksupport.force.com/articles/000025412
” When you import an app developed on Qlik Sense Desktop, existing data connections are imported to the QMC. When you export an app from a server, existing data connections are not exported with the app.”
Since the QAP is a Qlik Sense-server without the "hub" and aimed for integration purposes only you have to find a way to import the data connections into the QAP QMC for reloads to work. One way could be to create an empty app in Qlik Sense Desktop with the required data connections and then import this qvf into the QAP. Then you can manage and set up the imported data connections properly in the QAP QMC.
Reach to me for further assistance, Please drop an email to kumar.rohit1609@gmail.com
Add me on Linked In : https://in.linkedin.com/pub/rohit-kumar/2b/a15/67b
Add yourself on Qlik intellectuals page on Facebook at https://www.facebook.com/QlikIntellectuals
Please like this page or add as bookmark and add your ratings so my I will know how effective my solution is for Qlik Users.
You may add your queries below so I would come up with solution. I will try to keep update this document with more powerful inputs. Your queries and inputs will help me to improve the quality of this solution. The aim is to make a perfect document which will guide you to a perfect solution.
During a workshop, the most tedious part is to assign a QlikCloud user into the workshop space. With Qlik Application Automation , this process can be automated from the creation of the space to the assignment of the user into the specific space.
First, I created a google sheet that contains the list of users email, and 1 sheet correspond to 1 workshop.
I used the List Sheets Of Spreadsheet block to list out all the sheets within this workbook
Then I used the Condition block to check whether the sheet is prefix with *. This provide a mechanism to skip any sheet by renaming the sheet.
If it is not prefix with *, the Create Space block will create a space for each sheet using the name of the sheet. You will need to set the type of share and most importantly, set on error to ignore and continue automation and ignore errors. This will ignore this block when the space has already been created.
Once the space is created, the Search Spaces block is used to retrieve the ID of the space as the space assignment is by the ID
Next, the Get Data From Sheet With Headers block is used to retrieve the list of users email from the google sheet
For each user email, the Search Users block is used to retrieve the ID based on the email address.
With both the Space ID and User ID, the Add Member To Space block is used to assign the user into the space. Note the type of roles to assign to the user and the type of member. Also set the on error to ignore and continue automation and ignore errors in case the user has not signed up yet. This will ignore this user and move to the next user.
The following is the entire flow of the Qlik Application Automation
This can then be scheduled to run everyday and possibly more frequently just before the start of the workshop.
Previously I had created the document for calculating working hours between two dates excluding weekends (Saturday & Sunday) & holiday using networkday function.
But what if the weekends are not the Saturday & Sunday (for eg. It is Thursday & Friday)? What if there is only Sunday as weekend and not Saturday. Networkday function won't be useful in this scenario. Of course, there are many other ways to do it and I am going to demonstrate one of the ways here in this post.
I have covered all scenarios step by step in attached word document. Also, attached example qvf files. This code will work for QlikView as well.
We can use the logic described here to work for any defined weekends, but for regular weekends (Saturday & Sunday) I would advise to use inbuilt Networkday function for working day calculation, for working hour calculation you can refer to my previous document as defined in below link
Working-Hours-Calculation-excluding-weekends-and-holidays
Feel free to provide any suggestions.
This doc and app shows a workaround how to make cyclic groups for dimensions and measures. Qlik Sense 2018 November or later is required. The workaround is based on a variable and the button. The solution is not self service but no extensions or add-ons are required and using master items simplifies the usage.
Cyclic Dimension Group
Write dimension dependent expressions using vDimension (instead of GetCurrentField), ex:
=Sum(Sales)/ Sum(Total Aggr(Sum(Sales), $(=vDimension)))
For convenience, add master dimension CyclicDimension =$(vDimension) set to label =vDimension and make the button a master visualization.
Cyclic Measure Group
For convenience, add master measure CyclicMeasure =$(vMeasure) set to label =vMeasure and make the button a master visualization.
This technique has been mentioned before in:
Top-10-Viz-tricks-Qonnections-2019
Top-10-Viz-tricks-Part-2
There are several proposals for cyclic groups, thanks for the inspiration:
Juraj Misina, https://dataqlues.com/getobjectfield-function-and-alternate-dimensions/
NOTE: The Qlik Help Channel on YouTube has the latest and greatest how-to's for the latest releases.
Don't forget about the Qlik Online Help as well. It has videos, samples, tutorials and more.
How we can creating a gantt chart in qlik Sense without use any extension .
Ex: we can also create gantt chart in qlik Sense through anychart extension .
It's common that customers keep geodata in shapefiles, here's how to load them in to QlikView and Qlik Sense using Qlik GeoAnalytics.
Reading local files requires care, here's a checklist:
File location | Use | Tip |
On public url | Use Qlik Sense Server/Desktop, Qlik GeoAnalytics connector | Check the link provides direct access of the file |
On laptop harddrive | Use Qlik Sense Desktop, Qlik GeoAnalytics connector with Qlik GeoAnalytics Plus | Drop the folder in the browser to get the correct syntax: file:/// etc. |
On Sense server | Use Qlik Sense Server, Qlik GeoAnalytics connector with Qlik GeoAnalytics Plus | Make sure the file is accessible for the Sense system user. |
On map server | Use Qlik GeoAnalytics Server and Qlik GeoAnalytics connector | Verify that the file is accessible for the map server system user. Trick, check with "Add service" file browser under "Service administration" in the server admin tool. Turn on local file access in the map server. |
Step-by-step guide
First place the shapefile in a zip file. In this example I'm using the Congressional Districts from US Census. A shapefile is actually several files, at least .shp file and .dbf file. Place the zip file on a webserver (Dropbox is handy).
Open the connector and choose "Simplify" (Load can also be used but it's good practice to simplify especially if the shapefile is large (>2MB).
Choose "Auto" for resolution.
Fill in the url: https://www2.census.gov/geo/tiger/TIGER2016/CD/tl_2016_us_cd115.zip or for local files file:///C:/ (Plus required)
A key field is handy but not mandatory, fill in GEOID in this example.
Fill in the CRS: EPSG:4269 (This shapefile is in coordinate system NAD 83, use internet search to find the EPSG code).
Click next, the operation return two tables: one table with index and the simplified geometry and second table with original non-simplified shapes and attributes. Uncheck "Geometry" in the second table if you just want the attributes.
Click Insert script and Load Data
URL
The url must be with direct access to the file. Test by opening the url in a browser, the download should start immediately. Tip, use "dl" instead "www" to get direct access of Dropbox files. |
Local files
For local zip files in a local file system, QGA Plus or QGA Server is required and use the url syntax file:///C:/Users/bps/Desktop/test.zip. Tip, drag and drop a folder to the browser to get the url. |
CRS
A tip to find out the coordinate system is to take look inside the .prj file if such exist. Tip, use a search engine for a key word to find the EPSG code. |
See below for example apps for Qlik Sens and QlikView as well as the shapefile example data.
Please note that when running the QlikView example you need to insert a connection string with the connector.
iPortal is a web application that allows you to easily impersonate users in a Qlik Sense Enterprise deployment. It is not intended for production environments. iPortal enables you to configure the list of users, groups, and images and login to Qlik Sense using these users. This enables you to demonstrate and test Qlik Sense from the viewpoint of many roles.
Additional security configuration is required to fully enable the Governed Self Service reference deployment. Please refer to the GSS Setup Guide for more information.
For documentation on setting up a local iPortal development environment, click here
Today, I'd like to share with you our current App backup solution using Powershell and Qlik-Cli.
As you know, a production environment needs backups and Qlik Sense Enterprise does not offer such a thing by default so I decided to build a solution.
Using Qlik-Cli for Windows, I put in place a solution that will not only backup my published and unpublished apps but will also create a folder structure to match your streams.
The unpublished apps are backed up inside the "My Work" folder using the app owner's name as a directory name. This allows to easily find the app owner when performing a search in the folders.
Square brackets in the App's name will be removed because you cannot create a file with these characters in Windows.
The script is scheduled using the Windows Task Scheduler with the following command:
Here's the code:
$ErrorActionPreference = "Stop"
Try
{
# set export drive and directory
D:
cd D:\QlikBackups
# connect to the Qlik Server. Replace <ServerName> with your Qlik Sense hostname
Connect-Qlik -ComputerName <ServerName> -UseDefaultCredentials -TrustAllCerts
# Export each apps from the previously defined streams to qvf
Get-QlikStream | % {New-Item -Name ".\$($_.name)" -Force -ItemType 'Directory'} | foreach {Get-QlikApp -filter "stream.name eq '$($_.name)'"} | foreach {Export-QlikApp -skipdata -id $_.id -filename "$($_.stream.name)\$($_.name -replace '[[\]]','').qvf"}
# set the export folder to the My Work area for unpublished apps
cd "D:\QlikBackups\My Work"
# Create a folder structure for all the app owners
Get-QlikApp -full -filter "published eq False" | % {New-Item -Name ".\$($_.owner.userId)" -Force -ItemType 'Directory'}
# Export each app into their folder
Get-QlikApp -full -filter "published eq False" | foreach {Export-QlikApp -skipdata -id $_.id -filename "$($_.owner.userId)\$($_.name -replace '[[\]]','').qvf"}
}
Catch # In case of error, send an email to the Qlik administrators
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
$Time=Get-Date
"Error: $FailedItem Message: $ErrorMessage Time: $Time" | out-file d:\log\QlikBackup.log -append
$FailMailParams = @{
To = 'qlikadmin@MyCompany.com'
From = 'MyQlikServer@MyCompany.com'
Port = '25'
SmtpServer = 'smtprelay.MyCompany.com'
Subject = 'MyQlikServer Backup Failure'
Body = "The backup failed. The error message was: $ErrorMessage"
}
Send-MailMessage @FailMailParams
}
My next steps are:
This is a short summary of how I connect to my corporate Active Directory and extract employee records and group memberships for theses employees. This is the most time efficient way I have found that works in my environment, but there might other query options.
NOTE: The below example connects to domain.local. Please change these references to your domain name.
First step is to define a connection in Qlik Sense. I have found that OLEDB and ADsDSOObject provider works. For server side app deployment, make sure the service account is allowed to connect to the AD, or add name and password or a authorized user in the connection settings.
OLEDB CONNECT TO [Provider=ADsDSOObject;Integrated Security=SSPI;Data Source=ldap://domain.local;]
In the load script connect to the directory with a LIB CONNECT string.
LIB CONNECT TO 'LDAP Domain.local (tko)';
The below load statement extract all person records from AD. In the SQL query define the field names exactly as they are named in your AD. Notice, the FROM definition requires the LDAP URL to your domain.
ActiveDirectory:
LOAD *
WHERE Not(userAccountControl bitand 2); // Exclude inactive accounts
SQL SELECT
co,
department,
division,
employeeType,
givenName,
l,
mail,
manager,
mobile,
pager,
sn,
sAMAccountName,
telephoneNumber,
title,
userAccountControl,
displayName,
streetAddress,
postalcode,
st,
physicalDeliveryOfficeName
FROM 'LDAP://domain.local'
WHERE objectCategory = 'person' AND memberOf = '*'; // The * wildcard returns all records in Persons's objectCategory
Next step is to extract a list of all the existing groups in AD. Notice that your domain name has to be referred both in the FROM and WHERE in the SQL query.
ActiveDirectoryGroups:
LOAD
name AS GroupName,
name ,
distinguishedName;
SQL SELECT
name,
distinguishedName
FROM 'LDAP://domain.local'
WHERE objectCategory = 'CN=Group,CN=Schema,CN=Configuration,DC=domain,DC=local';
Extracting all members of each group enables pairing groups with their exact members. Each group is queried to extract the member list.
FOR i = 0 to NoOfRows('ActiveDirectoryGroups')-1
// Pick next group name and distinguished name
LET vGroupName = Peek('name' , $(i), 'ActiveDirectoryGroups');
LET vDistinguishedName = Peek('distinguishedName' , $(i), 'ActiveDirectoryGroups');
TRACE $(i) of $(#vNoOfRowsActiveDirectoryGroups) : $(vGroupName);
// Load person identifier from the current distinguished group
// The result is stored in Temporary table
// Each iteration is added to the same Temporary table
TmpSamAccountNameGroups:
LOAD
sAMAccountName,
'$(vGroupName)' AS GroupName
;
SQL SELECT
sAMAccountName
FROM 'LDAP://domain.local'
WHERE objectCategory = 'person' AND memberOf = '$(vDistinguishedName)';
NEXT
The extracted members are left joined to employee table, to map employees with their group membership. With the result of one table showing all employees and their AD group membership
// Left join to exclude sAMAccounts from group view that are not active
Left Join ('ActiveDirectory')
LOAD *
Resident TmpSamAccountNameGroups;
// Drop temporary tables
DROP Tables TmpSamAccountNameGroups, ActiveDirectoryGroups;
Comparing indicators with Multi KPI
Goal: compare current year with previous year sales in same KPI. See image below.
In load editor add script:
sales:
load * inline [
year, sale,
2017, 50198,
2018, 61532,
2019, 63182
];
1) Add Multi KPI object (extension Qlik Sense)
2) Add a dimension
=ValueList('Current year', 'All')
3) Add variables
4) Configure KPI appearance
Properties Appearance > Dimensions
5) Add a measure Current Year Sales
Properties:
6) Add a measure Previous Year Sales
Properties:
7) Add a measure Current Year vs Previous Year Percentage
Properties:
8 ) Add a measure All sales
Properties:
9) Add a measure Annual average
Properties:
Done!
Best regards,
Ezir
Welcome to the QS CSS MasterClass.
Motivation:
In my career as a PreSales, I need to create quite a few "user-appealing-applications". Sometimes users request a specific design or specific functions I need to implement in Qlik Sense. As we all know, Qlik Sense is built for simplicity & self-service and sometimes it could be challenging to achieve the desired result. But through the last couple of years, there were a lot of tips and tricks around using CSS to create completely new designs and functions to implement a better information design concept.
This is where the MasterClass starts. I have created an application that gathers a couple of these tricks and explains them more in detail. In addition to that, it is very easy to understand because you can see the result directly within a Qlik Sense App. If you think this sounds interesting, take a couple of minutes and join my short tour through the app. I won't cover all aspects in detail. This tour will give you an overview of the documented and used tricks within the app.
Content:
The following list will give you a brief overview of what topics are focused on the specific sheet within the app.
Sheet | Description |
You can add CSS definitions to your app by using themes or by using so-called "helper- objects". On this sheet, I will explain when you should use which option. | |
A "helper-object" carries and injects the CSS definition on a specific sheet. This sheet helps you to hide this object and which objects can be used for it. | |
This example demonstrates how to add better guidance to your dashboards by segmenting your background. | |
Sometimes selections can be mandatory to consume a dashboard, or the creator likes to guide the user through the filter pane by using colored filter boxes. I show you how. | |
How to hide objects like the selection bar or elements within context-menus in case these functions shouldn't be used in the app or on this sheet? | |
Adding background-pictures to your dashboard can spice up the overall flavor of your dashboards. This can be used for segmentation or just to add some style. | |
In this section, we will completely change the look and feel of a straight- and pivot table. | |
Let's create an illusion by just moving our objects closer together. After that, I'll look like we just have one. | |
This sheet explains the easiest way to implement your own font by using a custom theme. It's just a few lines of code. | |
No matching grid? This trick shows you how to create your own grid for a specific sheet by changing the metadata through Qlik Engine API Explorer. |
Installation:
Under "Attachments" you can find the required package. The zip package includes a qvf file (Qlik Sense - CSS MasterClass V 1.0.qvf) and an extension (ShowHTMLfromMeasure). After importing the extension and app we need to change a quick configuration because the app has a different ID on your system now.
Open sheet called "Using Background Pictures". Normally this sheet has a background image. This gets referenced over the internal app-ID. Click on "Edit Sheet" and select the displayed CSS box ("CSS config HERE"). Navigate to submenu "Styles" and change the used app-ID in "Styles (CSS)" to your app-ID (displayed in the URL). Now you should see a background picture on this sheet.
Usage:
Every sheet has the same structure. First, a description explains the trick in general and how it's working. On most of the sheets, you also get the explanation for the used CSS selectors. On the right-hand side, you can see the used code in a black code box. You can't copy the code from here. To do so enter the "edit-mode" and click on the "CSS config HERE" button. This object is always the "Helper-object" that carries the used and explained CSS code. Navigate to the "Styles" submenu and copy the code from the "Styles (CSS)" window. I recommend using an external editor to modify or review the CSS code.
In case you like to transfer the trick to your dashboard you just need to change the object ID. If you don't know how to find the object ID this will be explained on sheet "Hide (Helper-) Objects".
Communication is a key point for any project and failing to do it may compromise your success.
Having this in mind, I dedicated some time to find out a way to display a message on the Qlik Sense HUB and make sure that all users would be able to see that.
Thanks to @j_twardziak and his post Showing support message on top of the Qlik Sense Hub page, my target was accomplished.
However, when I implemented my version, I realized that the header message was not being displayed on the HUB unless CTRL + F5 was pressed (a normal behavior for web). Then, how do you communicate with your users if they didn't receive the message?
In the document attached, I shared step by step how to implement a header message (my version) on the Qlik Sense HUB and what needs to be changed in order to force the client-side to be updated. Before doing any changes, ALWAYS make a backup of the files.
Here is how it looks like.
Although I didn't have implemented @berndjaegle 's suggestion, he explains how to add an URL to the header message in the original post.
Qlik Sense environment
IMPORTANT: Keep in mind that the changes shared here are not supported by Qlik.
Best regards,
Huberto Pereira Haidemann