Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
This forum is where any logged-in member can create a knowledge article.
Looking for the simplest way to create a Gantt chart in Qlik Sense to further streamline data-driven project management in your company or organization? We’ll show you one right now! Follow this quick tutorial and you’ll learn how to easily visualize project tasks and activities as data in a matter of minutes — on smart, interactive Gantt charts using the intuitive Gantt Chart extension for Qlik Sense by AnyChart, Qlik's Technology Partner.
Watch the video tutorial:
Or read the text-and-pictures version below.
In Qlik, everything starts with the data.
We are going to create a Gantt chart based on data from an XLSX file that looks as shown below.
The tables in the file represent the structure of a company and its project schedule. There are three departments, each of them carrying out several projects. Each task within a project is assigned to a certain employee.
First of all, we will create an app, add this data to Qlik, apply the suggested associations, and load the data.
Then we need to make sure that Qlik established proper associations between tables.
Let’s create a sheet and add three filter panes by dropping three fields on the sheet: ‘department_name’, ‘project_name’, and ‘task_name’.
If we switch from ‘Edit’ to ‘View’ and try to select a department and a project, we will see that associated tasks are displayed correctly.
Now that the data is loaded and the associations between the tables are set up the right way, we can add a Gantt chart.
Go to ‘Custom objects’, find AnyGantt, and drop a Project Chart on the sheet, below the filter panes we added before.
To configure the Gantt chart, we need to add dimensions representing the hierarchical structure of our data.
We will use the following dimensions: ‘department_name’, ‘project_name’, and ‘task_name.
The next step is adding measures.
Let’s use the ‘start_date’ and ‘finish_date’ fields.
These measures do not require aggregation, so we can use either the ‘Only()’ aggregation or just the name of the field.
Then we need to make sure that AnyGantt interprets our dates correctly.
Use the ‘Map as’ drop-down menu to map the ‘start_date’ field as ‘Actual Start’ and ‘finish_date’ as ‘Actual Finish’.
As you can see, you can also map a date as ‘Baseline Start’, ‘Baseline Finish’, ‘Actual Progress’, “Baseline Progress”, or “Data Field”.
After these steps, we can already see a Gantt chart:
The data grid on the left displays the hierarchy of departments, projects, and tasks.
The timeline on the right displays the duration of tasks.
Let’s add one more measure, ‘progress’, and map it as ‘Actual Progress’.
Please note that you do not need to aggregate it.
Now you can see progress bars.
That is it, the Gantt chart is ready:
In the ‘View’ mode, select a department or a project in a filter pane, and the Gantt chart will display the related tasks.
It is very easy!
If you have any questions on how to create a Gantt chart or any other chart type using AnyChart's Extensions for Qlik Sense, drop us a note in the comments below or contact AnyChart's Support Team directly.
Monitoring of Tasks that reload Apps in Qlik Sense.
One or more tasks are scheduled on the Qlik server that automatically load the Apps,
The goal is to be able to query the status of a task with the help of REST API technology and integrate it with the PRTG monitoring system.
Step 1 -> Creation of a dedicated Virtual Proxy in Qlik QMC.
The documentation to be able to proceed is available from the following link:
Step 2 -> API Query Mode and Test.
Once the JWT virtual proxy has been configured and the validity of the Token has been verified as per the official guide, it is possible to proceed with the desired query.
NB. In this case we validated the token using a Service user who also runs all the dedicated services including the Proxy Service.
In this case we will monitor the correct reload of the tasks on the QLIK server, the Tasks are scheduled on the server and allow the App data to be reloaded.
When one of these tasks fails via API call, it is possible to have a json result with the related details inside.
Below is an example of an API call:
This is an example of a task we want to monitor:
A quick method to test if the call was successful is from the browser using the Mode Header extension for google chrome described in step 1.
https://chrome.google.com/webstore/detail/modheader-modify-http-hea/idgpnmonknjnojddfkpgkljpfnnfcklj
So for the call to be successful you need to pass the following parameters:
Where Header name: Authorization and Header value: Bearer followed by the previously generated and tested Token and finally the Xrfkey key.
This will be the result in Json format returned by the browser if the call is successful:
Specifically in PRTG what we are going to monitor is:
"startTime": "2022-05-04T07:46:34.100Z"
"stopTime": "2022-05-04T07:46:37.636Z"
3. Other information that we may integrate and otherwise see in PRTG.
NB. A table with Qlik Sense reload task status codes and descriptions is available from the following link
https://help.qlik.com/en-US/alerting/July2023/Content/QlikAlerting/system-alerts.htm
This is an example of the string JSON with ok API call.
Step 3 -> Task monitoring from PRTG.
Type of sensor used in PRTG.
How to create a sensor.
The path on the PRTG server where the template is to be uploaded is as follows:
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\rest
In the following path, however, it is necessary to define a Lookups in order to allow the sensor to interpret the various states of the Qlik Tasks listed in Step 2.
C:\Program Files (x86)\PRTG Network Monitor\lookups\custom
Result JSON query Task from Browser a part of this information will be used for the sensor in PRTG each task will correspond to a specific sensor.
The REST Custom Sensor was used in PRTG.
The REST Custom sensor queries a Representational State Transfer (REST) application programming interface (API) endpoint and maps the JavaScript Object Notation (JSON) or Extensible Markup Language (XML) result to the sensor values the mapping rule must be available as a REST configuration file in JSON template format (*.template) according to the PRTG API definition for custom sensors.
Two files have been created on the PRTG server.
Final integration flow monitoring Task PRTG -> QLIK.
This article talks about how to restore app with the same app ID if app gets deleted unfortunately by someone.
There are many ways to restore an app with same app ID:
- Restore the VM image of Qlik central server where the QVFs are stored.
- Find out the app ID of the deleted app.
- Copy the deleted app ID “file” and “.lock” files into physical location path (F:QlikSense\apps) and replace with the ID which gets deleted.
- Open PostgreSQL editor on central node.
- How to connect to PostgreSQL DB – follow the 2nd step here
- Create the app in PostgreSQL DB by running below query with the help of any existing app id
Insert into PUBLIC."Apps"(
"ID", "Name", "AppId", "PublishTime", "Published", "Description", "LastReloadTime", "Thumbnail", "CreatedDate", "ModifiedDate", "ModifiedByUserName", "Owner_ID", "Stream_ID", "SavedInProductVersion", "MigrationHash", "DynamicColor", "SourceAppId", "TargetAppId"
) Select 'Deleted APP ID’,"Name", "AppId", "PublishTime", "Published", "Description", "LastReloadTime", "Thumbnail", "CreatedDate", "ModifiedDate", "ModifiedByUserName", "Owner_ID", "Stream_ID", "SavedInProductVersion", "MigrationHash", "DynamicColor", "SourceAppId", "TargetAppId"
from public."Apps"
where "ID"='any existing app ID’ // existing app
above query will create the deleted app on QMC
- Check the app and data on QMC/HUB
- Create reload task or try to run the app – there is an issue here to refresh the task
- It will throw an error without any logs if we refresh either app or task
- Alternative1: We must duplicate the app and refresh it then publish into actual one in QMC
- Alternative2: Open data load script editor and reload the script
- Automate the Alternative1 by using power shell script to refresh it on daily basis