top of page
Search

Automating Qlik Cloud Report Distribution at Scale: Dynamic Recipients and Filters with Load Script Tags and Qlik Automation

  • Writer: Mark Costa
    Mark Costa
  • 19 hours ago
  • 7 min read

Introduction


When Alane Miguelis approached me with the challenge of managing hundreds of report recipients dynamically in Qlik Cloud, it immediately highlighted a critical scalability issue: manual filter maintenance simply doesn't work at enterprise scale.


The problem was clear: as organizations grow, maintaining individual report filters for each recipient becomes a bottleneck. Adding new users, updating access rights, or removing departed employees requires manual intervention in the reporting system - a process that's time-consuming, error-prone, and completely unsustainable when dealing with hundreds or thousands of recipients.


This article presents a fully automated solution that eliminates manual filter management by leveraging load script tags and Qlik Automation. By treating your recipient configuration as data and synchronizing it automatically with Qlik Cloud reporting filters, you can achieve true dynamic report distribution that scales effortlessly.



Prerequisites

  • A Qlik Cloud Tenant

  • Understanding of Qlik Load Script

  • Understanding of Qlik Automation

  • Basic REST API / JSON knowledge



The Business Challenge


In this scenario, we're working with Microsoft SQL Server AdventureWorksDW2022 Database to distribute sales reports to multiple resellers. Each reseller needs access to their own sales data by Sales Territory Group delivered daily through Qlik Cloud's reporting capabilities.


Without automation, setting up report distribution for this scenario would require:

  • Manual Recipient Creation: Individually configuring each employee/reseller as a recipient in the Qlik Cloud Reporting interface

  • Filter Configuration: Manually creating and assigning filters to restrict each recipient to their specific Sales Territory Group

  • Ongoing Maintenance: Updating recipient lists whenever:

    • New sales employees are onboarded in the source system

    • Existing employees change territories or are deactivated

    • The employee dimension data changes during the nightly ETL process

  • Error-Prone Process: Ensuring filter accuracy across potentially hundreds of recipients -a single misconfiguration could expose sensitive competitive sales data to the wrong employee

  • Scalability Limitations: The DimEmployee table contains multiple employees across various territories. As the sales organization grows, the administrative burden becomes unsustainable


For organizations managing dozens or hundreds of sales employees, this manual approach is not just inefficient - it's a compliance and data security risk. The AdventureWorksDW2022 scenario demonstrates this at scale: with employees across different regions, territories, and departments, maintaining accurate, secure report distribution manually would require dedicated administrative resources and would still be prone to human error. The automation solution solves this by treating the recipient configuration as data - stored, managed, and synchronized automatically with each app reload.



Solution Overview


Our solution consists of three key components working in concert:


1. L1 AdventureWorksDW2022 Parquet Builder (Data Preparation App)

  • Purpose: Store AdventureWorksDW2022 Tables as Parquet Files

  • Function: Connects to a local SQL Server AdventureWorksDW2022 database (via Direct Access Data Gateway), extracts dimension and fact tables (DimEmployee, DimSalesTerritory, FactResellerSales, etc.), and load them into optimized Parquet files (brotli compression)

  • Benefit: Provides a performant, cloud-native data foundation that decouples source systems from analytics applications


2. Reseller Sales Report - Adventure Works DW 2022 (Analytics App)

  • Function: Consumes the Parquet files from the data preparation layer and builds a comprehensive data model. Create the Reporting Recipients (with their respective Filters and Groups) and Groups during the load process.

  • Content: Contains sheets, charts, and visualizations specifically designed for reseller sales analysis

  • Reporting Foundation: Serves as the source application for automated report distribution to individual resellers


3. Reseller Sales Report Automation (Qlik Automation)

  • Function: Orchestrates the entire dynamic Report Filter management process

  • Key Capabilities:

    • Reads recipient configuration from a designated sheet and chart within the Analytics app

    • Dynamically manages Report Filters based on Employee Email Address and Sales Territory Group

    • Automatically syncs Report Filters when the app reloads with updated data

    • Removes obsolete Report Filters when resellers are deactivated

    • Creates new Report Filters as filters are added to the system

  • Integration: Uses Qlik Cloud REST API (through Qlik Automation Blocks) to manage Report Filter objects programmatically



Automating Report Distribution in Qlik Cloud - Technical Implementation


L1 AdventureWorksDW2022 Parquet Builder (Data Preparation App)


This is an almost common Data Preparation Builder Application that connects to the Data Source, Extract Data Source Table records and Load as Parquet files. Maybe the only unusual part of the Load Script for Qlik Developers is the Store as Parquet file with brotli compression statement.

// Store table as compressed Parquet file
STORE [$(vTableName)] INTO [$(vTargetLibrary)$(vTableName).parquet](parquet, compression is brotli);

If you are not using Parquet files yet, you are missing a quite light and fast Data File Format, incredibly optimized for Qlik Cloud Platform. Read more at Parquet vs QVD: A Performance and Size Comparison for Qlik Developers


You can download a copy of the L1 AdventureWorksDW2022 Parquet BuilderQVF file here:



Reseller Sales Report - Adventure Works DW 2022 (Analytics App)


This Qlik Analytics Application contains a very special feature. During the load process we can tag any loaded field with reserved tags: the distribution list tags.


Below the list of distribution list tags and their meaning. The full reference can be found here: https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Reporting/cloud-in-app-reports-distribution.htm#anchor-6


Table with columns: Field requiring tag, Required tag, Example. Rows list tags for recipient name, email, filters, group name, and description.

In our Reseller Sales Report, we'll be implementing all these tags as below:

// Tag fields for automatic recipient creation
tag field FullName with 'DL_DISTRIBUTION_SVC__recipientName';
tag field EmailAddress with 'DL_DISTRIBUTION_SVC__recipientEmail';
tag field SalesTerritoryGroup with 'DL_DISTRIBUTION_SVC__recipientFilters';
tag field DepartmentName with 'DL_DISTRIBUTION_SVC__groupsName';
tag field DepartmentName with 'DL_DISTRIBUTION_SVC__groupDescription';
tag field DepartmentEnabled with 'DL_DISTRIBUTION_SVC__groupEnabled';

After Loading the application with the tags above, Qlik Cloud will automatically create all the Recipients with their respective Filters and Groups. See below:


Analytics app interface lists report recipients with names, emails, sales group, and region filters. Green button for adding recipients.
All Recipients are now automatically maintained according to the data loaded in the application
Analytics app groups page showing "Sales" with 17 recipients. Green button for adding recipients is on the right. Neutral mood.
Groups are also automatically maintained

Distribution list tags are just amazing! You can maintain all your recipients just tagging loaded fields from any data source, without the need of keeping external Excel Spreadsheet files. This is a very robust way to ensure your recipients are always securely updated in your Qlik Application.


However, this still not enough to create Report Tasks. We are still missing the Filters. Looking at the Filter tab we'll note there is nothing there! It is time for Qlik Automation to shine.


IPC analytics dashboard with a section for adding filters. Text prompts to manage data reports. Green "Add filter" button visible.
Distribution list tags don't create Filters. Only the association between Recipients and Filters


You can download a copy of the Reseller Sales Report - Adventure Works DW 2022 QVF file here:



Reseller Sales Report Automation (Qlik Automation)


These are the Qlik Automation Steps:

  1. Triggers on-demand Reseller Sales Report - Adventure Works DW 2022 reload to ensure latest data

  2. Reads all available Report Filters from the Reporting Config Sheet, List of Filters Chart

  3. Retrieves existing Report Filters via REST API from the Reseller Sales Report - Adventure Works DW 2022 application

  4. Compares current configuration against existing filters

  5. Deletes obsolete Report Filters (filter no longer in configuration)

  6. Creates new filters for added filters

  7. Uses 2-second delays between API calls to prevent rate limiting


This is not a Qlik Automation article however I'll give you a few hints on how to populate the Variable Blocks from the Qlik Automation.


We'll need the following information to correctly get the new list of Report Filters from your Qlik Application:

  • Application Id: variable reportingAppId

  • Configuration Sheet Id: variable configSheetId

  • Chart Configuration Id: variable filterChartId

  • Filter Field Name: variable filterFieldName (in our example the value is SalesTerritoryGroup)


To get the Chart Id, the easiest way is to enter the following statement at the end of your URL: /options/developer. This will enable the Developer menu in your chart properties. See the images below:

Analytics app interface with a dropdown menu open. Developer option highlighted. Text and arrows guide enabling developer options.
Enter /options/developer at the end of your URL
Screenshot of a software interface showing a "Developer" window with an object ID highlighted. The background lists SalesTerritoryGroup filters.

After setting all the variables, run the Qlik Automation and the synchronization will execute. At the end of the Automation process, go back to your Reseller Sales Report - Adventure Works DW 2022 and check the Reporting Filter tab. All filters will be there and in sync with your Analytics data!


Analytics dashboard titled "Reseller Sales Report." Four filters for Europe, NA, North America, Pacific. Added by Mark Costa. Green "Add filter" button.
Filters are now synchronized with your application data

Be aware that the Raw API Request 2 Block was designed to create filters with text/string values. For numeric values, a few changes must be made there, in the Json values node in the Body attribute. Example:


JSON code snippet with key-value pairs highlighted in green. Text includes "name," "ACTOR_ID," and "filterType": "REP".

You can download a copy of the Reseller Sales Report Automation template file here:



Connecting all dots: Creating Reporting Tasks


Now is time to put all things together in a Reporting Task.


Before creating a Report Task, we need a report template. In this article I have created a HTML Report template that you can download here - or you can create your own:


With the template in hands, go to Reporting > Report tasks tab and click on Create report task button:


Dashboard screenshot of IPC RnD Analytics app. Features report tasks, filters, and schedules. Includes buttons for "Recipients," "Filters," and "Connections."

Configure your Report Task as follows:


Software interface titled "Report task" for creating a "Reseller Sales Report." Options include adding a template or uploading a new one.
Select the Reseller Sales Report Template - this is required but won't be used in our case
Report task screen showing settings for output file. Options include file name, format, filter, cycle, and timestamp. Green check marks indicate steps.
Adding a File name is required but won't be used in our scenario

This is the most important step. The automation nature of this whole solution will only be complete if we select a Recipient Group (or groups) instead of a few selected users. Also, select HTML Report and select - again - the HTML Report Template.

Report task interface showing distribution to "Sales" group via email. Selected format: HTML report. File: Reseller Sales Report.
Report task settings screen showing report frequency as daily at 8:00 am, timezone as GMT-0:00, with continuous schedule.
Add any timed schedule. Don't use "When data is refreshed" option!

Now we can finally test the Report Task. Click on the ellipses menu (...) and select Send now. This will trigger the Report tasks and will send to all users inside the Sales group applying the corresponding recipient filters:

Dashboard of an analytics app showing report tasks for a "Reseller Sales Report" to be sent in 6 hours. Options menu has "Send now" highlighted.

Acknowledgments


Special thanks to Alane Miguelis ([LinkedIn Profile]) for bringing this real-world challenge to me and inspiring this solution. Problems from the field drive the best innovations, and collaboration like this strengthens our Qlik community.



Conclusion


Automating report distribution in Qlik Cloud transforms a traditionally manual, error-prone administrative task into a scalable, data-driven process. By leveraging distribution list tags in the Load Script combined with Qlik Automation's REST API capabilities, organizations can maintain hundreds or thousands of recipients with dynamic filters that automatically synchronize with source system changes.


Key Takeaways:


Scalability: The solution presented handles recipient management as data, eliminating the administrative bottleneck that occurs when report distribution scales beyond dozens of users. Each nightly reload automatically syncs recipients, filters, and group memberships with your authoritative data sources.


Data Security: Programmatic filter management reduces the risk of data exposure by ensuring filters are consistently derived from the same trusted data model that powers your analytics. Manual configuration errors that could expose sensitive competitive data are eliminated.


Maintainability: Changes to organizational structure, territory assignments, or employee status are reflected automatically in report distribution without manual intervention. When an employee leaves or changes roles, their reporting access adjusts immediately on the next reload.


Flexibility: While this article demonstrates reseller sales reporting with territory-based filters, the pattern applies to virtually any reporting scenario: multi-tenant SaaS applications, departmental reporting, customer-specific dashboards, or role-based access across any dimension in your data model.



Next Steps:

Start small by implementing this solution for a single department or report. Once validated, the same pattern scales horizontally across your entire reporting portfolio. The combination of distribution list tags and automation API integration represents a foundational capability for enterprise-grade Qlik Cloud deployments.


The complete solution files (QVF applications and automation JSON template) are available for download throughout this article. Adapt the field names, filter logic, and automation parameters to match your specific data model and reporting requirements.


For organizations managing complex report distribution at scale, this automated approach isn't just a convenience - it's a necessity for maintaining security, accuracy, and operational efficiency as your analytics program grows.


Additional Resources


Documentation:



Questions or Issues? Discuss this solution on the Qlik Community Forum or connect with me on LinkedIn https://www.linkedin.com/in/marksouzacosta/.



 
 
 

© 2024 Data Voyagers

  • Youtube
  • LinkedIn
bottom of page