Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Blogs

Announcements
Talend Cloud AWS EU Scheduled Outage: Starting Tues 26 May 21:00 CEST with expected completion Wed 27 May 01:00 CEST
cancel
Showing results for 
Search instead for 
Did you mean: 

Design

The Design blog is all about product and Qlik solutions, such as scripting, data modeling, visual design, extensions, best practices, and more!

Product Innovation

By reading the Product Innovation blog, you will learn about what's new across all of the products in our growing Qlik product portfolio.

Support Updates

The Support Updates blog delivers important and useful Qlik Support information about end-of-product support, new service releases, and general support topics.

Qlik Academic Program

This blog was created for professors and students using Qlik within academia.

Community News

Hear it from your Community Managers! The Community News blog provides updates about the Qlik Community Platform and other news and important announcements.

Qlik Digest

The Qlik Digest is your essential monthly low-down of the need-to-know product updates, events, and resources from Qlik.

Qlik Learning

The Qlik Learning blog offers information about the latest updates to our courses and programs, as well as insights from the Qlik Learning team.

Subprocessors List

Qlik Subprocessors General Data Protection Regulation (GDPR).

Japan

Qlik Community blogs for our customers and partners in Japan.

Recent Blog Posts

  • Image Not found

    Qlik Digest

    Welcome to the Qlik Digest!

    The Qlik Digest is a monthly customer newsletter delivering the highlights from across Qlik that our customers will love.
  • qlik-community-blogs.jpg

    Explore Qlik Gallery

    Cosmos Saint Seiya Container Data Sheet

    Cosmos Saint Seiya Container Data Sheet RCD - Department Business Analytics This app was created with the purpose of being able to show the use of the container together with the use of buttons, graphics and video extension, this allows exploring the data and being able to tell a visual story and enrich the information. For this app, the Saint Seiya animation was used as a reference. ¡ And who says data stories can't be told in a fun way wh... Show More
    Show Less
  • Image Not found

    Japan

    Qlik Cloud 8月の新機能

    2025年8月にリリースされた Qlik Cloud の主な新機能をご紹介します。 下記も合わせてご参照ください。 Qlik TECH TALK セミナー:What's New in Qlik ~ 2025年8月リリース 最新機能のご紹介 ~ 
  • Image Not found

    Qlik Academic Program

    Growing engagement with Singapore Universities and Polytechnics

    In recent times, the Qlik Academic Program has been growing its engagement with Universities and Polytechnics in Singapore quite actively. Some of the these include Republic Polytechnic, Institute of Technical Education and National University of Singapore. We are excited about the prospects to educate more and more students and educators in analytics and AI through the Qlik Academic Program! 
  • Image Not found

    Design

    How to Handle Custom CSS in Qlik Sense (Now and Going Forward)

    Custom CSS has been a popular workaround in Qlik Sense for years, helping developers tweak layouts, hide buttons, and get around styling limitations. But things are shifting. With the Multi-KPI object being deprecated and native styling options getting stronger with every release, it’s a good time to rethink how we approach custom styling in Qlik Sense moving forward. In this post, we’ll break down: Why custom CSS is used in Qlik Sense What’s ch... Show More

    Custom CSS has been a popular workaround in Qlik Sense for years, helping developers tweak layouts, hide buttons, and get around styling limitations. But things are shifting. With the Multi-KPI object being deprecated and native styling options getting stronger with every release, it’s a good time to rethink how we approach custom styling in Qlik Sense moving forward.

    In this post, we’ll break down:

    • Why custom CSS is used in Qlik Sense
    • What’s changing (and why Multi-KPI is being deprecated)
    • Best practices for styling moving forward
    • Alternatives for injecting CSS when needed
    • What you can (and should) do now to future-proof your apps

    Let’s dive in!

    Why is custom CSS used in Qlik Sense?

    In the past, Qlik’s built-in styling options were limited. That led to many developers using CSS to:

    • Hide toolbars, buttons, and headers
    • Apply custom fonts or background gradients
    • Create grouped layouts or dashboards with unique branding

    Most of this was made possible by either creating custom themes, building extensions, or using the Multi-KPI object as a helper to inject CSS code. But as powerful as these techniques were, they also came with downsides, like breakage after updates or difficulty governing app behavior at scale.

    So, What’s Changing?

    The biggest shift is the deprecation of the Multi-KPI object, which has served as a popular CSS injection tool. Here's what you need to know:

    EOL of the Multi-KPI object is May 2026:

    • Existing dashboards will still work for now, but migration is highly encouraged.
    • The object is deprecated due to governance challenges and unintended side effects from injected CSS.

    If you’ve been using the Multi-KPI as a styling workaround, it’s time to plan for alternatives.

    Native Styling Has Come a Long Way

    Before reaching for CSS, it's worth exploring what Qlik now offers natively. Many of the styling tweaks that once required CSS are now fully supported in the product UI.

    Here’s a quick look at recent additions:

     

    Native styling available now or coming in the next update

    Straight Table

    Background images, word wrap, mini charts, zebra striping, null styling, header toggle

    Pivot Table

    Indentation mode, expand/collapse, RTL support, cyclic dimensions

    Text Object

    Bullet lists, hover toggle, border control, support for up to 100 measures

    Line Chart

    Point and line annotations

    Scatter Plot

    Reference lines with slope, customizable outline color and width

    Layout Container

    Object resizing and custom tooltips

    Navigation Menu

    Sheet title expressions, left/right panel toggle, divider control


    And this list keeps growing. If you're building new apps or redesigning old ones, these built-in features will cover a huge percentage of use cases.

    Many deprecated CSS tricks are now native. Check out the full Obsolete CSS Modifications  post for examples and native replacements.

    What About Themes?

    Themes are not going anywhere. In fact, they remain the most robust and supported way to apply consistent styling across your app portfolio.

    With custom themes, you can:

    • Define global font families, sizes, and colors
    • Style specific object types like bar charts, pie charts, list boxes, and even treemaps
    • Customize titles, footers, legends, and more via the JSON schema
    • Apply branding at scale without touching each sheet manually

    You can still include CSS files in themes, but remember:

    • Inline styles used by Qlik objects may require the use of "!important" to override.
    • Themes are not ideal for object-ID-specific or user-interactive CSS injection.

    If you're new to themes, Qlik.dev has a great guide to get started, or checkout my previous blog post for some tips and tricks.

    Still Need Custom CSS? Here’s What You Can Do

    If your use case goes beyond what native styling or themes can handle—like hiding a specific button, or styling based on object IDs—you still have a few options:

    • Extensions (with scoped CSS)
      Prefix styles with .qv-object-[extension-name] to isolate your rules.
      Load styles using RequireJS or inject via <style> in JS.?

    • Mashups
      Full control over styling via your own HTML + CSS + JavaScript.
      Ideal for web apps embedding Qlik charts via qlik-embed

     

    What's Missing

    A lot of Qlik users have voiced the same thing: "we still need an officially supported way to inject CSS at the sheet or app level"

    Some have suggested:

    • A new “Advanced Styling” section in sheet properties.
    • A standalone helper object just for advanced styling (like Multi-KPI but cleaner).
    • Ability to define per-object-type styling rules in themes (e.g. “all straight tables”).

    Qlik has acknowledged this feedback and hinted that future solutions are being considered.

    What You Should Do Today

    • Use native styling wherever possible—it's safer, easier to maintain, and now way more powerful
    • Migrate away from Multi-KPI if you’ve been using it to inject CSS
    • Explore themes for app-wide branding and consistent object styling
    • Use extensions or mashups for truly custom experiences
    • Follow community updates for new announcements around styling capabilities

    That’s a wrap on this post. With more native styling features on the way, I’ll be keeping an eye out and will be likely sharing a follow-up as things evolve. If you're in the middle of refactoring or exploring new approaches, stay tuned, there’s more to come.

    Show Less
  • Image Not found

    Product Innovation

    Table Recipe now in Qlik Cloud Analytics

    Clean, prep, and go. It’s that simple.   It’s here! Your new go-to for quick no-code data preparation in Qlik Cloud Analytics. Table Recipe makes it easy for anyone to clean single-table datasets fast and keep your insights flowing.  Just pick your dataset, build your step-by-step recipe, and see your results instantly. 
  • Image Not found

    Qlik Learning

    Are you A Learning Admin? Exciting News: The Updated Learning Admin Portal Is He...

    We are excited to announce that an updated version of the Qlik Learning Admin Portal will be launching on September 4th!
  • Image Not found

    Japan

    【オンデマンド配信】保険業界のデータ課題と Qlik での高度化

    保険業界では、レガシーシステムや情報のサイロ化、非構造化データの未活用といった課題がある中、デジタルトランスフォーメーションが求められています。本 Web セミナーでは、保険会社が抱える経営課題・IT 課題の全体像を整理し、Qlik を活用したデータ統合・分析による解決策をご紹介します。「非構造化データ活用」や「複合条件検索」といった先進技術の導入が、どのように顧客満足度や業務効率、経営判断に貢献するのか。業界の未来を切り拓くヒントをご提供します。 ※ パソコン・タブレット・スマートフォンで、どこからでもご視聴いただけます。今すぐ視聴する 今すぐ視聴する
  • Image Not found

    Support Updates

    Watch Q&A with Qlik: Qlik Cloud Migration!

    Don't miss our previous Q&A with Qlik! Pull up a chair and chat with our panel of experts to help you get the most out of your Qlik experience.   Our Qlik experts held a Qlik Cloud Migration live Q&A with Qlik webinar, answering all your questions about migration from on-prem to Qlik Cloud and using the tools that are available to make the process easier.    WATCH RECORDING HERE    
  • Image Not found

    Japan

    【オンデマンド配信】海外の自治体は DX 推進にどのように取り組んでいるか

    海外の自治体が DX 推進にどのように取り組んでいるかを、Qlik のデータ活用事例を交えて紹介します。本 Web セミナーでは、住民サービスの向上、業務の効率化、政策判断の迅速化など、データドリブンな行政運営の実現に向けた具体的なアプローチを解説。日本の自治体にとって参考となるヒントや実践的な知見をご提供します。 ※ パソコン・タブレット・スマートフォンで、どこからでもご視聴いただけます。今すぐ視聴する 今すぐ視聴する
  • qlik-community-blogs.jpg

    Explore Qlik Gallery

    Onyx Data Challenge June 2025

    Onyx Data Challange June 2025 Lupus Analitycs Social Media Analysis Discoveries Educational and Product Related post have most engagements Impact Showing when to post and which content is the best Audience Everyone interested in Social media content Data and advanced analytics Showing when to post and which content is the best
  • Image Not found

    Design

    Pick() Function

    The Pick function is a chart and script function that can be used to return the nth expression in a list based on a field or value. It is a good alternative to a large or nested If statement where each If statement needs to be evaluated. With the pick function, one value is read to determine which expression should be returned. The syntax of the pick function according to Qlik Help looks like this: pick(n, expr1[ , expr2,...exprN]) The first para... Show More

    The Pick function is a chart and script function that can be used to return the nth expression in a list based on a field or value. It is a good alternative to a large or nested If statement where each If statement needs to be evaluated. With the pick function, one value is read to determine which expression should be returned.

    The syntax of the pick function according to Qlik Help looks like this:

    pick(n, expr1[ , expr2,...exprN])

    The first parameter (n) should be an integer. Based on this value, the first expression, second expression, third expression or nth expression is returned. Let’s look at an example. In the table below, there are three dimensions listed – the state abbreviation, the state name and a state code for the U.S. region the state is in.  One is the Northeast region, 2 is the Midwest region, 3 is the South region and 4 is the West region.

    Table 1.png

     

    The pick function can be used to show the region name that is represented by the state code. This can be done by adding the measure below to the table.

    measure.png

     

    The pick function will assess the value of StateCode and based on that return a region.  With the measure added to the table, the region name can also be displayed as seen below.

    Table 2.png

    The pick function measure used in the table above is simpler than a nested if statement and is easy to read. It optimizes the table, returning results faster and using less resources to evaluate. Try it out.

    Thanks,

    Jennell

     

    Show Less
  • Image Not found

    Support Updates

    Qlik Automate execution token changes

    Hello Qlik Users, Execution tokens will become header parameters on February 1st, 2026. On January 13th, 2025, Qlik introduced breaking changes to the execution token functionality for triggered automations.  Contents What does this mean for my triggered automation?How do I configure the Run Mode?Additional change: Execution tokens become header parameters (February 1st, 2026)Related improvement: custom parameter support for button-triggered auto... Show More

    Hello Qlik Users,

    Execution tokens will become header parameters on February 1st, 2026.

    On January 13th, 2025, Qlik introduced breaking changes to the execution token functionality for triggered automations. 

    Contents

     

    What does this mean for my triggered automation?

    Triggered automations will require their Run Mode to be set to triggered to continue to work as expected. Past January 13th, it will no longer be possible to use the below endpoint to trigger an automation not explicitly configured with a triggered run mode:

    api/v1/automations/{id}/actions/execute
    Any Button objects using the built-in Run Automation feature are not affected by this change.

    How do I configure the Run Mode?

    The run mode can be configured in the Start block of an automation:

    1. Open the Automation
    2. Select the Start Block
    3. Open the Inputs tab
    4. Select Triggered as the Run Mode

      set run mode.png

    Additional change: Execution tokens become header parameters (February 1st, 2026) 

    An additional change to how execution tokens are used will be introduced on  February 1st, 2026

    When triggering a triggered automation through the trigger URL (see the endpoint below), the execution token must be sent as a header parameter. Currently, it is possible to send the execution token as a query parameter. Starting February 1st, 2026, sending execution tokens as header parameters will be enforced.

    api/v1/automations/{id}/actions/execute

     

    Related improvement: custom parameter support for button-triggered automations

    When triggering an automation from a button in an app it is now possible to provide additional input parameters that are defined in the button configuration. More information can be found here: custom input parameters for the native button.

     

    Don't hesitate to reach out if you have any questions or address our experts directly in the Qlik Application Automation forum.

     

    Thank you for choosing Qlik,
    Qlik Support

    Show Less
  • Image Not found

    Qlik Academic Program

    Learning on Your Own Time: How Self-Paced Education and Qlik’s Academic Program ...

    One of the biggest shifts in education over the past few years has been the rise of self-paced learning. With students juggling busy schedules, internships, part-time jobs, and extracurricular activities, the traditional classroom model doesn’t always provide the flexibility they need. That’s why universities and employers alike are placing more emphasis on programs and tools that let learners set their own pace. Self-paced learning allows studen... Show More

    One of the biggest shifts in education over the past few years has been the rise of self-paced learning. With students juggling busy schedules, internships, part-time jobs, and extracurricular activities, the traditional classroom model doesn’t always provide the flexibility they need. That’s why universities and employers alike are placing more emphasis on programs and tools that let learners set their own pace.

    Self-paced learning allows students to:

    • Revisit difficult topics without feeling rushed.

    • Move ahead quickly in areas they already understand.

    • Balance academics with personal and professional responsibilities.

    And it’s not just about convenience. Research shows that when students have control over their learning journey, they retain more knowledge and build stronger skills for the real world.

    Where Qlik’s Academic Program Fits In

    The Qlik Academic Program is designed with this same philosophy in mind. Every student and educator who joins the program gets free, self-paced access to:

    • Online training modules on data analytics and visualization.

    • Qualifications and certifications to showcase on a resume or LinkedIn profile.

    • Interactive lesson plans and resources that can be used in or outside the classroom.

    • Qlik software, so students can practice and apply their skills right away.

    Whether you’re a professor designing flexible assignments or a student looking to upskill on your own schedule, Qlik’s Academic Program makes it possible to learn at your pace and still achieve professional-level results.

    Why It Matters Now

    With the demand for data literacy and analytics skills growing across every industry, students who take advantage of self-paced resources like Qlik’s Academic Program are positioning themselves ahead of the curve. Employers aren’t just looking for degrees—they want proof of hands-on, applicable skills. Earning Qlik qualifications through self-paced learning is one way to stand out.

    Take the Next Step

    Education isn’t just happening in the classroom anymore—it’s happening anytime, anywhere. If you’re ready to take control of your learning journey and gain the skills employers value most, the Qlik Academic Program is here to support you every step of the way.

    👉 Sign up today and start learning at your own pace: https://www.qlik.com/us/company/academic-program

     

    Show Less
  • Image Not found

    Design

    Calculated Fields

    Calculated fields are often created in the script and stored under new aliases. But you can also create them in the user interface. What are the pros and cons with the two methods? And how are the user interface fields calculated?
  • Image Not found

    Support Updates

    Techspert Talks - Migrating to Qlik Cloud Analytics

    Hi everyone, Want to stay a step ahead of important Qlik support issues? Then sign up for our monthly webinar series  where you can get first-hand insights from Qlik experts. The Techspert Talks from August look at Migrating to Qlik Cloud Analytics. But wait, what is it exactly?Techspert Talks is a free webinar held on a monthly basis, where you can hear directly from Qlik Techsperts on topics that are relevant to Customers and Partners today. In... Show More

    Hi everyone,
    Want to stay a step ahead of important Qlik support issues? Then sign up for our monthly webinar series  where you can get first-hand insights from Qlik experts.

    The Techspert Talks from August look at Migrating to Qlik Cloud Analytics.

    But wait, what is it exactly?
    Techspert Talks is a free webinar held on a monthly basis, where you can hear directly from Qlik Techsperts on topics that are relevant to Customers and Partners today.

    In this session we covered:

    • Demonstration of the Qlik Cloud Analytics Migration tool
    • Advantages of Qlik Cloud
    • SaaS Readiness

     

    Click on this link watch



    Community400x200.png

    Show Less
  • qlik-community-blogs.jpg

    Explore Qlik Gallery

    Upload Utility App

    Upload Utility App Mahindra and Mahindra Ltd Purpose of the app The Upload Utility app provides business users with a self-service way to upload and manage ad-hoc data files (mainly CSVs) that are not available in core systems like SAP. What it shows The app mirrors a three-level folder structure (Category → Sub-Category → KPI) from SharePoint into Qlik SaaS. Users select a folder from each level, and upon pressing the Fetch Files button, a... Show More
    Show Less
  • Image Not found

    Japan

    【オンデマンド配信】DX - 建設業界の IT 課題と解決の方向性

    建設業界は、人手不足や技術継承、属人化、進捗管理の難しさなど、DX が進みにくい課題を抱えています。本 Web セミナーでは、これらの課題に対し、データ分析・管理・統合といったデジタルツールがどのように貢献できるか、その方向性と解決のヒントを探っていきます。 ※ 参加費無料。パソコン・タブレット・スマートフォンで、どこからでもご視聴いただけます。今すぐ視聴する   今すぐ視聴する
  • Image Not found

    Design

    Peeking through the Window() Script Function

    You might be familiar with the concept of Window functions from Excel or SQL and know just how convenient and powerful they can be. Well, Qlik has one that you can use right in your Load Script! Simply put, the Window function performs calculations over multiple rows producing a value for each row separately, unlike aggregate functions that will give a single value for the group of rows aggregated together. You can think of it as looking through ... Show More

    You might be familiar with the concept of Window functions from Excel or SQL and know just how convenient and powerful they can be. Well, Qlik has one that you can use right in your Load Script!

    Simply put, the Window function performs calculations over multiple rows producing a value for each row separately, unlike aggregate functions that will give a single value for the group of rows aggregated together.

    You can think of it as looking through a window at your dataset and only seeing a subset based on different parameters you set which we will go over in a minute.

    If you wanted to calculate the average transaction_amount by customer, you could of course do this in the chart expression with something like this: aggr(avg(transaction_amount), customer_id), or if you’re in the Load Script, perform another load and use Group By as follows:

     

    Temp:
    //inline load here
    
    Transactions:
    NoConcatenate Load
    transaction_id,
    transaction_date,
    transaction_amount,
    transaction_quantity,
    customer_id,
    size,
    color_code
    Resident Temp;
    
    Load customer_id,
    Avg(transaction_amount) AS AvgAmount
    Resident Transactions
    Group By customer_id;

     

    But this requires a separate load and can’t just be done on the same loaded table, and it might not be ideal for more complex use cases.

    This is where the Window function comes in, and the above can be re-written as follows:

     

    Temp:
    //inline load here
    
    Transactions:
    NoConcatenate Load
    transaction_id,
    transaction_date,
    transaction_amount,
    transaction_quantity,
    customer_id,
    size,
    color_code,
    Window(Avg(transaction_amount),customer_id) as AvgCustTransaction
    Resident Temp;

     

    Much easier!

    Syntax:

    Let’s take a closer look at the function syntax to understand it a little more and see what other capabilities it has:

    Window( input_expr, [partition1, partition2, ...][sort_type, [sort_expr]], [filter_expr], [start_expr,end_expr] )

    • input_expr

    Refers to the input expression calculated and returned by the function. It must be any expression based on an aggregation, such as Median(Salary). For example:

     

    Window(Median(Salary)) as MedianSalary

     

    The input can also be a field name with no aggregation applied and in that case Qlik treats it like the Only() function. For example:

     

    Window(Salary,Department) as WSalary

     

    • Partition: [partition1, partition2, ...]

    After input_expr, you can define any number of partitions. Partitions are fields that define which combinations to apply the aggregations with. The aggregation is applied separately with each partition. (Think of it as the Group By clause). Multiple partitions can be defined. For example:

     

    Window(Avg(Salary), Unit, Department, Country) as AvgSalary

     

    • sort_type, sort_expr

    The sort type and the sort expression can be specified optionally. sort_type can have one of two values ASC (Ascending sorting) or DESC (Descending sort)

    If sort_type is defined, then the sorting expression must also be defined. This is an expression that decides the order of the rows within a partition.

    For example:

     

    Window(RecNo(), Department, 'ASC', Year)
    // results within the partition are sorted Ascendingly by year

     

    • filter_expr

    The optional Filter Expression is a Boolean expression that decides whether the record should be included in the calculation or not.

    This parameter can be omitted completely, and the result should be that there is no filter.

    For example:

     

    Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7) as wAvgSalaryIfEmpIs3or7

     

    • Sliding Window with start_expr,end_expr

    Optionally, you can set the argument for sliding window functionality. A sliding window requires two arguments:

    • start_expr: The number of rows prior to the current row to include in the window.
    • end_expr: The number of rows after the current row to include in the window.

    For example, if you want to include the 3 preceding rows, the current row, and the 2 following row:

     

    Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0,  -3, 2) as WSalaryDepartment

     

    Examples:

    Let’s take a look at different use case examples:

    1- Adding a field containing an aggregation

     

    Transactions:
    Load
    *,
    Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;
    
    Load * Inline [
    transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
    3750, 20180830, 23.56, 2, 2038593, L, Red
    3751, 20180907, 556.31, 6, 203521, M, Orange
    3752, 20180916, 5.75, 1, 5646471, S, Blue
    3753, 20180922, 125.00, 7, 3036491, L, Black
    3754, 20180922, 484.21, 13, 049681, XS, Red
    3756, 20180922, 59.18, 2, 2038593, M, Blue
    3757, 20180923, 177.42, 21, 203521, XL, Black
    3758, 20180924, 153.42, 14, 2038593, L, Red
    3759, 20180925, 7.42, 5, 203521, M, Orange
    3760, 20180925, 80.12, 18, 5646471, M, Blue
    3761, 20180926, 3.42, 7, 3036491, XS, Black
    3763, 20180926, 63.55, 12, 049681, S, Red
    3763, 20180927, 177.56, 10, 2038593, L, Blue
    3764, 20180927, 325.95, 8, 203521, XL, Black
    ];

     

    2- Adding a field containing an aggregation filtered for specific values

     

    Transactions:
    Load
    *,
    Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;
    
    Load * Inline [
    // Table goes here
    ];

     

    3- Adding a field with a sliding window

     

    Transactions:
    Load
    *,
    Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;
    
    Load * Inline [
    // Table goes here
    ];

     

    This concludes this post, I hope you found it helpful!
    A qvf with all the scripts is attached for reference.

    - Thanks

     


    Show Less
  • Image Not found

    Design

    Qlik Cloud Reporting API: Going Beyond the Tenant Interface

    If you’re running Qlik on-premise, NPrinting is the go-to for producing highly formatted, template-based reports. It works seamlessly with QlikView and Qlik Sense Enterprise on Windows, letting you design in familiar tools like Excel, Word, PowerPoint, and PixelPerfect, then deliver reports as PDFs, HTML, or Office files to folders, the NPrinting NewsStand, email recipients, or even the Qlik Sense Hub — all with scheduling, cycling, and bursting ... Show More

    If you’re running Qlik on-premise, NPrinting is the go-to for producing highly formatted, template-based reports. It works seamlessly with QlikView and Qlik Sense Enterprise on Windows, letting you design in familiar tools like Excel, Word, PowerPoint, and PixelPerfect, then deliver reports as PDFs, HTML, or Office files to folders, the NPrinting NewsStand, email recipients, or even the Qlik Sense Hub — all with scheduling, cycling, and bursting built in.

    In Qlik Cloud, reporting takes a different shape. You still have built-in options for creating and delivering reports directly in the tenant interface, but you also gain something new: an API-driven approach that opens up possibilities well beyond what’s available in the UI. And that’s where the Qlik Cloud Reporting API comes in.

    What You Can Do in Qlik Cloud (Inside the Interface):

    Qlik Cloud Reporting allows you to create reports from apps using native templates or PixelPerfect templates, then distribute them as PDFs, Excel files, or other formats. Through the tenant interface, you can:

    • Create and edit report templates

    • Apply selections and filters

    • Schedule recurring reports

    • Deliver reports to email recipients or Qlik Cloud spaces

    These capabilities are fully documented in Qlik Help, and for many users, the UI-based workflow is all they need.

    Why Go Beyond the Tenant Interface?

    The Reporting API enables everything above — but from outside Qlik Cloud.
    That means you can:

    • Trigger reports from external systems

    • Integrate reporting into your own applications

    • Automate delivery to custom destinations

    • Include Qlik reports in larger automated workflows (think: customer portals, scheduled partner updates, or triggered operational reports)

    If you’ve ever wished you could generate a Qlik report as part of an end-to-end automation pipeline, the API is the key.

    Reporting with Qlik Automate

    Not every reporting workflow requires custom code. Qlik Automate lets you build automated reports using the Qlik Reporting Service through a low-code, drag-and-drop interface. Reports can be delivered as PDF or PowerPoint and distributed via email or cloud connectors like SharePoint, OneDrive, Dropbox, Google Cloud Storage, Amazon S3, or SFTP.

    Some common use cases include:

    • Bursted reports where each recipient only sees their own data

    • Looping reports that generate one page per dimension value (e.g. region or product)

    • Cross-app reporting combining insights from multiple Qlik Sense apps

    • External delivery to recipients without Qlik Cloud accounts

    Think of Automate as the middle ground — more flexible than the tenant UI, but easier to adopt than full API coding.

     

    How the Qlik Cloud Reporting API Works

    At its core, the process involves:

    1- Sending a POST request to create a report generation job.

    2- Polling the outputs endpoint to check when the job is complete.

    3- Downloading the generated file once it’s ready.

     

    reports.png

     

    Here’s a real example:

    Step 1: Request a Report

    POST     https://<tenant>/api/v1/reports

    Body:

    {
      "type": "sense-pixel-perfect-template-1.0",
      "sensePixelPerfectTemplate": {
        "appId": "1234567-a480-43f5-bc88-825736d8842f",
        "templateId": "1a2b3c-ba56-46ee-ac74-4746dd145816",
        "templateLocation": {
          "path": "https://<tenant>/api/v1/report-templates/3de5c6c2-ba56-46ee-ac74-4746dd145816",
          "format": "url"
        },
        "selectionChain": [
          {
            "selectionType": "selectionFilter",
            "selectionFilter": {
              "selectionStrategy": "stopOnError",
              "selectionsByState": {
                "$": [
                  {
                    "fieldName": "Currency",
                    "defaultIsNumeric": false,
                    "values": [{ "text": "USD", "isNumeric": false }]
                  },
                  {
                    "fieldName": "Year",
                    "defaultIsNumeric": true,
                    "values": [{ "number": 45778, "isNumeric": true }]
                  }
                ]
              }
            }
          }
        ]
      },
      "output": { "type": "pdf", "outputId": "pp", "pdfOutput": {} }
    }

     

    Response:

    {
      "message": "Report request has been accepted and is being processed.",
      "outputsUrl": "https://<tenant>/api/v1/reports/1234567-bed1-4024-8614-37bb898a41b0/outputs",
      "requestId": "987654321-bed1-4024-8614-37bb898a41b0"
    }

    Here, you’ll notice:

    • outputsUrl gives you the endpoint to poll for the report status.

    • requestId uniquely identifies the job.


    Step 2: Poll for the Output

    GET      https://<tenant>/api/v1/reports/{requestId}/outputs

    Response:

    {
      "data": [
        {
          "cycleSelections": [],
          "location": "https://<tenant>/api/v1/temp-contents/2342346c185413cc5ec121b",
          "outputId": "pp",
          "sizeBytes": 382078,
          "status": "done",
          "traceId": "abc1234d2e88db9bc155d8a732132899d"
        }
      ],
      "links": {
        "self": {
          "href": "https://<tenant>/api/v1/reports/{requestId}/outputs"
        }
      }
    }

     

    Key things to look for in the response:

    • status — "done" means the report is ready.

    • location — the direct link to the generated file.


    Step 3: Download the File

    Once the status is "done", perform a GET to the location URL.

    For example:

    GET    https://<tenant>/api/v1/temp-contents/2342346c185413cc5ec121b

    This returns the actual PDF (or other format, depending on your request).

     

    Where to Learn More:

    You can visit these pages for full API documentation and working samples:

    Qlik Cloud’s tenant interface is powerful for building and scheduling reports right inside your analytics environment — but the Reporting API takes it further. By integrating directly with your external systems, you can build modern, automated, and scalable reporting workflows that go well beyond what’s possible within the tenant.

    If you’re ready to move from manual scheduling to full automation, the Reporting API is where you start.

    Show Less