<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Reporting Bits & Bytes by ConnectReport]]></title><description><![CDATA[Stay up to date on ConnectReport product updates. Plus the latest news and developments on paginated reporting, automated document generation, and report builders. ]]></description><link>https://connectreport.com/blog/</link><image><url>https://connectreport.com/blog/favicon.png</url><title>Reporting Bits &amp; Bytes by ConnectReport</title><link>https://connectreport.com/blog/</link></image><generator>Ghost 5.13</generator><lastBuildDate>Wed, 08 Apr 2026 12:35:12 GMT</lastBuildDate><atom:link href="https://connectreport.com/blog/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[SSRS End-of-Life Roadmap: Your Migration Options]]></title><description><![CDATA[SSRS is no longer included in SQL Server 2025. Here's the full timeline, your migration options (PBIRS, Power BI, Fabric, and third-party alternatives), and how to choose a path that fits your workflow.]]></description><link>https://connectreport.com/blog/ssrs-end-of-life-migration/</link><guid isPermaLink="false">69c23039a9dd0704215518f6</guid><category><![CDATA[Reporting]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Tue, 03 Mar 2026 06:35:00 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2026/03/SSRS-Article---Social-Image@2x.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://connectreport.com/blog/content/images/2026/03/SSRS-Article---Social-Image@2x.jpg" alt="SSRS End-of-Life Roadmap: Your Migration Options"><p>SQL Server 2025 ships without SSRS. If your organization runs SQL Server 2016, extended support ends in July 2026. And if you&apos;re on a newer version, the writing is still on the wall: SSRS 2022 is the last release, with no new features and no successor under the SSRS name.</p>
<p>You already know migration is coming. What you might not have considered is whether you&apos;re migrating to a solution that actually fits how your team works, or just following the path of least resistance into a platform that treats reporting as a secondary feature.</p>
<p>Migration takes time and planning. The question worth asking before you commit those resources: will you end up with a reporting workflow that&apos;s better than what you have today, or just different?</p>
<p>This guide breaks down what&apos;s happening with SSRS, your actual options, and how to choose a migration path that aligns with your team&apos;s reporting needs, not just Microsoft&apos;s product roadmap.</p>
<p><img src="https://connectreport.com/blog/content/images/2026/03/SSRS-Support-Timeline@2x.jpg" alt="SSRS End-of-Life Roadmap: Your Migration Options" loading="lazy"></p>
<h2 id="whats-actually-happening-to-ssrs">What&apos;s Actually Happening to SSRS</h2>
<p>The short version: Microsoft is consolidating all on-premises reporting under Power BI Report Server (PBIRS). Starting with SQL Server 2025, SSRS is no longer included. No new versions will be released. SSRS 2022, the final release, will continue receiving security updates through January 11, 2033, but that&apos;s maintenance mode, not active development.</p>
<p>This isn&apos;t a sudden shutdown. It&apos;s a slow wind-down that Microsoft has been signaling for years. Features have already been stripped out: Mobile Reports, the Mobile Report Publisher, Atom feed support, and export to XLS and DOC formats are gone. What remains is a stable but frozen platform.</p>
<h3 id="the-support-timeline-you-need-to-know">The Support Timeline You Need to Know</h3>
<p>Your urgency depends on which SQL Server version you&apos;re running:</p>
<table>
<thead>
<tr>
<th>SQL Server Version</th>
<th>SSRS Version</th>
<th>Extended Support Ends</th>
</tr>
</thead>
<tbody>
<tr>
<td>SQL Server 2016</td>
<td>SSRS 2016</td>
<td><strong>July 2026</strong></td>
</tr>
<tr>
<td>SQL Server 2017</td>
<td>SSRS 2017</td>
<td>October 2027</td>
</tr>
<tr>
<td>SQL Server 2019</td>
<td>SSRS 2019</td>
<td>January 2030</td>
</tr>
<tr>
<td>SQL Server 2022</td>
<td>SSRS 2022 (final)</td>
<td>January 2033</td>
</tr>
</tbody>
</table>
<p>If you&apos;re on SQL Server 2016, the clock is already ticking. If you&apos;re on 2022, you have time, but no reason to wait since the platform won&apos;t improve.</p>
<p>One critical detail: SSRS 2022 can continue to use later versions of the SQL Server Database Engine for its catalog database. Upgrading your database engine to SQL Server 2025 doesn&apos;t force an immediate SSRS migration, but it does mean you&apos;re running a reporting platform that Microsoft has stopped investing in.</p>
<h2 id="your-migration-options-and-what-each-one-actually-requires">Your Migration Options, and What Each One Actually Requires</h2>
<p>There are more options than Microsoft&apos;s product roadmap suggests. Here&apos;s what each path actually involves, what it costs you, and who it&apos;s built for.</p>
<p>Before you evaluate any of these: any migration is time-consuming. Weeks at minimum, months for complex environments. The effort is comparable across options. What changes is the outcome. Choose a destination that matches how your team actually delivers reports, not just the one your vendor recommends.</p>
<h3 id="power-bi-report-server-pbirs-microsofts-official-replacement">Power BI Report Server (PBIRS): Microsoft&apos;s Official Replacement</h3>
<p>PBIRS is the closest thing to a drop-in SSRS replacement. It&apos;s a superset: everything SSRS does, PBIRS does, plus support for interactive Power BI reports (PBIX), data modeling, and custom visuals.</p>
<p>Your existing RDL reports are fully compatible. If your organization runs paginated reports and wants to stay on-premises, this is the most direct path.</p>
<p>The trade-offs are real, though. Licensing requires either a SQL Server 2025 purchase or, for older SQL Server versions, Enterprise Edition with active Software Assurance. There&apos;s no in-place upgrade; you&apos;re standing up a new PBIRS instance and migrating reports, subscriptions, and schedules. And while PBIRS adds Power BI capabilities, it doesn&apos;t add modern cloud data warehouse connectors, multi-source reporting, or Excel-native template authoring.</p>
<p><strong>Best fit for:</strong> Organizations committed to on-premises reporting that primarily need paginated RDL reports and are ready to move to SQL Server 2025.</p>
<h3 id="power-bi-service-microsofts-cloud-path">Power BI Service: Microsoft&apos;s Cloud Path</h3>
<p>Power BI Service is where Microsoft wants you to land long-term. It supports paginated reports in the cloud, but paginated reporting is a secondary feature in a platform designed around interactive dashboards and self-service analytics.</p>
<p>Microsoft provides an RDL Migration Tool for converting reports, but the experience is different. Power BI&apos;s paginated reports lack some of the fine-grained formatting controls and expression language that SSRS offers. Excel output quality has documented issues: column widths drift, grouped data needs manual cleanup. Dynamic subscriptions are capped at 1,000 recipients with single-value filters only.</p>
<p>The licensing picture adds complexity. Paginated reports require Power BI Premium or Microsoft Fabric capacity, a significant cost increase over SSRS, which was included with your SQL Server license.</p>
<p><strong>Best fit for:</strong> Organizations already deep in the Power BI ecosystem whose reporting needs lean toward interactive dashboards, with paginated reports as a secondary requirement.</p>
<p><strong>Think twice if:</strong> Your team&apos;s core workflow is scheduled, formatted reports (Excel, PDF, or PowerPoint) distributed at scale. Power BI wasn&apos;t designed for that job.</p>
<h3 id="microsoft-fabric-microsofts-long-term-bet">Microsoft Fabric: Microsoft&apos;s Long-Term Bet</h3>
<p>Fabric is Microsoft&apos;s comprehensive analytics platform: data engineering, data science, real-time analytics, BI, and reporting in one environment. It includes paginated report support and represents Microsoft&apos;s strategic vision for where analytics is headed.</p>
<p>It&apos;s also cloud-only, capacity-based in licensing, and a fundamentally different architecture from SSRS. Adopting Fabric means migrating your entire platform, not just your reports. Your team will need new skills, new workflows, and a new mental model for how reporting fits into the broader analytics stack. That&apos;s a significant commitment when the problem you&apos;re solving might be straightforward: &quot;we need our scheduled reports to keep running.&quot;</p>
<p>Organizations already using Fabric for data engineering sometimes pair it with a dedicated reporting tool for last-mile distribution, keeping Fabric for the data platform and a separate tool for report generation and delivery.</p>
<p><strong>Good for:</strong> Organizations aligned with Microsoft&apos;s analytics modernization vision who want a unified data platform and are comfortable with the investment that requires.</p>
<p><img src="https://connectreport.com/blog/content/images/2026/03/SSRS-Migration-Comparison-Table@2x--1-.jpg" alt="SSRS End-of-Life Roadmap: Your Migration Options" loading="lazy"></p>
<h3 id="third-party-report-automation-purpose-built-for-reporting-workflows">Third-Party Report Automation: Purpose-Built for Reporting Workflows</h3>
<p>There&apos;s a category of tools built specifically for the workflow SSRS teams depend on: scheduled report generation, complex bursting, and distribution at scale. These aren&apos;t BI platforms that happen to have a reporting feature. They&apos;re purpose-built for report automation.</p>
<p>ConnectReport is one example. It covers both sides of the reporting workflow SSRS teams depend on. The Excel Add-in lets business users build and manage templates natively in Excel, the same tool your team already knows. For teams that need paginated PDF or PowerPoint output, ConnectReport&apos;s paginated reporting solution provides a web-based report editor with the same scheduling, bursting, and distribution infrastructure underneath. One template can generate thousands of individualized reports, each filtered to unique recipients, regions, or accounts through complex report bursting logic. Reports are scheduled, generated, and delivered automatically to email, OneDrive, or SharePoint.</p>
<p>What makes this category different from the Microsoft options: it&apos;s designed for the operational reporting workflow, not the analytics workflow. You&apos;re not learning a new design paradigm. You&apos;re still building reports in familiar tools, still scheduling delivery, still distributing to stakeholders, but with modern infrastructure underneath.</p>
<p>ConnectReport connects to SQL Server, Snowflake, BigQuery, Databricks, Power BI, Qlik Sense, and more, so whether you&apos;re working with one data source or several, you&apos;re not locked in. Deployment is flexible: cloud or on-premise. Security is enterprise-grade, with SOC 2 Type II and ISO 27001 compliance. 25% of the Fortune 500 receives reports through the platform, with over 1 million reports generated and delivered.</p>
<p>The speed difference is measurable. One customer saw 10x faster report generation compared to manual processes. Another reclaimed 70 hours per week of manual reporting work by automating their workflow.</p>
<p><strong>Best fit for:</strong> Teams whose core need is scheduled, formatted reports (Excel, PDF, or PowerPoint) distributed at scale. Works with a single data source or many.</p>
<p><strong><a href="https://connectreport.com/request-a-demo.html">See how ConnectReport handles report automation at scale</a></strong></p>
<h2 id="the-question-most-migration-guides-skip">The Question Most Migration Guides Skip</h2>
<p>Most of the conversation around SSRS migration stays inside Microsoft&apos;s ecosystem: PBIRS, Power BI, Fabric. But there&apos;s a question worth asking before you commit: does the replacement actually match how your team works?</p>
<p>This matters because migration isn&apos;t free. It costs time, attention, and workflow disruption regardless of destination. What changes is the outcome.</p>
<p>Think about what your team actually does with SSRS day to day. If the answer is &quot;we build paginated reports, schedule them, and deliver formatted documents to stakeholders,&quot; that&apos;s an operational reporting workflow. It has more in common with mail merge at scale than with data exploration or dashboard design. And the tool you migrate to should reflect that.</p>
<p>Power BI is designed for interactive analytics. Fabric is designed for comprehensive data platforms. PBIRS keeps you on-premises with the same constraints you&apos;ve been working around for years. None of these were built from the ground up for the specific job of building, scheduling, and distributing formatted reports at scale, whether that&apos;s Excel workbooks, PDFs, or PowerPoint decks.</p>
<p>A finance team generating 500 reports every month, some as Excel workbooks with multi-sheet layouts, some as formatted PDFs for external stakeholders, each filtered by region and delivered to a different recipient on a set schedule, doesn&apos;t need a dashboard platform. They need a report automation engine that does exactly what they&apos;re already doing, faster and with less manual work.</p>
<p>&quot;We just need scheduled reports emailed to people.&quot; That&apos;s how real users describe what they use SSRS for. If that sounds like your team, your migration destination should be a tool built for exactly that, not one that can do it as a secondary feature if you configure it right, with the right license tier, within the right set of limitations.</p>
<h2 id="how-to-assess-your-current-ssrs-setup-before-you-move">How to Assess Your Current SSRS Setup Before You Move</h2>
<p>Before you pick a destination, take stock of what you&apos;re migrating. This assessment applies regardless of which path you choose, and skipping it is how teams discover gaps three months into a migration project.</p>
<p>Start with your report inventory. How many RDL reports are in production? Which ones are paginated reports with complex formatting? Which use data-driven subscriptions for bursting? Which are one-off exports that nobody would miss? The answers determine how much migration work you&apos;re actually looking at.</p>
<p>Next, document your data sources. Are you pulling exclusively from SQL Server, or do you also connect to other platforms? Most SSRS teams start with SQL Server, but your replacement tool shouldn&apos;t lock you in if your data needs grow. Tools like ConnectReport connect to <a href="https://connectreport.com/blog/snowflake-reporting-tools-for-print-ready-reports">Snowflake</a>, BigQuery, Databricks, and more, so you&apos;re covered whether you have one data source today or five tomorrow.</p>
<p>Then map your delivery requirements. Who receives reports, how do they receive them, and at what scale? Email, file share, SharePoint, client portals? Ten recipients or ten thousand? The scale of your distribution determines which tools are viable.</p>
<p>Pay close attention to compliance-critical reports. Reports tied to financial close, regulatory compliance, or audit requirements need extra attention during migration. These can&apos;t break, and they can&apos;t change formatting unexpectedly.</p>
<p>Factor in your team&apos;s skills. Do you have RDL developers, Excel power users, Power BI analysts, or a mix? The right migration path minimizes retraining. If your team lives in Excel, a tool that uses Excel-native templates has a shorter ramp than one that requires learning a new report builder.</p>
<p>Finally, check your clock. Which SQL Server version are you on? If it&apos;s 2016, you have months, not years. If it&apos;s 2022, you have until 2033, but starting now means migrating on your schedule, not under pressure.</p>
<h2 id="migration-timeline-what-to-expect">Migration Timeline: What to Expect</h2>
<p>How long migration takes depends on where you&apos;re going and what you&apos;re bringing with you. Here&apos;s what organizations facing the SSRS end of life should realistically plan for.</p>
<p>PBIRS migration typically takes weeks to a few months for most organizations. RDL compatibility is a significant advantage since your reports don&apos;t need to be rewritten. The work is infrastructure: standing up the PBIRS instance, migrating the report catalog, recreating subscriptions and schedules, testing output, and retraining users on the new portal. If you have a straightforward SSRS deployment, this is the fastest Microsoft path.</p>
<p>Power BI or Fabric migration stretches to months or quarters. Many reports need to be redesigned rather than migrated because Power BI&apos;s paginated reports don&apos;t support every SSRS feature, and interactive reports require a fundamentally different design approach. Factor in new licensing procurement, new skills development, and a parallel running period where both systems operate simultaneously.</p>
<p>Third-party report automation (ConnectReport) typically takes days to weeks. The workflow translates directly. Whether you&apos;re building Excel templates or designing paginated reports for PDF output, you&apos;re still scheduling reports, still distributing to recipients. The connectors handle multi-source data, the scheduling engine replaces your SSRS subscriptions, and the bursting logic handles complex per-recipient delivery. Teams find the transition minimal because the workflow stays familiar.</p>
<p>Whatever path you choose, plan for a parallel running period. Keep SSRS operational until the new system is proven. You have the support window. Use it.</p>
<!-- Image suggestion: Migration timeline comparison graphic. Alt text: "SSRS migration timeline comparison showing weeks for PBIRS, months for Power BI/Fabric, and days to weeks for ConnectReport" -->
<h2 id="frequently-asked-questions">Frequently Asked Questions</h2>
<h3 id="is-ssrs-being-discontinued">Is SSRS being discontinued?</h3>
<p>No new versions of SSRS will be released. SQL Server 2025 does not include SSRS; it includes Power BI Report Server instead. However, SSRS 2022 continues to receive security updates and support through January 11, 2033. It&apos;s in maintenance mode: stable, but frozen.</p>
<h3 id="what-replaces-ssrs">What replaces SSRS?</h3>
<p>Microsoft&apos;s official replacement is Power BI Report Server (PBIRS) for on-premises reporting. For cloud reporting, Microsoft recommends Power BI Service or Microsoft Fabric. Third-party report automation platforms like ConnectReport offer an alternative path focused specifically on report generation, bursting, and distribution workflows.</p>
<h3 id="will-my-rdl-reports-work-in-power-bi-report-server">Will my RDL reports work in Power BI Report Server?</h3>
<p>Yes. PBIRS is a superset of SSRS and supports RDL reports natively. Your existing paginated reports carry over without needing to be rewritten.</p>
<h3 id="does-ssrs-work-with-sql-server-2025">Does SSRS work with SQL Server 2025?</h3>
<p>SSRS 2022 can continue to use later versions of the SQL Server Database Engine to host its reporting catalog. You can upgrade your database engine without immediately replacing SSRS, but no new SSRS version ships with SQL Server 2025. PBIRS is included instead.</p>
<h3 id="how-long-does-ssrs-migration-take">How long does SSRS migration take?</h3>
<p>It depends on your destination and complexity. PBIRS migrations with compatible RDL reports typically take weeks. Power BI or Fabric migrations often stretch to months, especially when reports need redesign. Purpose-built report automation tools like ConnectReport can be operational in days to weeks, since the core workflow (build templates, schedule delivery, distribute reports) translates directly.</p>
<h2 id="choose-a-migration-path-that-fits-how-you-work">Choose a Migration Path That Fits How You Work</h2>
<p>SSRS migration is coming for every organization that depends on it. The timeline varies (July 2026 if you&apos;re on SQL Server 2016, January 2033 if you&apos;re on SQL Server 2022) but the direction is clear. Microsoft has moved on.</p>
<p>You get to choose what comes next. Choose based on how your team actually works, not on what a vendor&apos;s product roadmap assumes you should want.</p>
<p>If your team runs on scheduled, formatted reports distributed to stakeholders, whether that&apos;s Excel workbooks, PDFs, or PowerPoint, choose a tool built for exactly that. ConnectReport handles complex bursting, scheduling, and distribution across output formats, with modern data connectors, enterprise-grade security, and the speed to make migration feel like an upgrade.</p>
<p><strong><a href="https://connectreport.com/demo">See how ConnectReport handles the reporting workflows your team depends on. Book a demo.</a></strong></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Top BigQuery Reporting Tools for Paginated Reports]]></title><description><![CDATA[<p>Google Cloud&apos;s best-in-class data warehouse solution, BigQuery, has seen rapid adoption. In 2021 alone, BigQuery accounted for <a href="https://www.theinformation.com/articles/internal-google-data-reveals-its-bigger-than-snowflake-in-key-cloud-business" rel="noreferrer">over $1.5 million of revenue</a> for Google Cloud. &#xA0;The real power of BigQuery lies in its ability to quickly analyze vast amounts of data and generate insights. As organizations</p>]]></description><link>https://connectreport.com/blog/top-bigquery-reporting-tools-for-paginated-reports/</link><guid isPermaLink="false">64d29d99a9dd0704215518cc</guid><category><![CDATA[Reporting]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Tue, 08 Aug 2023 19:59:48 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2023/08/Blue-Modern-Online-Medical-Consultation-Banner.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2023/08/Blue-Modern-Online-Medical-Consultation-Banner.jpg" alt="Top BigQuery Reporting Tools for Paginated Reports"><p>Google Cloud&apos;s best-in-class data warehouse solution, BigQuery, has seen rapid adoption. In 2021 alone, BigQuery accounted for <a href="https://www.theinformation.com/articles/internal-google-data-reveals-its-bigger-than-snowflake-in-key-cloud-business" rel="noreferrer">over $1.5 million of revenue</a> for Google Cloud. &#xA0;The real power of BigQuery lies in its ability to quickly analyze vast amounts of data and generate insights. As organizations continue to migrate their data into BigQuery, they need reporting tools to meet legacy requirements such as delivery of compliance reports, account statements, and other formatted document outputs.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2023/08/BQ_Explained_2.max-900x900.png" class="kg-image" alt="Top BigQuery Reporting Tools for Paginated Reports" loading="lazy" width="900" height="300" srcset="https://connectreport.com/blog/content/images/size/w600/2023/08/BQ_Explained_2.max-900x900.png 600w, https://connectreport.com/blog/content/images/2023/08/BQ_Explained_2.max-900x900.png 900w" sizes="(min-width: 720px) 720px"><figcaption>Image credit: <a href="https://cloud.google.com/blog/products/data-analytics/new-blog-series-bigquery-explained-overview">Google Cloud</a></figcaption></figure><p>With the increasing popularity of <a href="https://cloud.google.com/bigquery">BigQuery</a>, the demand for comprehensive and high-performing reporting tools has also risen. While there are numerous dashboard solutions available with support for BigQuery, the question remains: what about paginated reporting needs? In this article, we will delve into various possibilities for accomplishing multi-page, print-ready reporting on top of BigQuery. We will assess multiple solutions currently utilized by teams.</p><p>With the exponential growth of data in organizations, there is an increasing need for a scalable, efficient, and user-friendly reporting solution. Whether you&apos;re an experienced data professional or new to the world of data reporting, this guide offers valuable insights to assist you in making informed decisions.</p><h3 id="looking-for-a-quick-solution-look-no-further-than-connectreport">Looking for a quick solution? Look no further than ConnectReport</h3><figure class="kg-card kg-image-card"><img src="https://connectreport.com/blog/content/images/2023/08/Group-18--2-.png" class="kg-image" alt="Top BigQuery Reporting Tools for Paginated Reports" loading="lazy" width="1500" height="939" srcset="https://connectreport.com/blog/content/images/size/w600/2023/08/Group-18--2-.png 600w, https://connectreport.com/blog/content/images/size/w1000/2023/08/Group-18--2-.png 1000w, https://connectreport.com/blog/content/images/2023/08/Group-18--2-.png 1500w" sizes="(min-width: 720px) 720px"></figure><p><a href="https://connectreport.com/product.html">ConnectReport</a> empowers users to effortlessly create and schedule reports using BigQuery data, unlocking valuable insights and driving informed decision-making. Reports can be securely distributed via a portal, email, or integrated directly into applications. With ConnectReport, teams have access to the reporting features they need, backed by the reliability, scalability, and security of BigQuery. The modern platform ensures maximum performance, scalability, and cost-efficiency. Users can design precise reports using BigQuery data and distribute them to thousands of users quickly and securely. ConnectReport provides a robust solution for reporting on BigQuery, supporting multiple file formats such as Excel, PDF, and PowerPoint. This flexibility offers users a wide range of options for creating, distributing, and presenting reports, effectively harnessing data to meet their needs.</p><h3 id="whats-the-difference-between-reporting-vs-business-intelligence-analytics">What&apos;s the difference between Reporting vs. Business Intelligence &amp; Analytics?</h3><p>Reporting tools and business intelligence/analytics tools serve unique purposes in data analysis and reporting. Reporting tools are specifically designed to generate well-structured and organized reports. They offer features like report bursting, which allows users to generate reports in bulk for different audiences. These tools also provide scheduling capabilities for automated report generation. Additionally, reporting tools support various output formats like Excel, PDF, and PowerPoint, facilitating easy sharing with stakeholders. They may also offer pixel-perfect design capabilities for precise layout configuration. Reporting tools excel in addressing regulatory and compliance reporting requirements, executive and management reporting, operations reporting, and data sharing. They are particularly useful for presenting data from internal systems in a structured and visually appealing manner.</p><p>On the other hand, business intelligence and analytics tools focus on interactive data exploration. These tools enable users to analyze and visualize data to uncover insights and make data-driven decisions. While reporting tools concentrate on structured reports, BI/analytics tools emphasize data exploration and analysis. They allow users to create interactive dashboards, perform advanced data visualizations, and apply various analytical techniques. Unlike reporting tools, BI/analytics platforms may not support report bursting or pixel-perfect outputs, as their primary focus is flexible and interactive data exploration.</p><p>In summary, reporting tools efficiently generate well-structured reports with features like report bursting and pixel-perfect design capabilities. They are ideal for specific reporting requirements and data sharing. On the other hand, business intelligence and analytics tools prioritize interactive data exploration and analysis, empowering users to uncover insights and make informed decisions. While both tools are vital for different workflows, they have distinct features and functionalities to meet requirements.</p><h2 id="connectreport-the-1-solution-for-reporting-on-bigquery">ConnectReport: The #1 Solution for Reporting on BigQuery</h2><p>ConnectReport is widely recognized as the leading solution for BigQuery reporting, backed by numerous compelling advantages. What sets it apart is its complete independence from developers, making it stand out from other tools. ConnectReport empowers end-users, eliminating the need for developer intervention. This significantly speeds up the reporting process and mitigates any potential bottlenecks related to technical expertise.</p><p>In addition, ConnectReport excels in its simplicity and user-friendly interface, making it incredibly easy to learn and manage. Regardless of technical proficiency, users can quickly grasp its operation. The intuitive design requires minimal training, reducing onboarding time and increasing user productivity.</p><p>Moreover, ConnectReport is a fully self-service solution, giving users the autonomy to independently generate, modify, and distribute reports. This level of self-sufficiency expedites decision-making processes and enables real-time data-driven insights.</p><p>With its developer-free approach, user-friendly interface, and self-service capabilities, ConnectReport is the unparalleled choice for unlocking the full potential of BigQuery for reporting.</p><h2 id="developer-focused-reporting-solutions">Developer Focused Reporting Solutions</h2><p>Developer reporting solutions like DevExpress enable teams proficient in technologies such as .NET and C# to automate report generation on BigQuery. However, as these solutions heavily rely on developers, organizations must possess the necessary technical expertise to implement, maintain, and adapt them to evolving business requirements. For companies with a robust internal technical team, these tools offer extensive customization options, allowing tailored reports that precisely meet their needs. Conversely, organizations lacking in-house technical expertise may find developer-focused solutions less ideal, as they heavily depend on external support for implementation and maintenance. When choosing between developer-focused reporting solutions and user-friendly, self-service tools, organizations should consider their internal resources and technical capabilities as a guiding factor.</p><p>Additionally, developer-focused solutions limit users&apos; ability to customize reports once generated. This limitation necessitates businesses seeking updates to invest additional resources in report creation and maintenance. In contrast, self-service reporting tools offer a more dynamic user experience, granting users complete control over report customization.</p><h2 id="self-service-reporting-tools">Self-Service Reporting Tools</h2><p>ConnectReport and similar self-service reporting solutions prioritize user-friendly experiences, allowing end users to customize reports according to their specific requirements. These comprehensive tools are particularly suitable for organizations lacking technical expertise, as they offer reliable reporting capabilities without the complexity of implementation or maintenance that legacy or developer-focused solutions require.</p><p>Moreover, self-service reporting tools empower business users to modify existing reports effortlessly, eliminating the need for technical assistance. For instance, users can easily personalize their reports by selecting specific data sets or fields, organizing columns, adjusting font size and colors, and incorporating charts and graphs. This high level of customization makes self-service reporting solutions ideal for businesses that frequently require report adjustments.</p><p>Additionally, these tools feature intuitive interfaces, requiring minimal training for business users. This makes them an excellent choice for businesses seeking to leverage their data without relying on dedicated developer or analyst teams.</p><p>As organizations transition away from manual processes, they must carefully consider the balance between cost, time savings, and technical capabilities when selecting reporting solutions. Self-service reporting tools, with their user-friendly interfaces, customizable features, and reduced dependence on technical resources, continue to be an appealing option for businesses in need of flexible and robust reporting</p><h2 id="legacy-reporting-solutions">Legacy Reporting Solutions</h2><p>There are various existing legacy reporting solutions, some of which have been around for over 20 years. Deploying and maintaining these solutions can be complex, and they often lack new features or active development. If your organization is accustomed to working with legacy systems or already has them in place, using a legacy solution might be feasible. However, investing further in outdated solutions may not align with your broader technical strategy.</p><p>In the realm of legacy solutions, products like Crystal Reports and Microsoft SQL Server Reporting Services (SSRS) offer report bursting capabilities, but they do not have supported integrations with BigQuery. To integrate with BigQuery, you will need to utilize JDBC or ODBC drivers. It&apos;s important to note that integrating these legacy solutions with BigQuery can be a complicated process. Configuring them to work together using JDBC or ODBC drivers can be cumbersome and technically challenging. Furthermore, these integrations are not generally officially supported, which means you would be solely responsible for troubleshooting any issues or seeking assistance. This can place a significant demand on resources, requiring specialized staff knowledgeable in these areas.</p><p>Deploying these solutions in a cloud environment presents numerous challenges. They were not designed with the cloud in mind and their architectures are based on on-premises setups. This can result in increased operational complexity and hinder your organization&apos;s agility in responding to changes and opportunities.</p><p>Another significant drawback of legacy solutions like Crystal Reports and Microsoft SQL Server Reporting Services (SSRS) is the requirement for desktop software to generate reports. These systems rely on traditional software installations which have to be managed and updated on individual workstations. In contrast, modern self-service tools like ConnectReport can be executed entirely within a web browser. This means no software installations or desktop dependencies - offering a truly platform-independent solution. With tools like ConnectReport, you&apos;re not tethered to a specific workstation or software setup; you can generate, share, and interact with your reports from anywhere, on any device with internet access. This flexibility and ease of access are key advantages of using modern browser-based reporting solutions, and they significantly enhance the overall user experience.</p><p><br></p><h2 id="legacy-self-service-or-developer-focused-which-should-i-choose">Legacy, Self-Service, or Developer-Focused, which should I choose?</h2><p>When comparing legacy, self-service, and developer-focused solutions, it&apos;s crucial to consider your organization&apos;s needs, future plans, and technical capabilities.</p><p><strong><strong>Legacy systems</strong></strong> such as Crystal Reports and SSRS, while familiar, pose significant challenges in integration and cloud adaptation. They necessitate technical know-how, time, and resources for effective deployment. While they might be feasible for organizations with existing legacy systems, their nuances and outdated workflows, along with the lack of dedicated integrations for BigQuery, could cause hassles in long-term maintenance and troubleshooting.</p><p><strong><strong>Developer-focused solutions</strong></strong> offer a high level of customization and control. They require an in-house team of developers with expertise in specific programming languages and tools. While this can lead to tailored solutions perfectly suited to your organization&apos;s needs, it also means higher costs in terms of time, resources, and ongoing maintenance.</p><p><strong><strong>Self-service solutions,</strong></strong> such as ConnectReport, are designed with modern analytics practices in mind. They offer native support for BigQuery integration and are cloud-ready, avoiding the need for extensive system overhauls. They offer a balance of customization and ease of use, making them a robust choice for organizations aiming to build a modern analytics practice. They are user-friendly, requiring less technical expertise, thus empowering more team members to generate and use the reports.</p><p>In conclusion, while all three options have their merits, self-service reporting tools like ConnectReport offer a smooth transition and alignment with a modern analytics strategy, positioning your organization for agility and growth.</p><h2 id="conclusion">Conclusion</h2><p>Given these challenges, it is obvious that traditional and developer-centric solutions are not the most efficient or cost-efficient for reporting with BigQuery. This is where ConnectReport comes into play - a cutting-edge, cloud-native solution specifically tailored for BigQuery. With ConnectReport, you can bypass the technical complexities and runaway costs associated with integrating and adapting legacy systems for the cloud. It provides seamless integration, and comprehensive support, and perfectly aligns with the broader technical strategy of modern organizations. Embracing ConnectReport not only streamlines your operations but also enhances your organization&apos;s agility in responding to changes and seizing opportunities. Opt for ConnectReport and embrace the modern, efficient, and fully supported approach to BigQuery reporting.</p><p><br></p><p><br></p><h2 id><br></h2>]]></content:encoded></item><item><title><![CDATA[Top Snowflake Reporting Tools for Pixel-Perfect Reports]]></title><description><![CDATA[Explore the top solutions with report bursting and pixel-perfect design capabilities with support for Snowflake]]></description><link>https://connectreport.com/blog/snowflake-reporting-tools-for-print-ready-reports/</link><guid isPermaLink="false">64d2728ba9dd070421551885</guid><category><![CDATA[Reporting]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Tue, 08 Aug 2023 17:04:41 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2023/08/Blue-Black-Sneakers-Realistic-Product-Promotion-Banner--1-.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2023/08/Blue-Black-Sneakers-Realistic-Product-Promotion-Banner--1-.jpg" alt="Top Snowflake Reporting Tools for Pixel-Perfect Reports"><p>Snowflake&apos;s powerful data warehouse solution has rapidly grown in market share over the last few years. In 2023 alone, Snowflake&apos;s revenue grew 69.41%, a 60.46% increase year-over-year. Moreover, nearly three out of four people would recommend using Snowflake to a colleague (3x the industry average). It offers numerous benefits, being cloud-native for seamless integration into cloud environments. With a serverless architecture, users can focus on their data without managing infrastructure. It also supports multi-cloud deployments, providing flexibility and avoiding vendor lock-in.</p><p>As the popularity of Snowflake has grown, so too has the need for robust and powerful reporting tools built on it. It&apos;s easy to find solutions for dashboards that support Snowflake, but what about paginated reporting requirements? &#xA0;In this article, we will explore the options to achieve multi-page, pixel-perfecting reporting on top of Snowflake. We will evaluate several solutions that teams are using.</p><p>As data continues to grow exponentially in most organizations, the demand for a scalable, efficient and easy-to-use solution for reporting needs is paramount. Whether you are a seasoned data professional, or just beginning your journey in the realm of data reporting, this guide provides valuable insights to help inform your decision-making process.</p><h3 id="looking-for-a-quick-solution">Looking for a quick solution? </h3><p>ConnectReport empowers users to effortlessly design and schedule reports on top of Snowflake data, unlocking valuable insights and driving data-informed decision-making. Reports can be distributed to users via a secure portal, email, or integrate directly into your applications. <a href="https://connectreport.com/customization.html">ConnectReport</a> gives teams the reporting features they need with the reliability, scalability and security of Snowflake as the foundation. The modern platform provides maximum performance and scalability while keeping costs low. Users can design pixel-perfect reports on top of Snowflake data and burst them to thousands of users &#xA0;quickly and securely.</p><figure class="kg-card kg-image-card"><img src="https://connectreport.com/blog/content/images/2023/08/Group-11--1-.png" class="kg-image" alt="Top Snowflake Reporting Tools for Pixel-Perfect Reports" loading="lazy" width="1236" height="897" srcset="https://connectreport.com/blog/content/images/size/w600/2023/08/Group-11--1-.png 600w, https://connectreport.com/blog/content/images/size/w1000/2023/08/Group-11--1-.png 1000w, https://connectreport.com/blog/content/images/2023/08/Group-11--1-.png 1236w" sizes="(min-width: 720px) 720px"></figure><p>ConnectReport offers a robust solution for reporting on top of Snowflake, providing comprehensive support for multiple file formats. Whether it&apos;s Excel, PDF, or PowerPoint files, ConnectReport has you covered. This flexibility offers users a wide range of options for report creation, distribution, and presentation, ensuring your data can be harnessed to meet your needs effectively.</p><h3 id="what-is-the-difference-between-reporting-vs-business-intelligence-analytics">What is the difference between Reporting vs. Business Intelligence &amp; Analytics?</h3><p>Reporting tools and business intelligence/analytics tools are two distinct categories of software that serve different purposes in data analysis and reporting.</p><p>Reporting tools are specifically designed to generate reports in a structured and organized manner. They often offer features such as report bursting capabilities, which allow users to generate reports in bulk for different audiences. These tools also provide scheduling capabilities, enabling users to automate report generation at specific intervals. Additionally, reporting tools typically offer the ability to email reports and connect to SMTP for easy distribution. They support various output formats like Excel, PDF, and PowerPoint, making it convenient to share reports with stakeholders. Furthermore, reporting tools may offer pixel-perfect design capabilities, allowing users to design the layout of content on pages precisely. This includes configuring properties like headers, footers, logos, and images. Overall, reporting tools are designed to help users address regulatory and compliance reporting requirements, executive and management reporting, operations reporting, and data sharing. They are particularly useful for externalizing data from internal systems and presenting it in a structured and visually appealing manner.</p><p>On the other hand, business intelligence and analytics tools focus on providing interactive data exploration capabilities. These tools enable users to analyze and visualize data to uncover insights and make data-driven decisions. While reporting tools are primarily concerned with generating structured reports, BI/analytics tools emphasize data exploration and analysis. They often allow users to create interactive dashboards, perform advanced data visualizations, and apply various analytical techniques to gain deeper insights into the data. Unlike reporting tools, BI/analytics platforms may not support capabilities like report bursting or creating pixel-perfect outputs, as their primary focus is on providing flexible and interactive data exploration capabilities.</p><p>In summary, reporting tools are specialized software designed to generate structured reports efficiently, often with features like report bursting and pixel-perfect design capabilities. They are ideal for addressing specific reporting requirements and facilitating data sharing. On the other hand, business intelligence and analytics tools prioritize interactive data exploration and analysis, enabling users to uncover insights and make data-driven decisions. While both types of tools play crucial roles in data analysis and reporting, their emphasis and functionalities differ to cater to distinct user needs.</p><h2 id="developer-focused-reporting-solutions">Developer Focused Reporting Solutions</h2><p>Developer-focused reporting solutions such as <a href="https://www.devexpress.com/subscriptions/reporting/">DevExpress</a> allow teams with expertise in technologies like .NET and C# to automate report creation on top of Snowflake. However, because these solutions depend on developers, your organization must have the necessary technical expertise to implement, maintain, and adapt these reporting solutions to ever-changing business needs. For organizations with a strong in-house technical team that is already versed in .NET and older programming ecosystems, these tools can offer a high degree of customization. However, developer-focused solutions are not ideal for companies lacking in-house technical expertise, as they may rely heavily on external or internal support for implementation and maintenance. As a rule of thumb, organizations should consider their internal resources and technical capabilities when deciding between developer-focused reporting solutions and more user-friendly, self-service tools.</p><p>Moreover, developer-focused solutions don&apos;t give users the ability to customize reports once they are created. &#xA0;Because of this, businesses that require updates to their reports will need to invest additional resources for the creation and maintenance of these reports. Conversely, self-service reporting tools provide a more dynamic user experience and give users full control over report customization.</p><h2 id="self-service-reporting-tools">Self-Service Reporting Tools</h2><p>Self-service reporting solutions like ConnectReport focus on ease of use and enable end &#xA0;users to tailor their reports based on their particular needs. These tools are often sold as complete solutions, making them ideal for organizations that lack technical expertise and need a reliable reporting solution without the hassle of complex implementation or maintenance.</p><p>In addition, self-service reporting tools allow business users to easily modify existing reports without relying on technical assistance. For example, they can quickly and easily customize their reports to display specific data sets or fields, control how columns are organized, choose the font size and colors of text, and add graphical elements such as charts and graphs. This level of customization makes self-service reporting solutions ideal for businesses that require frequent adjustments to their reports.</p><p>Finally, with a user-friendly interface, self-service reporting tools are easy to use and require minimal training for business users. This makes them ideal solutions for businesses that want to take full advantage of their data without the need for a dedicated team of developers or analysts.</p><p>As businesses move away from manual processes, they must consider the balance between cost, time savings, and technical capabilities when choosing between developer-focused reporting solutions. With their user-friendly interface, easy customization, and cost savings due to minimal technical resources required, self-service reporting tools remain attractive options for businesses that need robust reporting with maximum flexibility.</p><h2 id="legacy-reporting-solutions">Legacy Reporting Solutions</h2><p>Several legacy reporting solutions exist, some of which have been around for 20 years or longer. These solutions are often complex to deploy and maintain and do not receive new features or significant active development. If your organization is used to working with legacy systems, or already has them in place, reaching for a legacy solution may be feasible, but making further investments in dated solutions may not align with your broader technical strategy.</p><p>In the legacy solution landscape, products like Crystal Reports and Microsoft SQL Server Reporting Services (SSRS) provide the ability to burst reports, but neither of these solutions offer supported integrations with Snowflake. &#xA0;To integrate with Snowflake, you will need to use JDBC or ODBC drivers.</p><p>Integrating these legacy solutions with Snowflake can indeed be a convoluted process. Trying to make them work together involves using JDBC or ODBC drivers, which can be cumbersome and technically complex. Importantly, these integrations are not officially supported, meaning that should you encounter any issues or require any sort of assistance, you would be left on your own to figure things out. This inevitably requires specialized staff who are well-versed in these areas, which is a considerable demand on resources.</p><p>Further, deploying these solutions in a cloud environment poses many challenges. They were not built with the cloud in mind; their architectures are firmly grounded in on-premises setups. Hence, adapting them for the cloud requires overhauling their systems, which can be time-consuming, costly, and fraught with potential issues. This can lead to increased operational complexity and reduce the agility of your organization in responding to changes and opportunities.</p><h2 id="connectreport-the-1-solution-for-reporting-on-snowflake">ConnectReport: The #1 Solution for Reporting on Snowflake</h2><p><a href="https://connectreport.com/product.html">ConnectReport</a> is recognized as the leading solution for Snowflake reporting, supported by several compelling advantages. Its key differentiator lies in its complete independence from developers, setting it apart from other tools. ConnectReport empowers end-users, eliminating the need for developer intervention, which significantly expedites the reporting process and mitigates any potential bottlenecks related to technical expertise.</p><p>Moreover, ConnectReport excels in its simplicity and user-friendly interface, making it exceptionally easy to learn and manage. Users, regardless of their technical proficiency, can quickly grasp its operation. The intuitive design requires minimal training, reducing onboarding time and enhancing user productivity.</p><p>Furthermore, ConnectReport is a fully self-service solution, granting users the autonomy to independently generate, modify, and distribute reports. This level of self-sufficiency accelerates decision-making processes and enables real-time data-driven insights.</p><p>By providing a developer-free, user-friendly, and self-service reporting solution, ConnectReport has established itself as the unmatched choice for unlocking the full potential of Snowflake for reporting.</p><h2 id="conclusion">Conclusion</h2><p>Given the associated challenges, it is clear that legacy and developer-focused solutions are not the most efficient or cost-effective for reporting with Snowflake. This is where ConnectReport comes in &#x2013; a modern, cloud-native solution specifically designed for Snowflake. With ConnectReport, you can avoid the technical complexities and high costs associated with integrating and adapting legacy systems for the cloud. It offers seamless integration, is fully supported, and aligns perfectly with the broader technical strategy of modern organizations. Transitioning to ConnectReport not only simplifies your operations but also enhances your organization&apos;s agility in responding to changes and opportunities. Choose ConnectReport and embrace the modern, efficient, and supported path to Snowflake reporting.</p>]]></content:encoded></item><item><title><![CDATA[ConnectReport for Qlik Cloud]]></title><description><![CDATA[<p>ConnectReport is the trusted enterprise reporting solution for Qlik Cloud that goes beyond legacy solutions to integrate with your organization&#x2019;s cloud-based workflows. A secure, centrally managed reporting platform accessed from a web browser, ConnectReport enables your organization to deliver reporting capabilities on top of your Qlik Cloud or</p>]]></description><link>https://connectreport.com/blog/connectreport-for-qlik-cloud/</link><guid isPermaLink="false">643dd145837d0e0b15d95c07</guid><category><![CDATA[Product Announcements]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Fri, 26 May 2023 13:32:06 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2023/04/ConnectReport-for-Qlik-Cloud.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2023/04/ConnectReport-for-Qlik-Cloud.png" alt="ConnectReport for Qlik Cloud"><p>ConnectReport is the trusted enterprise reporting solution for Qlik Cloud that goes beyond legacy solutions to integrate with your organization&#x2019;s cloud-based workflows. A secure, centrally managed reporting platform accessed from a web browser, ConnectReport enables your organization to deliver reporting capabilities on top of your Qlik Cloud or Qlik Sense data and visualizations. ConnectReport&#x2019;s flexibility allows organizations to define their own reporting workflows as business requires rather than adapting to limitations of legacy solutions.</p><h2 id="a-trusted-qlik-technology-partner-reporting-solution">A trusted Qlik Technology Partner reporting solution</h2><p>ConnectReport is proud to be a trusted Qlik Technology partner, delivering a comprehensive reporting solution that is seamlessly integrated with the Qlik suite of products. With ConnectReport, customers can simplify their Qlik reporting workflows, saving time and resources while delivering powerful insights that drive business results.</p><h2 id="powerful-qlik-integration">Powerful Qlik integration</h2><p>Go from Qlik app to report in minutes. &#xA0;ConnectReport&#x2019;s unique integration with Qlik allows report authors to drag and drop dimensions, measures, tables, visualizations and more directly from a Qlik app into a report template. This enables you and your users to rapidly build out and iterate on reports without the guesswork of other solutions.</p><h2 id="100-web-based-reporting">100% web-based reporting</h2><p>The ConnectReport solution has no dependency on desktop installed software and the entire experience, from report authoring to consumption, lives entirely in a centrally managed platform. ConnectReport&#x2019;s web-based template editor is accessed from a web browser, enabling organizations to deploy extremely flexible scheduled and on-demand reporting capabilities &#xA0;to users with confidence and lower costs.</p><h2 id="open-and-extensible-platform">Open and extensible platform</h2><p>With ConnectReport&#x2019;s open and extensible platform, organizations can achieve unprecedented flexibility and customization in their reporting workflows. ConnectReport&#x2019;s extensibility allows you to evolve and scale as quickly as your business requirements change, allowing you to stay ahead in today&#x2019;s rapidly evolving data and analytics landscape. Whether you need to integrate with multiple data sources or deliver a parameterized reporting integration with your own applications, ConnectReport&#x2019;s platform provides the tools and flexibility you need to get the job done. With ConnectReport, you have the power to build reporting solutions that are tailored to your unique business needs, and the agility to stay ahead in today&#x2019;s competitive landscape.</p><h2 id="move-faster-with-connectreport">Move faster with ConnectReport</h2><p>Partner with a team who knows how to deliver reporting quickly, efficiently and securely. With ConnectReport, reporting does not have to be your organization&#x2019;s core competency &#x2013; &#xA0;deliver documents on top of your data without budgeting hours of valuable time to develop and maintain your own reporting infrastructure. ConnectReport provides a customizable, cloud-ready reporting solution that allows you to quickly generate reports from your data, and securely share them with your team, stakeholders or customers. With ConnectReport, you can focus on what you do best, while we handle the reporting.</p>]]></content:encoded></item><item><title><![CDATA[Complete List of Qlik Errors and Descriptions]]></title><description><![CDATA[<p>This page compiles a complete list of errors messages, error codes and descriptions returned by the Qlik Engine API. Qlik developers and superusers, keep this list bookmarked for whenever you encounter an obscure Qlik error. </p><!--kg-card-begin: html--><table class="kg-width-wide" border="1">
  <tbody>
    <tr class="heading"><th>Error code</th><th>Error name</th><th>Description</th></tr>
  <tr id="-128"><td><a href="#-128">-128</a></td><td>LOCERR_INTERNAL_ERROR</td><td>Indicates an internal error occurred.</td></tr>
  <tr id="-1"><td><a href="#-1">-1</a></td></tr></tbody></table>]]></description><link>https://connectreport.com/blog/complete-list-of-qlik-errors-and-descriptions/</link><guid isPermaLink="false">641a9a4b837d0e0b15d95bab</guid><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Wed, 22 Mar 2023 06:27:27 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2023/03/The-Complete-List-of-Qlik-Errors-Codes--descriptions-and-more.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2023/03/The-Complete-List-of-Qlik-Errors-Codes--descriptions-and-more.jpg" alt="Complete List of Qlik Errors and Descriptions"><p>This page compiles a complete list of errors messages, error codes and descriptions returned by the Qlik Engine API. Qlik developers and superusers, keep this list bookmarked for whenever you encounter an obscure Qlik error. </p><!--kg-card-begin: html--><table class="kg-width-wide" border="1">
  <tbody>
    <tr class="heading"><th>Error code</th><th>Error name</th><th>Description</th></tr>
  <tr id="-128"><td><a href="#-128">-128</a></td><td>LOCERR_INTERNAL_ERROR</td><td>Indicates an internal error occurred.</td></tr>
  <tr id="-1"><td><a href="#-1">-1</a></td><td>LOCERR_GENERIC_UNKNOWN</td><td>Indicates an unknown error occurred.</td></tr>
  <tr id="0"><td><a href="#0">0</a></td><td>LOCERR_GENERIC_OK</td><td>Indicates the operation completed successfully.</td></tr>
  <tr id="1"><td><a href="#1">1</a></td><td>LOCERR_GENERIC_NOT_SET</td><td>Indicates a required parameter was not set.</td></tr>
  <tr id="2"><td><a href="#2">2</a></td><td>LOCERR_GENERIC_NOT_FOUND</td><td>Indicates the requested resource was not found.</td></tr>
  <tr id="3"><td><a href="#3">3</a></td><td>LOCERR_GENERIC_ALREADY_EXISTS</td><td>Indicates the resource being created already exists.</td></tr>
  <tr id="4"><td><a href="#4">4</a></td><td>LOCERR_GENERIC_INVALID_PATH</td><td>Indicates the specified path is invalid.</td></tr>
  <tr id="5"><td><a href="#5">5</a></td><td>LOCERR_GENERIC_ACCESS_DENIED</td><td>Indicates the requested operation was denied.</td></tr>
  <tr id="6"><td><a href="#6">6</a></td><td>LOCERR_GENERIC_OUT_OF_MEMORY</td><td>Indicates the system ran out of memory.</td></tr>
  <tr id="7"><td><a href="#7">7</a></td><td>LOCERR_GENERIC_NOT_INITIALIZED</td><td>Indicates the system was not initialized properly.</td></tr>
  <tr id="8"><td><a href="#8">8</a></td><td>LOCERR_GENERIC_INVALID_PARAMETERS</td><td>Indicates invalid parameters were provided.</td></tr>
  <tr id="9"><td><a href="#9">9</a></td><td>LOCERR_GENERIC_EMPTY_PARAMETERS</td><td>Indicates empty parameters were provided.</td></tr>
  <tr id="10"><td><a href="#10">10</a></td><td>LOCERR_GENERIC_INTERNAL_ERROR</td><td>Indicates an internal error occurred.</td></tr>
  <tr id="11"><td><a href="#11">11</a></td><td>LOCERR_GENERIC_CORRUPT_DATA</td><td>Indicates the data being processed is corrupt.</td></tr>
  <tr id="12"><td><a href="#12">12</a></td><td>LOCERR_GENERIC_MEMORY_INCONSISTENCY</td><td>Indicates a memory inconsistency occurred.</td></tr>
  <tr id="13"><td><a href="#13">13</a></td><td>LOCERR_GENERIC_INVISIBLE_OWNER_ABORT</td><td>Indicates the operation was aborted due to an invisible owner.</td></tr>
  <tr id="14"><td><a href="#14">14</a></td><td>LOCERR_GENERIC_PROHIBIT_VALIDATE</td><td>Indicates validation was prohibited for the operation.</td></tr>
  <tr id="15"><td><a href="#15">15</a></td><td>LOCERR_GENERIC_ABORTED</td><td>Indicates the operation was aborted.</td></tr>
  <tr id="16"><td><a href="#16">16</a></td><td>LOCERR_GENERIC_CONNECTION_LOST</td><td>Indicates the connection to a resource was lost.</td></tr>
  <tr id="17"><td><a href="#17">17</a></td><td>LOCERR_GENERIC_UNSUPPORTED_IN_PRODUCT_VERSION</td><td>Indicates the operation is unsupported in the current product version.</td></tr>
  <tr id="18"><td><a href="#18">18</a></td><td>LOCERR_GENERIC_REST_CONNECTION_FAILURE</td><td>Indicates a REST connection failure occurred.</td></tr>
  <tr id="19"><td><a href="#19">19</a></td><td>LOCERR_GENERIC_MEMORY_LIMIT_REACHED</td><td>Indicates the memory limit has been reached.</td></tr>
  <tr id="20"><td><a href="#20">20</a></td><td>LOCERR_GENERIC_NOT_IMPLEMENTED</td><td>Indicates the requested functionality is not yet implemented.</td></tr>
  <tr id="400"><td><a href="#400">400</a></td><td>LOCERR_HTTP_400</td><td>Indicates a bad request was made.</td></tr>
  <tr id="401"><td><a href="#401">401</a></td><td>LOCERR_HTTP_401</td><td>Indicates unauthorized access was attempted.</td></tr>
  <tr id="402"><td><a href="#402">402</a></td><td>LOCERR_HTTP_402</td><td>Indicates payment is required for the requested operation.</td></tr>
  <tr id="403"><td><a href="#403">403</a></td><td>LOCERR_HTTP_403</td><td>Indicates access to the requested resource was forbidden.</td></tr>
  <tr id="404"><td><a href="#404">404</a></td><td>LOCERR_HTTP_404</td><td>Indicates the requested resource was not found.</td></tr>
  <tr id="405"><td><a href="#405">405</a></td><td>LOCERR_HTTP_405</td><td>Indicates the requested method is not allowed.</td></tr>
  <tr id="406"><td><a href="#406">406</a></td><td>LOCERR_HTTP_406</td><td>Indicates the requested content type is not acceptable.</td></tr>
  <tr id="407"><td><a href="#407">407</a></td><td>LOCERR_HTTP_407</td><td>Indicates the client must authenticate with a proxy before proceeding.</td></tr>
  <tr id="408"><td><a href="#408">408</a></td><td>LOCERR_HTTP_408</td><td>Indicates the client did not send a request within the server&apos;s allotted time.</td></tr>
  <tr id="409"><td><a href="#409">409</a></td><td>LOCERR_HTTP_409</td><td>Indicates the request could not be completed due to a conflict.</td></tr>
  <tr id="410"><td><a href="#410">410</a></td><td>LOCERR_HTTP_410</td><td>Indicates the requested resource is no longer available.</td></tr>
  <tr id="411"><td><a href="#411">411</a></td><td>LOCERR_HTTP_411</td><td>Indicates the length of the request is required but missing.</td></tr>
  <tr id="412"><td><a href="#412">412</a></td><td>LOCERR_HTTP_412</td><td>Indicates the preconditions given in the request failed.</td></tr>
  <tr id="412"><td><a href="#412">412</a></td><td>LOCERR_HTTP_412</td><td>Precondition failed: the server does not meet the conditions specified in the request headers.</td></tr>
  <tr id="413"><td><a href="#413">413</a></td><td>LOCERR_HTTP_413</td><td>Request entity too large: the server refuses to process the request because the request entity is larger than the server is willing or able to process.</td></tr>
  <tr id="414"><td><a href="#414">414</a></td><td>LOCERR_HTTP_414</td><td>Request-URI too long: the server refuses to process the request because the request-target is longer than the server is willing to interpret.</td></tr>
  <tr id="415"><td><a href="#415">415</a></td><td>LOCERR_HTTP_415</td><td>Unsupported media type: the server refuses to accept the request because the payload format is not supported.</td></tr>
  <tr id="416"><td><a href="#416">416</a></td><td>LOCERR_HTTP_416</td><td>Range not satisfiable: the server cannot provide the requested range.</td></tr>
  <tr id="417"><td><a href="#417">417</a></td><td>LOCERR_HTTP_417</td><td>Expectation failed: the server cannot meet the requirements specified in the Expect request-header field.</td></tr>
  <tr id="422"><td><a href="#422">422</a></td><td>LOCERR_HTTP_422</td><td>Unprocessable entity: the request was well-formed but was unable to be followed due to semantic errors.</td></tr>
  <tr id="429"><td><a href="#429">429</a></td><td>LOCERR_HTTP_429</td><td>Too many requests: the user has sent too many requests in a given amount of time.</td></tr>
  <tr id="500"><td><a href="#500">500</a></td><td>LOCERR_HTTP_500</td><td>Internal server error: the server encountered an unexpected condition that prevented it from fulfilling the request.</td></tr>
  <tr id="501"><td><a href="#501">501</a></td><td>LOCERR_HTTP_501</td><td>Not implemented: the server does not support the functionality required to fulfill the request.</td></tr>
  <tr id="502"><td><a href="#502">502</a></td><td>LOCERR_HTTP_502</td><td>Bad gateway: the server was acting as a gateway or proxy and received an invalid response from the upstream server.</td></tr>
  <tr id="503"><td><a href="#503">503</a></td><td>LOCERR_HTTP_503</td><td>Service unavailable: the server is currently unable to handle the request due to a temporary overload or maintenance of the server.</td></tr>
  <tr id="504"><td><a href="#504">504</a></td><td>LOCERR_HTTP_504</td><td>Gateway timeout: the server was acting as a gateway or proxy and did not receive a timely response from the upstream server.</td></tr>
  <tr id="505"><td><a href="#505">505</a></td><td>LOCERR_HTTP_505</td><td>HTTP version not supported: the server does not support the HTTP protocol version used in the request.</td></tr>
  <tr id="509"><td><a href="#509">509</a></td><td>LOCERR_HTTP_509</td><td>Bandwidth limit exceeded: the server has exceeded the bandwidth limit for the request.</td></tr>
  <tr id="700"><td><a href="#700">700</a></td><td>LOCERR_HTTP_COULD_NOT_RESOLVE_HOST</td><td>The server cannot resolve the host name specified in the request URL.</td></tr>
  <tr id="1000"><td><a href="#1000">1000</a></td><td>LOCERR_APP_ALREADY_EXISTS</td><td>The app already exists.</td></tr>
  <tr id="1001"><td><a href="#1001">1001</a></td><td>LOCERR_APP_INVALID_NAME</td><td>The app name is invalid.</td></tr>
  <tr id="1002"><td><a href="#1002">1002</a></td><td>LOCERR_APP_ALREADY_OPEN</td><td>The app is already open.</td></tr>
  <tr id="1003"><td><a href="#1003">1003</a></td><td>LOCERR_APP_NOT_FOUND</td><td>The app cannot be found.</td></tr>
  <tr id="1004"><td><a href="#1004">1004</a></td><td>LOCERR_APP_IMPORT_FAILED</td><td>The app import failed.</td></tr>
  <tr id="1005"><td><a href="#1005">1005</a></td><td>LOCERR_APP_SAVE_FAILED</td><td>The app save failed.</td></tr>
  <tr id="1006"><td><a href="#1006">1006</a></td><td>LOCERR_APP_CREATE_FAILED</td><td>The app creation failed.</td></tr>
  <tr id="1007"><td><a href="#1007">1007</a></td><td>LOCERR_APP_INVALID</td><td>The app is invalid.</td></tr>
  <tr id="1008"><td><a href="#1008">1008</a></td><td>LOCERR_APP_CONNECT_FAILED</td><td>The app connection failed.</td></tr>
  <tr id="1009"><td><a href="#1009">1009</a></td><td>LOCERR_APP_ALREADY_OPEN_IN_DIFFERENT_MODE</td><td>The app is already open in a different mode.</td></tr>
  <tr id="1010"><td><a href="#1010">1010</a></td><td>LOCERR_APP_MIGRATION_COULD_NOT_CONTACT_MIGRATION_SERVICE</td><td>The app migration could not contact the migration service.</td></tr>
  <tr id="1011"><td><a href="#1011">1011</a></td><td>LOCERR_APP_MIGRATION_COULD_NOT_START_MIGRATION</td><td>The app migration could not start.</td></tr>
  <tr id="1012"><td><a href="#1012">1012</a></td><td>LOCERR_APP_MIGRATION_FAILURE</td><td>The app migration failed.</td></tr>
  <tr id="1013"><td><a href="#1013">1013</a></td><td>LOCERR_APP_SCRIPT_MISSING</td><td>The app script is missing.</td></tr>
  <tr id="1014"><td><a href="#1014">1014</a></td><td>&quot;LOCERR_APP_EXPORT_FAILED&quot;</td><td>An error occurred while exporting the app.</td></tr>
  <tr id="1015"><td><a href="#1015">1015</a></td><td>&quot;LOCERR_APP_SIZE_EXCEEDED&quot;</td><td>The app size exceeds the maximum limit.</td></tr>
  <tr id="1016"><td><a href="#1016">1016</a></td><td>&quot;LOCERR_APP_DIRECT_QUERY_WORKLOAD_NOT_SUPPORTED&quot;</td><td>Direct query workload is not supported in the app.</td></tr>
  <tr id="2000"><td><a href="#2000">2000</a></td><td>&quot;LOCERR_CONNECTION_ALREADY_EXISTS&quot;</td><td>The connection already exists.</td></tr>
  <tr id="2001"><td><a href="#2001">2001</a></td><td>&quot;LOCERR_CONNECTION_NOT_FOUND&quot;</td><td>The connection could not be found.</td></tr>
  <tr id="2002"><td><a href="#2002">2002</a></td><td>&quot;LOCERR_CONNECTION_FAILED_TO_LOAD&quot;</td><td>The connection failed to load.</td></tr>
  <tr id="2003"><td><a href="#2003">2003</a></td><td>&quot;LOCERR_CONNECTION_FAILED_TO_IMPORT&quot;</td><td>The connection failed to import.</td></tr>
  <tr id="2004"><td><a href="#2004">2004</a></td><td>&quot;LOCERR_CONNECTION_NAME_IS_INVALID&quot;</td><td>The connection name is invalid.</td></tr>
  <tr id="2005"><td><a href="#2005">2005</a></td><td>&quot;LOCERR_CONNECTION_MISSING_CREDENTIALS&quot;</td><td>The connection is missing credentials.</td></tr>
  <tr id="2300"><td><a href="#2300">2300</a></td><td>&quot;LOCERR_CONNECTOR_NO_FILE_STREAMING_SUPPORT&quot;</td><td>The connector does not support file streaming.</td></tr>
  <tr id="2301"><td><a href="#2301">2301</a></td><td>&quot;LOCERR_CONNECTOR_FILESIZE_EXCEEDED_BUFFER_SIZE&quot;</td><td>The file size exceeds the buffer size.</td></tr>
  <tr id="3000"><td><a href="#3000">3000</a></td><td>&quot;LOCERR_FILE_ACCESS_DENIED&quot;</td><td>Access to the file is denied.</td></tr>
  <tr id="3001"><td><a href="#3001">3001</a></td><td>&quot;LOCERR_FILE_NAME_INVALID&quot;</td><td>The file name is invalid.</td></tr>
  <tr id="3002"><td><a href="#3002">3002</a></td><td>&quot;LOCERR_FILE_CORRUPT&quot;</td><td>The file is corrupt.</td></tr>
  <tr id="3003"><td><a href="#3003">3003</a></td><td>&quot;LOCERR_FILE_NOT_FOUND&quot;</td><td>The file could not be found.</td></tr>
  <tr id="3004"><td><a href="#3004">3004</a></td><td>&quot;LOCERR_FILE_FORMAT_UNSUPPORTED&quot;</td><td>The file format is not supported.</td></tr>
  <tr id="3005"><td><a href="#3005">3005</a></td><td>&quot;LOCERR_FILE_OPENED_IN_UNSUPPORTED_MODE&quot;</td><td>The file is opened in an unsupported mode.</td></tr>
  <tr id="3006"><td><a href="#3006">3006</a></td><td>&quot;LOCERR_FILE_TABLE_NOT_FOUND&quot;</td><td>The table in the file could not be found.</td></tr>
  <tr id="4000"><td><a href="#4000">4000</a></td><td>&quot;LOCERR_USER_ACCESS_DENIED&quot;</td><td>Access is denied for the user.</td></tr>
  <tr id="4001"><td><a href="#4001">4001</a></td><td>&quot;LOCERR_USER_IMPERSONATION_FAILED&quot;</td><td>Impersonation of the user failed.</td></tr>
  <tr id="5000"><td><a href="#5000">5000</a></td><td>&quot;LOCERR_SERVER_OUT_OF_SESSION_AND_USER_CALS&quot;</td><td>The server is out of session and user CALs.</td></tr>
  <tr id="5001"><td><a href="#5001">5001</a></td><td>&quot;LOCERR_SERVER_OUT_OF_SESSION_CALS&quot;</td><td>The server is out of session CALs.</td></tr>
  <tr id="5002"><td><a href="#5002">5002</a></td><td>&quot;LOCERR_SERVER_OUT_OF_USAGE_CALS&quot;</td><td>The server is out of usage CALs.</td></tr>
  <tr id="5003"><td><a href="#5003">5003</a></td><td>&quot;LOCERR_SERVER_OUT_OF_CALS&quot;</td><td>The server is out of CALs.</td></tr>
  <tr id="5004"><td><a href="#5004">5004</a></td><td>&quot;LOCERR_SERVER_OUT_OF_NAMED_CALS&quot;</td><td>The server is out of named CALs.</td></tr>
  <tr id="5005"><td><a href="#5005">5005</a></td><td>&quot;LOCERR_SERVER_OFF_DUTY&quot;</td><td>The server is off duty.</td></tr>
  <tr id="5006"><td><a href="#5006">5006</a></td><td>&quot;LOCERR_SERVER_BUSY&quot;</td><td>The server is busy.</td></tr>
  <tr id="5007"><td><a href="#5007">5007</a></td><td>&quot;LOCERR_SERVER_LICENSE_EXPIRED&quot;</td><td>The server license has expired.</td></tr>
  <tr id="5008"><td><a href="#5008">5008</a></td><td>&quot;LOCERR_SERVER_AJAX_DISABLED&quot;</td><td>AJAX is disabled on the server.</td></tr>
  <tr id="5009"><td><a href="#5009">5009</a></td><td>&quot;LOCERR_SERVER_NO_TOKEN&quot;</td><td>No token is available on the server.</td></tr>
  <tr id="6000"><td><a href="#6000">6000</a></td><td>&quot;LOCERR_HC_INVALID_OBJECT&quot;</td><td>The object is invalid.</td></tr>
  <tr id="6001"><td><a href="#6001">6001</a></td><td>&quot;LOCERR_HC_RESULT_TOO_LARGE&quot;</td><td>The result is too large.</td></tr>
  <tr id="6002"><td><a href="#6002">6002</a></td><td>&quot;LOCERR_HC_INVALID_OBJECT_STATE&quot;</td><td>The object state is invalid.</td></tr>
  <tr id="6003"><td><a href="#6003">6003</a></td><td>&quot;LOCERR_HC_MODAL_OBJECT_ERROR&quot;</td><td>There is an error with the modal object.</td></tr>
  <tr id="7000"><td><a href="#7000">7000</a></td><td>LOCERR_CALC_INVALID_DEF</td><td>Invalid definition in a calculation</td></tr>
  <tr id="7001"><td><a href="#7001">7001</a></td><td>LOCERR_CALC_NOT_IN_LIB</td><td>Calculation not in library</td></tr>
  <tr id="7002"><td><a href="#7002">7002</a></td><td>LOCERR_CALC_HEAP_ERROR</td><td>Error in calculation heap</td></tr>
  <tr id="7003"><td><a href="#7003">7003</a></td><td>LOCERR_CALC_TOO_LARGE</td><td>Calculation too large to perform</td></tr>
  <tr id="7004"><td><a href="#7004">7004</a></td><td>LOCERR_CALC_TIMEOUT</td><td>Calculation timed out</td></tr>
  <tr id="7005"><td><a href="#7005">7005</a></td><td>LOCERR_CALC_EVAL_CONDITION_FAILED</td><td>Evaluation condition failed</td></tr>
  <tr id="7006"><td><a href="#7006">7006</a></td><td>LOCERR_CALC_MIXED_LINKED_AGGREGATION</td><td>Mixed linked aggregation in calculation</td></tr>
  <tr id="7007"><td><a href="#7007">7007</a></td><td>LOCERR_CALC_MISSING_LINKED</td><td>Missing linked calculation</td></tr>
  <tr id="7008"><td><a href="#7008">7008</a></td><td>LOCERR_CALC_INVALID_COL_SORT</td><td>Invalid column sort in calculation</td></tr>
  <tr id="7009"><td><a href="#7009">7009</a></td><td>LOCERR_CALC_PAGES_TOO_LARGE</td><td>Pages in calculation too large</td></tr>
  <tr id="7010"><td><a href="#7010">7010</a></td><td>LOCERR_CALC_SEMANTIC_FIELD_NOT_ALLOWED</td><td>Semantic field not allowed in calculation</td></tr>
  <tr id="7011"><td><a href="#7011">7011</a></td><td>LOCERR_CALC_VALIDATION_STATE_INVALID</td><td>Invalid validation state in calculation</td></tr>
  <tr id="7012"><td><a href="#7012">7012</a></td><td>LOCERR_CALC_PIVOT_DIMENSIONS_ALREADY_EXISTS</td><td>Pivot dimensions already exist in calculation</td></tr>
  <tr id="7013"><td><a href="#7013">7013</a></td><td>LOCERR_CALC_MISSING_LINKED_FIELD</td><td>Missing linked field in calculation</td></tr>
  <tr id="7014"><td><a href="#7014">7014</a></td><td>LOCERR_CALC_NOT_CALCULATED</td><td>Calculation not calculated</td></tr>
  <tr id="8000"><td><a href="#8000">8000</a></td><td>LOCERR_LAYOUT_EXTENDS_INVALID_ID</td><td>Invalid ID in layout extension</td></tr>
  <tr id="8001"><td><a href="#8001">8001</a></td><td>LOCERR_LAYOUT_LINKED_OBJECT_NOT_FOUND</td><td>Linked object not found in layout</td></tr>
  <tr id="8002"><td><a href="#8002">8002</a></td><td>LOCERR_LAYOUT_LINKED_OBJECT_INVALID</td><td>Invalid linked object in layout</td></tr>
  <tr id="9000"><td><a href="#9000">9000</a></td><td>LOCERR_PERSISTENCE_WRITE_FAILED</td><td>Failed to write to persistence</td></tr>
  <tr id="9001"><td><a href="#9001">9001</a></td><td>LOCERR_PERSISTENCE_READ_FAILED</td><td>Failed to read from persistence</td></tr>
  <tr id="9002"><td><a href="#9002">9002</a></td><td>LOCERR_PERSISTENCE_DELETE_FAILED</td><td>Failed to delete from persistence</td></tr>
  <tr id="9003"><td><a href="#9003">9003</a></td><td>LOCERR_PERSISTENCE_NOT_FOUND</td><td>Persistence not found</td></tr>
  <tr id="9004"><td><a href="#9004">9004</a></td><td>LOCERR_PERSISTENCE_UNSUPPORTED_VERSION</td><td>Unsupported version in persistence</td></tr>
  <tr id="9005"><td><a href="#9005">9005</a></td><td>LOCERR_PERSISTENCE_MIGRATION_FAILED_READ_ONLY</td><td>Failed to migrate read-only persistence</td></tr>
  <tr id="9006"><td><a href="#9006">9006</a></td><td>LOCERR_PERSISTENCE_MIGRATION_CANCELLED</td><td>Persistence migration cancelled</td></tr>
  <tr id="9007"><td><a href="#9007">9007</a></td><td>LOCERR_PERSISTENCE_MIGRATION_BACKUP_FAILED</td><td>Failed to backup persistence during migration</td></tr>
  <tr id="9008"><td><a href="#9008">9008</a></td><td>LOCERR_PERSISTENCE_DISK_FULL</td><td>Disk is full in persistence</td></tr>
  <tr id="9009"><td><a href="#9009">9009</a></td><td>LOCERR_PERSISTENCE_NOT_SUPPORTED_FOR_SESSION_APP</td><td>Persistence not supported for session app</td></tr>
  <tr id="9010"><td><a href="#9010">9010</a></td><td>LOCERR_PERSISTENCE_MOVE_FAILED</td><td>Failed to move persistence</td></tr>
  <tr id="9510"><td><a href="#9510">9510</a></td><td>LOCERR_PERSISTENCE_SYNC_SET_CHUNK_INVALID_PARAMETERS</td><td>Invalid parameters for persistence sync set chunk</td></tr>
  <tr id="9511"><td><a href="#9511">9511</a></td><td>LOCERR_PERSISTENCE_SYNC_GET_CHUNK_INVALID_PARAMETERS</td><td>Invalid parameters for persistence sync get chunk</td></tr>
  <tr id="10000"><td><a href="#10000">10000</a></td><td>LOCERR_SCRIPT_DATASOURCE_ACCESS_DENIED</td><td>Access denied to script data source</td></tr>
  <tr id="11000"><td><a href="#11000">11000</a></td><td>LOCERR_RELOAD_IN_PROGRESS</td><td>Reload in progress</td></tr>
  <tr id="11001"><td><a href="#11001">11001</a></td><td>LOCERR_RELOAD_TABLE_X_NOT_FOUND</td><td>Table not found in reload</td></tr>
  <tr id="11002"><td><a href="#11002">11002</a></td><td>LOCERR_RELOAD_UNKNOWN_STATEMENT</td><td>Unknown statement in reload</td></tr>
  <tr id="11003"><td><a href="#11003">11003</a></td><td>LOCERR_RELOAD_EXPECTED_SOMETHING_FOUND_UNKNOWN</td><td>Expected something, found unknown in reload</td></tr>
  <tr id="11004"><td><a href="#11004">11004</a></td><td>LOCERR_RELOAD_EXPECTED_NOTHING_FOUND_UNKNOWN</td><td>Expected nothing, found unknown in reload</td></tr>
  <tr id="11004"><td><a href="#11004">11004</a></td><td>LOCERR_RELOAD_EXPECTED_NOTHING_FOUND_UNKNOWN</td><td>An expected reload operation found nothing.</td></tr>
  <tr id="11005"><td><a href="#11005">11005</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_1_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given tokens but found an unknown one.</td></tr>
  <tr id="11006"><td><a href="#11006">11006</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_2_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given two tokens but found an unknown one.</td></tr>
  <tr id="11007"><td><a href="#11007">11007</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_3_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given three tokens but found an unknown one.</td></tr>
  <tr id="11008"><td><a href="#11008">11008</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_4_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given four tokens but found an unknown one.</td></tr>
  <tr id="11009"><td><a href="#11009">11009</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_5_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given five tokens but found an unknown one.</td></tr>
  <tr id="11010"><td><a href="#11010">11010</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_6_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given six tokens but found an unknown one.</td></tr>
  <tr id="11011"><td><a href="#11011">11011</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_7_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given seven tokens but found an unknown one.</td></tr>
  <tr id="11012"><td><a href="#11012">11012</a></td><td>LOCERR_RELOAD_EXPECTED_ONE_OF_8_OR_MORE_TOKENS_FOUND_UNKNOWN</td><td>An expected reload operation expected one of the given eight or more tokens but found an unknown one.</td></tr>
  <tr id="11013"><td><a href="#11013">11013</a></td><td>LOCERR_RELOAD_FIELD_X_NOT_FOUND</td><td>A field with the given name was not found.</td></tr>
  <tr id="11014"><td><a href="#11014">11014</a></td><td>LOCERR_RELOAD_MAPPING_TABLE_X_NOT_FOUND</td><td>A mapping table with the given name was not found.</td></tr>
  <tr id="11015"><td><a href="#11015">11015</a></td><td>LOCERR_RELOAD_LIB_CONNECTION_X_NOT_FOUND</td><td>A library connection with the given name was not found.</td></tr>
  <tr id="11016"><td><a href="#11016">11016</a></td><td>LOCERR_RELOAD_NAME_ALREADY_TAKEN</td><td>The name provided is already taken by another object.</td></tr>
  <tr id="11017"><td><a href="#11017">11017</a></td><td>LOCERR_RELOAD_WRONG_FILE_FORMAT_DIF</td><td>The file has the wrong format for a DIF file.</td></tr>
  <tr id="11018"><td><a href="#11018">11018</a></td><td>LOCERR_RELOAD_WRONG_FILE_FORMAT_BIFF</td><td>The file has the wrong format for a BIFF file.</td></tr>
  <tr id="11019"><td><a href="#11019">11019</a></td><td>LOCERR_RELOAD_WRONG_FILE_FORMAT_ENCRYPTED</td><td>The file is encrypted and cannot be loaded.</td></tr>
  <tr id="11020"><td><a href="#11020">11020</a></td><td>LOCERR_RELOAD_OPEN_FILE_ERROR</td><td>There was an error opening the file.</td></tr>
  <tr id="11021"><td><a href="#11021">11021</a></td><td>LOCERR_RELOAD_AUTO_GENERATE_COUNT</td><td>A generated table count error occurred.</td></tr>
  <tr id="11022"><td><a href="#11022">11022</a></td><td>LOCERR_RELOAD_PE_ILLEGAL_PREFIX_COMB</td><td>An illegal prefix combination was used in a partial reload.</td></tr>
  <tr id="11023"><td><a href="#11023">11023</a></td><td>LOCERR_RELOAD_MATCHING_CONTROL_STATEMENT_ERROR</td><td>There was an error with a matching control statement.</td></tr>
  <tr id="11024"><td><a href="#11024">11024</a></td><td>LOCERR_RELOAD_MATCHING_LIBPATH_X_NOT_FOUND</td><td>A matching library path with the given name was not found.</td></tr>
  <tr id="11025"><td><a href="#11025">11025</a></td><td>LOCERR_RELOAD_MATCHING_LIBPATH_X_INVALID</td><td>The matching library path with the given name is invalid.</td></tr>
  <tr id="11026"><td><a href="#11026">11026</a></td><td>LOCERR_RELOAD_MATCHING_LIBPATH_X_OUTSIDE</td><td>The matching library path with the given name is outside of the document folder.</td></tr>
  <tr id="11027"><td><a href="#11027">11027</a></td><td>LOCERR_RELOAD_NO_QUALIFIED_PATH_FOR_FILE</td><td>No qualified path for the file was found.</td></tr>
  <tr id="11028"><td><a href="#11028">11028</a></td><td>LOCERR_RELOAD_MODE_STATEMENT_ONLY_FOR_LIB_PATHS</td><td>Reload mode statement only allowed for library paths.</td></tr>
  <tr id="11029"><td><a href="#11029">11029</a></td><td>LOCERR_RELOAD_INCONSISTENT_USE_OF_SEMANTIC_FIELDS</td><td>Inconsistent use of semantic fields during reload.</td></tr>
  <tr id="11030"><td><a href="#11030">11030</a></td><td>LOCERR_RELOAD_NO_OPEN_DATABASE</td><td>No open database available for reload.</td></tr>
  <tr id="11031"><td><a href="#11031">11031</a></td><td>LOCERR_RELOAD_AGGREGATION_REQUIRED_BY_GROUP_BY</td><td>Aggregation required by GROUP BY clause during reload.</td></tr>
  <tr id="11032"><td><a href="#11032">11032</a></td><td>LOCERR_RELOAD_CONNECT_MUST_USE_LIB_PREFIX_IN_THIS_MODE</td><td>Connection must use library prefix in the current mode.</td></tr>
  <tr id="11033"><td><a href="#11033">11033</a></td><td>LOCERR_RELOAD_ODBC_CONNECT_FAILED</td><td>ODBC connection failure during reload.</td></tr>
  <tr id="11034"><td><a href="#11034">11034</a></td><td>LOCERR_RELOAD_OLEDB_CONNECT_FAILED</td><td>OLEDB connection failure during reload.</td></tr>
  <tr id="11035"><td><a href="#11035">11035</a></td><td>LOCERR_RELOAD_CUSTOM_CONNECT_FAILED</td><td>Custom connection failure during reload.</td></tr>
  <tr id="11036"><td><a href="#11036">11036</a></td><td>LOCERR_RELOAD_ODBC_READ_FAILED</td><td>ODBC read failure during reload.</td></tr>
  <tr id="11037"><td><a href="#11037">11037</a></td><td>LOCERR_RELOAD_OLEDB_READ_FAILED</td><td>OLEDB read failure during reload.</td></tr>
  <tr id="11038"><td><a href="#11038">11038</a></td><td>LOCERR_RELOAD_CUSTOM_READ_FAILED</td><td>Custom read failure during reload.</td></tr>
  <tr id="11039"><td><a href="#11039">11039</a></td><td>LOCERR_RELOAD_BINARY_LOAD_PROHIBITED</td><td>Binary load operation is prohibited.</td></tr>
  <tr id="11040"><td><a href="#11040">11040</a></td><td>LOCERR_RELOAD_CONNECTOR_START_FAILED</td><td>Connector start failure during reload.</td></tr>
  <tr id="11041"><td><a href="#11041">11041</a></td><td>LOCERR_RELOAD_CONNECTOR_NOT_RESPONDING</td><td>Connector not responding during reload.</td></tr>
  <tr id="11042"><td><a href="#11042">11042</a></td><td>LOCERR_RELOAD_CONNECTOR_REPLY_ERROR</td><td>Error in connector reply during reload.</td></tr>
  <tr id="11043"><td><a href="#11043">11043</a></td><td>LOCERR_RELOAD_CONNECTOR_CONNECT_ERROR</td><td>Connector connection error during reload.</td></tr>
  <tr id="11044"><td><a href="#11044">11044</a></td><td>LOCERR_RELOAD_CONNECTOR_NOT_FOUND_ERROR</td><td>Connector not found error during reload.</td></tr>
  <tr id="11045"><td><a href="#11045">11045</a></td><td>LOCERR_RELOAD_INPUT_FIELD_WITH_DUPLICATE_KEYS</td><td>Input field contains duplicate keys during reload.</td></tr>
  <tr id="11046"><td><a href="#11046">11046</a></td><td>LOCERR_RELOAD_CONCATENATE_LOAD_NO_PREVIOUS_TABLE</td><td>Concatenate load with no previous table during reload.</td></tr>
  <tr id="11047"><td><a href="#11047">11047</a></td><td>LOCERR_RELOAD_WRONG_FILE_FORMAT_QVD</td><td>Wrong QVD file format during reload.</td></tr>
  <tr id="11048"><td><a href="#11048">11048</a></td><td>LOCERR_RELOAD_ACTION_BLOCKED_ENTITLEMENT</td><td>Action blocked due to insufficient entitlement.</td></tr>
  <tr id="12000"><td><a href="#12000">12000</a></td><td>LOCERR_PERSONAL_NEW_VERSION_AVAILABLE</td><td>New personal edition version available.</td></tr>
  <tr id="12001"><td><a href="#12001">12001</a></td><td>LOCERR_PERSONAL_VERSION_EXPIRED</td><td>Personal edition version expired.</td></tr>
  <tr id="12002"><td><a href="#12002">12002</a></td><td>LOCERR_PERSONAL_SECTION_ACCESS_DETECTED</td><td>Section access detected in personal edition.</td></tr>
  <tr id="12003"><td><a href="#12003">12003</a></td><td>LOCERR_PERSONAL_APP_DELETION_FAILED</td><td>Application deletion failed in personal edition.</td></tr>
  <tr id="12004"><td><a href="#12004">12004</a></td><td>LOCERR_USER_AUTHENTICATION_FAILURE</td><td>User authentication failure.</td></tr>
  <tr id="13000"><td><a href="#13000">13000</a></td><td>LOCERR_EXPORT_OUT_OF_MEMORY</td><td>Out of memory error during export.</td></tr>
  <tr id="13001"><td><a href="#13001">13001</a></td><td>LOCERR_EXPORT_NO_DATA</td><td>No data available for export.</td></tr>
  <tr id="14000"><td><a href="#14000">14000</a></td><td>LOCERR_SYNC_INVALID_OFFSET</td><td>Invalid offset encountered during synchronization.</td></tr>
  <tr id="15000"><td><a href="#15000">15000</a></td><td>LOCERR_SEARCH_TIMEOUT</td><td>Search operation timed out.</td></tr>
  <tr id="16000"><td><a href="#16000">16000</a></td><td>LOCERR_DIRECT_DISCOVERY_LINKED_EXPRESSION_FAIL</td><td>Direct discovery linked expression failure.</td></tr>
  <tr id="16001"><td><a href="#16001">16001</a></td><td>LOCERR_DIRECT_DISCOVERY_ROWCOUNT_OVERFLOW</td><td>Row count overflow in direct discovery.</td></tr>
  <tr id="16002"><td><a href="#16002">16002</a></td><td>LOCERR_DIRECT_DISCOVERY_EMPTY_RESULT</td><td>Empty result encountered in direct discovery.</td></tr>
  <tr id="16003"><td><a href="#16003">16003</a></td><td>LOCERR_DIRECT_DISCOVERY_DB_CONNECTION_FAILED</td><td>Database connection failed in direct discovery.</td></tr>
  <tr id="11028"><td><a href="#11028">11028</a></td><td>LOCERR_RELOAD_MODE_STATEMENT_ONLY_FOR_LIB_PATHS</td><td>Reload mode statement only allowed for library paths.</td></tr>
  <tr id="11029"><td><a href="#11029">11029</a></td><td>LOCERR_RELOAD_INCONSISTENT_USE_OF_SEMANTIC_FIELDS</td><td>Inconsistent use of semantic fields during reload.</td></tr>
  <tr id="11030"><td><a href="#11030">11030</a></td><td>LOCERR_RELOAD_NO_OPEN_DATABASE</td><td>No open database available for reload.</td></tr>
  <tr id="11031"><td><a href="#11031">11031</a></td><td>LOCERR_RELOAD_AGGREGATION_REQUIRED_BY_GROUP_BY</td><td>Aggregation required by GROUP BY clause during reload.</td></tr>
  <tr id="11032"><td><a href="#11032">11032</a></td><td>LOCERR_RELOAD_CONNECT_MUST_USE_LIB_PREFIX_IN_THIS_MODE</td><td>Connection must use library prefix in the current mode.</td></tr>
  <tr id="11033"><td><a href="#11033">11033</a></td><td>LOCERR_RELOAD_ODBC_CONNECT_FAILED</td><td>ODBC connection failure during reload.</td></tr>
  <tr id="11034"><td><a href="#11034">11034</a></td><td>LOCERR_RELOAD_OLEDB_CONNECT_FAILED</td><td>OLEDB connection failure during reload.</td></tr>
  <tr id="11035"><td><a href="#11035">11035</a></td><td>LOCERR_RELOAD_CUSTOM_CONNECT_FAILED</td><td>Custom connection failure during reload.</td></tr>
  <tr id="11036"><td><a href="#11036">11036</a></td><td>LOCERR_RELOAD_ODBC_READ_FAILED</td><td>ODBC read failure during reload.</td></tr>
  <tr id="11037"><td><a href="#11037">11037</a></td><td>LOCERR_RELOAD_OLEDB_READ_FAILED</td><td>OLEDB read failure during reload.</td></tr>
  <tr id="11038"><td><a href="#11038">11038</a></td><td>LOCERR_RELOAD_CUSTOM_READ_FAILED</td><td>Custom read failure during reload.</td></tr>
  <tr id="11039"><td><a href="#11039">11039</a></td><td>LOCERR_RELOAD_BINARY_LOAD_PROHIBITED</td><td>Binary load operation is prohibited.</td></tr>
  <tr id="11040"><td><a href="#11040">11040</a></td><td>LOCERR_RELOAD_CONNECTOR_START_FAILED</td><td>Connector start failure during reload.</td></tr>
  <tr id="11041"><td><a href="#11041">11041</a></td><td>LOCERR_RELOAD_CONNECTOR_NOT_RESPONDING</td><td>Connector not responding during reload.</td></tr>
  <tr id="11042"><td><a href="#11042">11042</a></td><td>LOCERR_RELOAD_CONNECTOR_REPLY_ERROR</td><td>Error in connector reply during reload.</td></tr>
  <tr id="11043"><td><a href="#11043">11043</a></td><td>LOCERR_RELOAD_CONNECTOR_CONNECT_ERROR</td><td>Connector connection error during reload.</td></tr>
  <tr id="11044"><td><a href="#11044">11044</a></td><td>LOCERR_RELOAD_CONNECTOR_NOT_FOUND_ERROR</td><td>Connector not found error during reload.</td></tr>
  <tr id="11045"><td><a href="#11045">11045</a></td><td>LOCERR_RELOAD_INPUT_FIELD_WITH_DUPLICATE_KEYS</td><td>Input field contains duplicate keys during reload.</td></tr>
  <tr id="11046"><td><a href="#11046">11046</a></td><td>LOCERR_RELOAD_CONCATENATE_LOAD_NO_PREVIOUS_TABLE</td><td>Concatenate load with no previous table during reload.</td></tr>
  <tr id="11047"><td><a href="#11047">11047</a></td><td>LOCERR_RELOAD_WRONG_FILE_FORMAT_QVD</td><td>Wrong QVD file format during reload.</td></tr>
  <tr id="11048"><td><a href="#11048">11048</a></td><td>LOCERR_RELOAD_ACTION_BLOCKED_ENTITLEMENT</td><td>Action blocked due to insufficient entitlement.</td></tr>
  <tr id="12000"><td><a href="#12000">12000</a></td><td>LOCERR_PERSONAL_NEW_VERSION_AVAILABLE</td><td>New personal edition version available.</td></tr>
  <tr id="12001"><td><a href="#12001">12001</a></td><td>LOCERR_PERSONAL_VERSION_EXPIRED</td><td>Personal edition version expired.</td></tr>
  <tr id="12002"><td><a href="#12002">12002</a></td><td>LOCERR_PERSONAL_SECTION_ACCESS_DETECTED</td><td>Section access detected in personal edition.</td></tr>
  <tr id="12003"><td><a href="#12003">12003</a></td><td>LOCERR_PERSONAL_APP_DELETION_FAILED</td><td>Application deletion failed in personal edition.</td></tr>
  <tr id="12004"><td><a href="#12004">12004</a></td><td>LOCERR_USER_AUTHENTICATION_FAILURE</td><td>User authentication failure.</td></tr>
  <tr id="13000"><td><a href="#13000">13000</a></td><td>LOCERR_EXPORT_OUT_OF_MEMORY</td><td>Out of memory error during export.</td></tr>
  <tr id="13001"><td><a href="#13001">13001</a></td><td>LOCERR_EXPORT_NO_DATA</td><td>No data available for export.</td></tr>
  <tr id="14000"><td><a href="#14000">14000</a></td><td>LOCERR_SYNC_INVALID_OFFSET</td><td>Invalid offset encountered during synchronization.</td></tr>
  <tr id="15000"><td><a href="#15000">15000</a></td><td>LOCERR_SEARCH_TIMEOUT</td><td>Search operation timed out.</td></tr>
  <tr id="16000"><td><a href="#16000">16000</a></td><td>LOCERR_DIRECT_DISCOVERY_LINKED_EXPRESSION_FAIL</td><td>Direct discovery linked expression failure.</td></tr>
  <tr id="16001"><td><a href="#16001">16001</a></td><td>LOCERR_DIRECT_DISCOVERY_ROWCOUNT_OVERFLOW</td><td>Row count overflow in direct discovery.</td></tr>
  <tr id="16002"><td><a href="#16002">16002</a></td><td>LOCERR_DIRECT_DISCOVERY_EMPTY_RESULT</td><td>Empty result encountered in direct discovery.</td></tr>
  <tr id="16003"><td><a href="#16003">16003</a></td><td>LOCERR_DIRECT_DISCOVERY_DB_CONNECTION_FAILED</td><td>Database connection failed in direct discovery.</td></tr>
  <tr id="16004"><td><a href="#16004">16004</a></td><td>&quot;LOCERR_DIRECT_DISCOVERY_MEASURE_NOT_ALLOWED&quot;</td><td>Direct discovery measure is not permitted.</td></tr>
  <tr id="16005"><td><a href="#16005">16005</a></td><td>&quot;LOCERR_DIRECT_DISCOVERY_DETAIL_NOT_ALLOWED&quot;</td><td>Direct discovery detail is not permitted.</td></tr>
  <tr id="16006"><td><a href="#16006">16006</a></td><td>&quot;LOCERR_DIRECT_DISCOVERY_NOT_SYNTH_CIRCULAR_ALLOWED&quot;</td><td>Synthetic circular measure not allowed in direct discovery.</td></tr>
  <tr id="16007"><td><a href="#16007">16007</a></td><td>&quot;LOCERR_DIRECT_DISCOVERY_ONLY_ONE_DD_TABLE_ALLOWED&quot;</td><td>Only one direct discovery table is allowed.</td></tr>
  <tr id="16008"><td><a href="#16008">16008</a></td><td>&quot;LOCERR_DIRECT_DISCOVERY_DB_AUTHORIZATION_FAILED&quot;</td><td>Database authorization failed for direct discovery.</td></tr>
  <tr id="17000"><td><a href="#17000">17000</a></td><td>&quot;LOCERR_SMART_LOAD_TABLE_NOT_FOUND&quot;</td><td>Smart load table not found.</td></tr>
  <tr id="17001"><td><a href="#17001">17001</a></td><td>&quot;LOCERR_SMART_LOAD_TABLE_DUPLICATED&quot;</td><td>Duplicate smart load table detected.</td></tr>
  <tr id="18000"><td><a href="#18000">18000</a></td><td>&quot;LOCERR_VARIABLE_NO_NAME&quot;</td><td>Variable has no name.</td></tr>
  <tr id="18001"><td><a href="#18001">18001</a></td><td>&quot;LOCERR_VARIABLE_DUPLICATE_NAME&quot;</td><td>Duplicate variable name found.</td></tr>
  <tr id="18002"><td><a href="#18002">18002</a></td><td>&quot;LOCERR_VARIABLE_INCONSISTENCY&quot;</td><td>Variable inconsistency detected.</td></tr>
  <tr id="19000"><td><a href="#19000">19000</a></td><td>&quot;LOCERR_MEDIA_LIBRARY_LIST_FAILED&quot;</td><td>Media library list operation failed.</td></tr>
  <tr id="19001"><td><a href="#19001">19001</a></td><td>&quot;LOCERR_MEDIA_LIBRARY_CONTENT_FAILED&quot;</td><td>Media library content operation failed.</td></tr>
  <tr id="19002"><td><a href="#19002">19002</a></td><td>&quot;LOCERR_MEDIA_BUNDLING_FAILED&quot;</td><td>Media bundling failed.</td></tr>
  <tr id="19003"><td><a href="#19003">19003</a></td><td>&quot;LOCERR_MEDIA_UNBUNDLING_FAILED&quot;</td><td>Media unbundling failed.</td></tr>
  <tr id="19004"><td><a href="#19004">19004</a></td><td>&quot;LOCERR_MEDIA_LIBRARY_NOT_FOUND&quot;</td><td>Media library not found.</td></tr>
  <tr id="20000"><td><a href="#20000">20000</a></td><td>&quot;LOCERR_FEATURE_DISABLED&quot;</td><td>The requested feature is disabled.</td></tr>
  <tr id="-32600"><td><a href="#-32600">-32600</a></td><td>&quot;LOCERR_JSON_RPC_INVALID_REQUEST&quot;</td><td>Invalid JSON-RPC request.</td></tr>
  <tr id="-32601"><td><a href="#-32601">-32601</a></td><td>&quot;LOCERR_JSON_RPC_METHOD_NOT_FOUND&quot;</td><td>JSON-RPC method not found.</td></tr>
  <tr id="-32602"><td><a href="#-32602">-32602</a></td><td>&quot;LOCERR_JSON_RPC_INVALID_PARAMETERS&quot;</td><td>Invalid parameters in JSON-RPC request.</td></tr>
  <tr id="-32603"><td><a href="#-32603">-32603</a></td><td>&quot;LOCERR_JSON_RPC_INTERNAL_ERROR&quot;</td><td>Internal JSON-RPC error.</td></tr>
  <tr id="-32700"><td><a href="#-32700">-32700</a></td><td>&quot;LOCERR_JSON_RPC_PARSE_ERROR&quot;</td><td>JSON-RPC parse error.</td></tr>
  <tr id="33000"><td><a href="#33000">33000</a></td><td>&quot;LOCERR_MQ_SOCKET_CONNECT_FAILURE&quot;</td><td>Message queue socket connection failure.</td></tr>
  <tr id="33001"><td><a href="#33001">33001</a></td><td>&quot;LOCERR_MQ_SOCKET_OPEN_FAILURE&quot;</td><td>Message queue socket open failure.</td></tr>
  <tr id="33002"><td><a href="#33002">33002</a></td><td>&quot;LOCERR_MQ_PROTOCOL_NO_RESPONE&quot;</td><td>No response from message queue protocol.</td></tr>
  <tr id="33003"><td><a href="#33003">33003</a></td><td>&quot;LOCERR_MQ_PROTOCOL_LIBRARY_EXCEPTION&quot;</td><td>Message queue protocol library exception.</td></tr>
  <tr id="33004"><td><a href="#33004">33004</a></td><td>&quot;LOCERR_MQ_PROTOCOL_CONNECTION_CLOSED&quot;</td><td>Message queue protocol connection closed.</td></tr>
  <tr id="33005"><td><a href="#33005">33005</a></td><td>&quot;LOCERR_MQ_PROTOCOL_CHANNEL_CLOSED&quot;</td><td>Message queue protocol channel closed.</td></tr>
  <tr id="33006"><td><a href="#33006">33006</a></td><td>&quot;LOCERR_MQ_PROTOCOL_UNKNOWN_ERROR&quot;</td><td>Unknown error in message queue protocol.</td></tr>
  <tr id="33007"><td><a href="#33007">33007</a></td><td>&quot;LOCERR_MQ_PROTOCOL_INVALID_STATUS&quot;</td><td>Invalid status in message queue protocol.</td></tr>
  <tr id="22000"><td><a href="#22000">22000</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_OK&quot;</td><td>gRPC external engine status is OK.</td></tr>
  <tr id="22001"><td><a href="#22001">22001</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_CANCELLED&quot;</td><td>gRPC external engine operation was cancelled.</td></tr>
  <tr id="22002"><td><a href="#22002">22002</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_UNKNOWN&quot;</td><td>Unknown gRPC external engine status.</td></tr>
  <tr id="22003"><td><a href="#22003">22003</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_INVALID_ARGUMENT&quot;</td><td>Invalid argument in gRPC external engine operation.</td></tr>
  <tr id="22004"><td><a href="#22004">22004</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_DEADLINE_EXCEEDED&quot;</td><td>Deadline exceeded for gRPC external engine operation.</td></tr>
  <tr id="22005"><td><a href="#22005">22005</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_NOT_FOUND&quot;</td><td>Resource not found in gRPC external engine operation.</td></tr>
  <tr id="22006"><td><a href="#22006">22006</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_ALREADY_EXISTS&quot;</td><td>Resource already exists in gRPC external engine operation.</td></tr>
  <tr id="22007"><td><a href="#22007">22007</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_PERMISSION_DENIED&quot;</td><td>Permission denied for gRPC external engine operation.</td></tr>
  <tr id="22008"><td><a href="#22008">22008</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_RESOURCE_EXHAUSTED&quot;</td><td>Resource exhausted in gRPC external engine operation.</td></tr>
  <tr id="22009"><td><a href="#22009">22009</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_FAILED_PRECONDITION&quot;</td><td>Failed precondition in gRPC external engine operation.</td></tr>
  <tr id="22010"><td><a href="#22010">22010</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_ABORTED&quot;</td><td>gRPC external engine operation was aborted.</td></tr>
  <tr id="22011"><td><a href="#22011">22011</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_OUT_OF_RANGE&quot;</td><td>Out of range error in gRPC external engine operation.</td></tr>
  <tr id="22012"><td><a href="#22012">22012</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_UNIMPLEMENTED&quot;</td><td>Unimplemented feature in gRPC external engine operation.</td></tr>
  <tr id="22013"><td><a href="#22013">22013</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_INTERNAL&quot;</td><td>Internal error in gRPC external engine operation.</td></tr>
  <tr id="22014"><td><a href="#22014">22014</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_UNAVAILABLE&quot;</td><td>gRPC external engine operation is unavailable.</td></tr>
  <tr id="22015"><td><a href="#22015">22015</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_DATA_LOSS&quot;</td><td>Data loss occurred in gRPC external engine operation.</td></tr>
  <tr id="22016"><td><a href="#22016">22016</a></td><td>&quot;LOCERR_EXTENGINE_GRPC_STATUS_UNAUTHENTICATED&quot;</td><td>Unauthenticated user in gRPC external engine operation.</td></tr>
  <tr id="23001"><td><a href="#23001">23001</a></td><td>&quot;LOCERR_LXW_INVALID_OBJ&quot;</td><td>Invalid object in LXW operation.</td></tr>
  <tr id="23002"><td><a href="#23002">23002</a></td><td>&quot;LOCERR_LXW_INVALID_FILE&quot;</td><td>Invalid file in LXW operation.</td></tr>
  <tr id="23003"><td><a href="#23003">23003</a></td><td>&quot;LOCERR_LXW_INVALID_SHEET&quot;</td><td>Invalid sheet in LXW operation.</td></tr>
  <tr id="23005"><td><a href="#23005">23005</a></td><td>&quot;LOCERR_LXW_ERROR&quot;</td><td>Generic LXW error.</td></tr>
  <tr id="23006"><td><a href="#23006">23006</a></td><td>&quot;LOCERR_LXW_ERROR_MEMORY_MALLOC_FAILED&quot;</td><td>Memory allocation failure in LXW operation.</td></tr>
  <tr id="23007"><td><a href="#23007">23007</a></td><td>&quot;LOCERR_LXW_ERROR_CREATING_XLSX_FILE&quot;</td><td>Error creating XLSX file in LXW operation.</td></tr>
  <tr id="23008"><td><a href="#23008">23008</a></td><td>&quot;LOCERR_LXW_ERROR_CREATING_TMPFILE&quot;</td><td>Error creating temporary file in LXW operation.</td></tr>
  <tr id="23009"><td><a href="#23009">23009</a></td><td>&quot;LOCERR_LXW_ERROR_ZIP_FILE_OPERATION&quot;</td><td>ZIP file operation error in LXW operation.</td></tr>
  <tr id="23010"><td><a href="#23010">23010</a></td><td>&quot;LOCERR_LXW_ERROR_ZIP_FILE_ADD&quot;</td><td>Error adding file to ZIP in LXW operation.</td></tr>
  <tr id="23011"><td><a href="#23011">23011</a></td><td>&quot;LOCERR_LXW_ERROR_ZIP_CLOSE&quot;</td><td>Error closing ZIP file in LXW operation.</td></tr>
  <tr id="23012"><td><a href="#23012">23012</a></td><td>&quot;LOCERR_LXW_ERROR_NULL_PARAMETER_IGNORED&quot;</td><td>Null parameter ignored in LXW operation.</td></tr>
  <tr id="23013"><td><a href="#23013">23013</a></td><td>&quot;LOCERR_LXW_ERROR_MAX_STRING_LENGTH_EXCEEDED&quot;</td><td>Maximum string length exceeded in LXW operation.</td></tr>
  <tr id="23014"><td><a href="#23014">23014</a></td><td>&quot;LOCERR_LXW_ERROR_255_STRING_LENGTH_EXCEEDED&quot;</td><td>255 character string length exceeded in LXW operation.</td></tr>
  <tr id="23015"><td><a href="#23015">23015</a></td><td>&quot;LOCERR_LXW_ERROR_SHARED_STRING_INDEX_NOT_FOUND&quot;</td><td>Shared string index not found in LXW operation.</td></tr>
  <tr id="23016"><td><a href="#23016">23016</a></td><td>&quot;LOCERR_LXW_ERROR_WORKSHEET_INDEX_OUT_OF_RANGE&quot;</td><td>Worksheet index out of range in LXW operation.</td></tr>
  <tr id="23017"><td><a href="#23017">23017</a></td><td>&quot;LOCERR_LXW_ERROR_WORKSHEET_MAX_NUMBER_URLS_EXCEEDED&quot;</td><td>Maximum number of URLs exceeded in LXW worksheet operation.</td></tr>
  <tr id="24000"><td><a href="#24000">24000</a></td><td>&quot;LOCERR_BDI_STATUS_OK&quot;</td><td>BDI status is OK.</td></tr>
  <tr id="24001"><td><a href="#24001">24001</a></td><td>&quot;LOCERR_BDI_GENERIC_ERROR_NOT_TRANSLATED&quot;</td><td>BDI generic error not translated.</td></tr>
  <tr id="25000"><td><a href="#25000">25000</a></td><td>&quot;LOCERR_TRENDLINE_INVALID_DEF&quot;</td><td>Invalid trendline definition.</td></tr>
  <tr id="25001"><td><a href="#25001">25001</a></td><td>&quot;LOCERR_TRENDLINE_INVALID_MATH_ERROR&quot;</td><td>Invalid math error in trendline calculation.</td></tr>
  <tr id="30000"><td><a href="#30000">30000</a></td><td>&quot;LOCERR_CURL_UNSUPPORTED_PROTOCOL&quot;</td><td>Unsupported protocol in cURL operation.</td></tr>
  <tr id="30001"><td><a href="#30001">30001</a></td><td>&quot;LOCERR_CURL_COULDNT_RESOLVE_PROXY&quot;</td><td>Couldn&apos;t resolve proxy in cURL operation.</td></tr>
  <tr id="30002"><td><a href="#30002">30002</a></td><td>&quot;LOCERR_CURL_COULDNT_CONNECT&quot;</td><td>Couldn&apos;t connect to the server in cURL operation.</td></tr>
  <tr id="30003"><td><a href="#30003">30003</a></td><td>&quot;LOCERR_CURL_REMOTE_ACCESS_DENIED&quot;</td><td>Remote access denied in cURL operation.</td></tr>
  <tr id="30004"><td><a href="#30004">30004</a></td><td>&quot;LOCERR_CURL_FTP_ACCEPT_FAILED&quot;</td><td>FTP accept operation failed in cURL.</td></tr>
  <tr id="30005"><td><a href="#30005">30005</a></td><td>&quot;LOCERR_CURL_FTP_ACCEPT_TIMEOUT&quot;</td><td>FTP accept operation timeout in cURL.</td></tr>
  <tr id="30006"><td><a href="#30006">30006</a></td><td>&quot;LOCERR_CURL_FTP_CANT_GET_HOST&quot;</td><td>Can&apos;t get host in cURL FTP operation.</td></tr>
  <tr id="30007"><td><a href="#30007">30007</a></td><td>&quot;LOCERR_CURL_PARTIAL_FILE&quot;</td><td>Partial file received in cURL operation.</td></tr>
  <tr id="30008"><td><a href="#30008">30008</a></td><td>&quot;LOCERR_CURL_QUOTE_ERROR&quot;</td><td>Quote error in cURL operation.</td></tr>
  <tr id="30009"><td><a href="#30009">30009</a></td><td>&quot;LOCERR_CURL_WRITE_ERROR&quot;</td><td>Write error in cURL operation.</td></tr>
  <tr id="30010"><td><a href="#30010">30010</a></td><td>&quot;LOCERR_CURL_UPLOAD_FAILED&quot;</td><td>Upload failed in cURL operation.</td></tr>
  <tr id="30011"><td><a href="#30011">30011</a></td><td>&quot;LOCERR_CURL_OUT_OF_MEMORY&quot;</td><td>Out of memory in cURL operation.</td></tr>
  <tr id="30012"><td><a href="#30012">30012</a></td><td>&quot;LOCERR_CURL_OPERATION_TIMEDOUT&quot;</td><td>Operation timed out in cURL.</td></tr>
  <tr id="30013"><td><a href="#30013">30013</a></td><td>&quot;LOCERR_CURL_FTP_COULDNT_USE_REST&quot;</td><td>Couldn&apos;t use REST command in cURL FTP operation.</td></tr>
  <tr id="30014"><td><a href="#30014">30014</a></td><td>&quot;LOCERR_CURL_HTTP_POST_ERROR&quot;</td><td>HTTP POST error in cURL operation.</td></tr>
  <tr id="30015"><td><a href="#30015">30015</a></td><td>&quot;LOCERR_CURL_SSL_CONNECT_ERROR&quot;</td><td>SSL connect error in cURL operation.</td></tr>
  <tr id="30016"><td><a href="#30016">30016</a></td><td>&quot;LOCERR_CURL_FILE_COULDNT_READ_FILE&quot;</td><td>Couldn&apos;t read file in cURL operation.</td></tr>
  <tr id="30017"><td><a href="#30017">30017</a></td><td>&quot;LOCERR_CURL_LDAP_CANNOT_BIND&quot;</td><td>LDAP cannot bind in cURL operation.</td></tr>
  <tr id="30018"><td><a href="#30018">30018</a></td><td>&quot;LOCERR_CURL_LDAP_SEARCH_FAILED&quot;</td><td>LDAP search failed in cURL operation.</td></tr>
  <tr id="30019"><td><a href="#30019">30019</a></td><td>&quot;LOCERR_CURL_TOO_MANY_REDIRECTS&quot;</td><td>Too many redirects in cURL operation.</td></tr>
  <tr id="30020"><td><a href="#30020">30020</a></td><td>&quot;LOCERR_CURL_PEER_FAILED_VERIFICATION&quot;</td><td>Peer failed verification in cURL operation.</td></tr>
  <tr id="30021"><td><a href="#30021">30021</a></td><td>&quot;LOCERR_CURL_GOT_NOTHING&quot;</td><td>Got nothing from the server in cURL operation.</td></tr>
  <tr id="30022"><td><a href="#30022">30022</a></td><td>&quot;LOCERR_CURL_SSL_ENGINE_NOTFOUND&quot;</td><td>SSL engine not found in cURL operation.</td></tr>
  <tr id="30023"><td><a href="#30023">30023</a></td><td>&quot;LOCERR_CURL_SSL_ENGINE_SETFAILED&quot;</td><td>Setting SSL engine failed in cURL operation.</td></tr>
  <tr id="30024"><td><a href="#30024">30024</a></td><td>&quot;LOCERR_CURL_SSL_CERTPROBLEM&quot;</td><td>SSL certificate problem in cURL operation.</td></tr>
  <tr id="30025"><td><a href="#30025">30025</a></td><td>&quot;LOCERR_CURL_SSL_CIPHER&quot;</td><td>SSL cipher error in cURL operation.</td></tr>
  <tr id="30026"><td><a href="#30026">30026</a></td><td>&quot;LOCERR_CURL_SSL_CACERT&quot;</td><td>SSL CA certificate error in cURL operation.</td></tr>
  <tr id="30027"><td><a href="#30027">30027</a></td><td>&quot;LOCERR_CURL_BAD_CONTENT_ENCODING&quot;</td><td>Bad content encoding error in cURL operation.</td></tr>
  <tr id="30028"><td><a href="#30028">30028</a></td><td>&quot;LOCERR_CURL_LDAP_INVALID_URL&quot;</td><td>Invalid URL error in cURL LDAP operation.</td></tr>
  <tr id="30029"><td><a href="#30029">30029</a></td><td>&quot;LOCERR_CURL_USE_SSL_FAILED&quot;</td><td>Failed to use SSL in cURL operation.</td></tr>
  <tr id="30030"><td><a href="#30030">30030</a></td><td>&quot;LOCERR_CURL_SSL_ENGINE_INITFAILED&quot;</td><td>SSL engine initialization failed in cURL operation.</td></tr>
  <tr id="30031"><td><a href="#30031">30031</a></td><td>&quot;LOCERR_CURL_LOGIN_DENIED&quot;</td><td>Login denied in cURL operation.</td></tr>
  <tr id="30032"><td><a href="#30032">30032</a></td><td>&quot;LOCERR_CURL_TFTP_NOTFOUND&quot;</td><td>TFTP not found error in cURL operation.</td></tr>
  <tr id="30033"><td><a href="#30033">30033</a></td><td>&quot;LOCERR_CURL_TFTP_ILLEGAL&quot;</td><td>TFTP illegal operation error in cURL.</td></tr>
  <tr id="30034"><td><a href="#30034">30034</a></td><td>&quot;LOCERR_CURL_SSH&quot;</td><td>SSH error in cURL operation.</td></tr>
  <tr id="30100"><td><a href="#30100">30100</a></td><td>&quot;LOCERR_SETEXPRESSION_TOO_LARGE&quot;</td><td>Set expression too large error.</td></tr>
  <tr id="30101"><td><a href="#30101">30101</a></td><td>&quot;LOCERR_RELOAD_MERGE_LOAD_ERROR&quot;</td><td>Reload merge load error.</td></tr>
  <tr id="30200"><td><a href="#30200">30200</a></td><td>&quot;LOCERR_WIN_FTP_DROPPED&quot;</td><td>Windows FTP dropped error.</td></tr>
  <tr id="30201"><td><a href="#30201">30201</a></td><td>&quot;LOCERR_WIN_FTP_NO_PASSIVE_MODE&quot;</td><td>Windows FTP no passive mode error.</td></tr>
  <tr id="30210"><td><a href="#30210">30210</a></td><td>&quot;LOCERR_WIN_HTTP_DOWNLEVEL_SERVER&quot;</td><td>Windows HTTP downlevel server error.</td></tr>
  <tr id="30211"><td><a href="#30211">30211</a></td><td>&quot;LOCERR_WIN_HTTP_INVALID_SERVER_RESPONSE&quot;</td><td>Windows HTTP invalid server response error.</td></tr>
  <tr id="30212"><td><a href="#30212">30212</a></td><td>&quot;LOCERR_WIN_HTTP_REDIRECT_NEEDS_CONFIRMATION&quot;</td><td>Windows HTTP redirect needs confirmation error.</td></tr>
  <tr id="30220"><td><a href="#30220">30220</a></td><td>&quot;LOCERR_WIN_INTERNET_FORCE_RETRY&quot;</td><td>Windows Internet force retry error.</td></tr>
  <tr id="30221"><td><a href="#30221">30221</a></td><td>&quot;LOCERR_WIN_INTERNET_CANNOT_CONNECT&quot;</td><td>Windows Internet cannot connect error.</td></tr>
  <tr id="30222"><td><a href="#30222">30222</a></td><td>&quot;LOCERR_WIN_INTERNET_CONNECTION_ABORTED&quot;</td><td>Windows Internet connection aborted error.</td></tr>
  <tr id="30223"><td><a href="#30223">30223</a></td><td>&quot;LOCERR_WIN_INTERNET_CONNECTION_RESET&quot;</td><td>Windows Internet connection reset error.</td></tr>
  <tr id="30224"><td><a href="#30224">30224</a></td><td>&quot;LOCERR_WIN_INTERNET_DISCONNECTED&quot;</td><td>Windows Internet disconnected error.</td></tr>
  <tr id="30225"><td><a href="#30225">30225</a></td><td>&quot;LOCERR_WIN_INTERNET_INCORRECT_FORMAT&quot;</td><td>Windows Internet incorrect format error.</td></tr>
  <tr id="30226"><td><a href="#30226">30226</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_CA&quot;</td><td>Windows Internet invalid CA error.</td></tr>
  <tr id="30227"><td><a href="#30227">30227</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_OPERATION&quot;</td><td>Windows Internet invalid operation error.</td></tr>
  <tr id="30228"><td><a href="#30228">30228</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_URL&quot;</td><td>Windows Internet invalid URL error.</td></tr>
  <tr id="30229"><td><a href="#30229">30229</a></td><td>&quot;LOCERR_WIN_INTERNET_ITEM_NOT_FOUND&quot;</td><td>Windows Internet item not found error.</td></tr>
  <tr id="30230"><td><a href="#30230">30230</a></td><td>&quot;LOCERR_WIN_INTERNET_LOGIN_FAILURE&quot;</td><td>Windows Internet login failure error.</td></tr>
  <tr id="30231"><td><a href="#30231">30231</a></td><td>&quot;LOCERR_WIN_INTERNET_NAME_NOT_RESOLVED&quot;</td><td>Windows Internet name not resolved error.</td></tr>
  <tr id="30232"><td><a href="#30232">30232</a></td><td>&quot;LOCERR_WIN_INTERNET_NEED_UI&quot;</td><td>Windows Internet need UI error.</td></tr>
  <tr id="30233"><td><a href="#30233">30233</a></td><td>&quot;LOCERR_WIN_INTERNET_SEC_CERT_CN_INVALID&quot;</td><td>Windows Internet security certificate CN invalid error.</td></tr>
  <tr id="30224"><td><a href="#30224">30224</a></td><td>&quot;LOCERR_WIN_INTERNET_DISCONNECTED&quot;</td><td>Windows Internet disconnected error.</td></tr>
  <tr id="30225"><td><a href="#30225">30225</a></td><td>&quot;LOCERR_WIN_INTERNET_INCORRECT_FORMAT&quot;</td><td>Windows Internet incorrect format error.</td></tr>
  <tr id="30226"><td><a href="#30226">30226</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_CA&quot;</td><td>Windows Internet invalid CA error.</td></tr>
  <tr id="30227"><td><a href="#30227">30227</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_OPERATION&quot;</td><td>Windows Internet invalid operation error.</td></tr>
  <tr id="30228"><td><a href="#30228">30228</a></td><td>&quot;LOCERR_WIN_INTERNET_INVALID_URL&quot;</td><td>Windows Internet invalid URL error.</td></tr>
  <tr id="30229"><td><a href="#30229">30229</a></td><td>&quot;LOCERR_WIN_INTERNET_ITEM_NOT_FOUND&quot;</td><td>Windows Internet item not found error.</td></tr>
  <tr id="30230"><td><a href="#30230">30230</a></td><td>&quot;LOCERR_WIN_INTERNET_LOGIN_FAILURE&quot;</td><td>Windows Internet login failure error.</td></tr>
  <tr id="30231"><td><a href="#30231">30231</a></td><td>&quot;LOCERR_WIN_INTERNET_NAME_NOT_RESOLVED&quot;</td><td>Windows Internet name not resolved error.</td></tr>
  <tr id="30232"><td><a href="#30232">30232</a></td><td>&quot;LOCERR_WIN_INTERNET_NEED_UI&quot;</td><td>Windows Internet need UI error.</td></tr>
  <tr id="30233"><td><a href="#30233">30233</a></td><td>&quot;LOCERR_WIN_INTERNET_SEC_CERT_CN_INVALID&quot;</td><td>Windows Internet security certificate CN invalid error.</td></tr>
  <tr id="30234"><td><a href="#30234">30234</a></td><td>&quot;LOCERR_WIN_INTERNET_SEC_CERT_DATE_INVALID&quot;</td><td>Windows Internet security certificate date invalid error.</td></tr>
  <tr id="30235"><td><a href="#30235">30235</a></td><td>&quot;LOCERR_WIN_INTERNET_SEC_CERT_ERRORS&quot;</td><td>Windows Internet security certificate errors.</td></tr>
  <tr id="30236"><td><a href="#30236">30236</a></td><td>&quot;LOCERR_WIN_INTERNET_SEC_INVALID_CERT&quot;</td><td>Windows Internet security invalid certificate error.</td></tr>
  <tr id="30237"><td><a href="#30237">30237</a></td><td>&quot;LOCERR_WIN_INTERNET_SERVER_UNREACHABLE&quot;</td><td>Windows Internet server unreachable error.</td></tr>
  </tbody>
  </table><!--kg-card-end: html--><p>You might be here if you&apos;re integrating an application with Qlik or encountering errors surfaced by the Qlik Engine API in your dashboards. You can use this guide to serve as a reference point for all the errors you may encounter in the Qlik world. &#xA0;The Qlik Engine API (or QIX) exposes a large API surface and returns errors that can sometimes feel a bit cryptic the first time you encounter them.</p><h2 id="what-is-the-qlik-engine-api">What is the Qlik Engine API?</h2><p>The Qlik Engine API, or QIX, is the JSON-RPC based API powering Qlik dashboards and integrations, and the interface you use to leverage Qlik&apos;s engine.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Qlik Download Sheet Extension]]></title><description><![CDATA[With ConnectReport’s Qlik extension, you can give users the ability to download an entire Qlik sheet into PDF, Excel, or PowerPoint.]]></description><link>https://connectreport.com/blog/qlik-download-sheet-extension/</link><guid isPermaLink="false">63229c6c837d0e0b15d95b84</guid><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Thu, 15 Sep 2022 03:39:33 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/09/Untitled--Twitter-Post-.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/09/Untitled--Twitter-Post-.png" alt="Qlik Download Sheet Extension"><p>The ConnectReport extension for Qlik opens up so many possibilities for users of your Qlik dashboards. Whether you need users to have the ability to download an entire sheet to a PDF, Excel or Powerpoint spreadsheet, subscribe to sheets, or deliver reports on-demand, the ConnectReport Qlik extension takes ConnectReport + Qlik to the next level. &#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/09/ezgif-5-a4512db081.gif" class="kg-image" alt="Qlik Download Sheet Extension" loading="lazy" width="600" height="463" srcset="https://connectreport.com/blog/content/images/2022/09/ezgif-5-a4512db081.gif 600w"><figcaption>Qlik Download Sheet Extension&#xA0;</figcaption></figure><p>The extension has support for Qlik Sense Enterprise and Qlik Cloud.</p><h2 id="how-it-works">How it works</h2><p>Once you download the extension, import it to your Qlik server. Depending on your version of Qlik, you need to do one the following:</p><ul><li>For Qlik Sense Enterprise, see <a href="https://help.qlik.com/en-US/sense-developer/April2020/Subsystems/Extensions/Content/Sense_Extensions/Howtos/deploy-extensions.htm">Importing visualizations in Qlik Sense Enterprise</a>.</li><li>For Qlik Cloud tenants, see <a href="https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/mc-extensions.htm">Managing extensions</a></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/09/Screen-Shot-2022-09-14-at-11.01.06-PM.png" class="kg-image" alt="Qlik Download Sheet Extension" loading="lazy" width="2000" height="1581" srcset="https://connectreport.com/blog/content/images/size/w600/2022/09/Screen-Shot-2022-09-14-at-11.01.06-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/09/Screen-Shot-2022-09-14-at-11.01.06-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/09/Screen-Shot-2022-09-14-at-11.01.06-PM.png 1600w, https://connectreport.com/blog/content/images/2022/09/Screen-Shot-2022-09-14-at-11.01.06-PM.png 2070w" sizes="(min-width: 720px) 720px"><figcaption>Qlik Sense Download Sheet Extension Configuration</figcaption></figure><p>Once installed, you can drop the extension onto any sheet in your environment. All you need to do is set the Server Base URL to the URL of your ConnectReport Server.</p><p>To use the extension to download a Qlik Sense sheet on-demand, users navigate to the dashboard and choose &#x201C;Download&#x201D;, and then choose a file formats. Behind the scenes, ConnectReport will run a report containing a reference to the sheet currently viewed on behalf of the user.</p><p>Everything the user sees in Qlik Sense carries over to the exported report. This includes section access security rules that limit the users view of the data, as well as any selections that the user has applied to the dashboard. The selection inheritance is quite a &#xA0;nice feature, since users can go in and select specific values in the dashboard and download a corresponding document for each.</p><h2 id="what%E2%80%99s-next">What&#x2019;s next</h2><p>Learn about the other awesome features of the ConnectReport Qlik integration.</p><h3 id="subscribe-to-sheets-in-qlik-sense">Subscribe to Sheets in Qlik Sense</h3><p>This feature allows users to subscribe to sheets directly from the dashboard. Users can select a frequency, whether they would like to receive the report via email, and more.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/09/ConnectReport-Subscribe.png" class="kg-image" alt="Qlik Download Sheet Extension" loading="lazy" width="1176" height="930" srcset="https://connectreport.com/blog/content/images/size/w600/2022/09/ConnectReport-Subscribe.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/09/ConnectReport-Subscribe.png 1000w, https://connectreport.com/blog/content/images/2022/09/ConnectReport-Subscribe.png 1176w" sizes="(min-width: 720px) 720px"><figcaption>Subscribe to Sheet in Qlik sense</figcaption></figure><p></p><h3 id="associate-sheets-with-connectreport-base-templates">Associate Sheets with ConnectReport Base Templates</h3><p>This feature will allow you to associate instances of the ConnectReport Qlik Sense extension with specific ConnectReport templates, allowing full control over the design of the resultant documents that users receive when they click &#x201C;Download&#x201D;. This could allow you to add simple things like a logo or footer text to the document, or achieve much more advanced full fledged multi-page reports.</p><h2 id="new-here">New here?</h2><p>Is this the first time you&#x2019;ve heard of ConnectReport? Learn more about how it works in our <a href="https://connectreport.com/quick-start.html">Quick Start guide</a>, or reach out to <a href="https://connectreport.com/request-a-demo.html">schedule a demo</a> with someone from our team.</p>]]></content:encoded></item><item><title><![CDATA[Qlik Sense + Nginx Reverse Proxy for Automatic, Free HTTPS Certificates]]></title><description><![CDATA[Learn how to configure Qlik Sense with SSL/TLS certificates using Nginx + Certbot to automatically provision and renew free SSL certificates. ]]></description><link>https://connectreport.com/blog/qlik-sense-nginx-reverse-proxy-for-automatic-free-https-certificates/</link><guid isPermaLink="false">6317bac2cc49881faf9fa3fe</guid><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Tue, 06 Sep 2022 21:27:57 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/09/Qlik-Sense---Nginx-Reverse-Proxy-for-Automatic--Free-HTTPS-Certificates.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/09/Qlik-Sense---Nginx-Reverse-Proxy-for-Automatic--Free-HTTPS-Certificates.png" alt="Qlik Sense + Nginx Reverse Proxy for Automatic, Free HTTPS Certificates"><p>If you&#x2019;re looking for a straightforward way to get automatically renewed HTTPS certificates for your Qlik Sense Enterprise server, Let&#x2019;s Encrypt + Nginx may be the way to go. This article provides configuration details on placing an <a href="https://www.nginx.com/">Nginx</a> reverse proxy in front of Qlik Sense Enterprise, plus automatic HTTPS certificate provisioning and renewal through Certbot.</p><p>In our own Qlik Sense deployments, we utilize LetsEncrypt&#x2019;s <a href="https://certbot.eff.org/">Certbot</a> &#xA0;to manage and renew TLS certificates for our Qlik Sense server and provide <a href="https://en.wikipedia.org/wiki/TLS_termination_proxy">TLS termination</a>. &#xA0;Certbot allows us to us to get free, trusted HTTPS certificates that automatically renew, and Nginx provides a nice, lightweight HTTPS proxy in front of Qlik Sense to manage this.</p><p>Others around the Qlik community have shared similar configuration steps, some that relied on Nginx Plus and others that were not up to date with the latest Qlik Sense Enterprise Version. Additionally, existing example did not use Nginx + Certbot for TLS termination as we do here. The configuration shared here is compatible with Qlik Sense Februrary 2021 and later.</p><h2 id="configuration-steps">Configuration steps:</h2><ul><li>Configure Nginx Reverse Proxy for Qlik Sense Enterprise</li><li>Test Qlik Sense Reverse Proxy Configuration</li><li>Deploy configuration</li><li>Configure Certbot for HTTPS in front of Qlik Sense</li><li>Test certificate auto renewal</li></ul><h2 id="configure-nginx-reverse-proxy-for-qlik-sense-enterprise">Configure Nginx Reverse Proxy for Qlik Sense Enterprise</h2><p>Assuming you have installed <a href="https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/">Nginx</a>, create a file in <code>etc/sites-enabled</code>. Conventionally, the name of this file should be the FQDN of the server, for example, <code>qs.mycompany.com</code>. Place the following content in the file</p><pre><code>map $http_x_real_ip $remote_ip {
  default $http_x_real_ip;
  &quot;&quot; $remote_addr;
}

# Websocket map for xns
#
map $http_upgrade $connection_upgrade {
  default upgrade;
  &apos;&apos; close;
}

# nginx server definition
server {
  server_name qs.example.com; # replace with your FQDN

  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;

    # X-Forwarded headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https; # We enforce HTTPS for all returns

    # Proxy specific variables
    proxy_redirect off;
    proxy_read_timeout 60m;
    proxy_send_timeout 60m;
    proxy_http_version 1.1;
    proxy_connect_timeout 5s;

    # Add support for websockets
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    # proxy_buffering should be on for all but very rare cases
    proxy_buffering on;

    # proxy_buffers should not exceed 63
    proxy_buffers 63 128k;
    proxy_buffer_size 128k;

    proxy_pass https://10.0.0.2; # Replace with Qlik Sense IP
  }

  # This location is needed for NTLM to work
  location /internal_windows_authentication/ {
    proxy_set_header Host $http_host;

    proxy_http_version 1.1;
    proxy_set_header Connection &apos;&apos;;

    proxy_pass https://10.0.0.2 # Replace with Qlik Sense IP;
  }
}
</code></pre><p>Note that for our scenario, <code>proxy_pass</code> was set to an internal URL to reach Qlik Sense within our VPC. This allows us to reduce hops between the proxy and Qlik Sense. </p><h2 id="test-qlik-sense-reverse-proxy-configuration">Test Qlik Sense Reverse Proxy Configuration</h2><p>A useful command for any Nginx administrator, <code>sudo nginx -t</code> will check your Nginx configuration for any errors. Run <code>sudo nginx -t</code> and validate your configuration is ok.</p><h2 id="deploy-configuration">Deploy configuration</h2><p>Once you&#x2019;ve validated the configuration, run <code>sudo service nginx reload</code> to reload the configuration.</p><h2 id="configure-certbot-for-https-in-front-of-qlik-sense">Configure Certbot for HTTPS in front of Qlik Sense</h2><p>Next we&#x2019;ll configure Certbot. Certbot handles provisioning and renewing HTTPS certificates automatically, and integrates directly with Nginx.</p><p>First, navigate to <a href="https://certbot.eff.org/">Certbot&#x2019;s home page</a> and choose &#x201C;Nginx&#x201D; and your server&#x2019;s operating system to get customized installation instructions for your environment.<br></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/09/Screen-Shot-2022-09-06-at-4.53.04-PM.png" class="kg-image" alt="Qlik Sense + Nginx Reverse Proxy for Automatic, Free HTTPS Certificates" loading="lazy" width="2000" height="1363" srcset="https://connectreport.com/blog/content/images/size/w600/2022/09/Screen-Shot-2022-09-06-at-4.53.04-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/09/Screen-Shot-2022-09-06-at-4.53.04-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/09/Screen-Shot-2022-09-06-at-4.53.04-PM.png 1600w, https://connectreport.com/blog/content/images/size/w2400/2022/09/Screen-Shot-2022-09-06-at-4.53.04-PM.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Certbot provides quick setup instructions based on your OS</figcaption></figure><p>Once installed, run <code>sudo certbot --nginx</code> . Certbot will detect your Qlik Sense server directives under the nginx configuration and walk you through the steps to provision the certificates, as well as give you the option to automatically update the Nginx configuration, which is recommended.</p><h2 id="test-certificate-auto-renewal">Test certificate auto renewal</h2><p>Before you exit your ssh session, validate that Certbot auto renewal will work as expected by running the following:</p><pre><code>sudo certbot renew --dry-run
</code></pre><p>Certbot issues certificates with a maximum expiry of 3 months from issuance. Before certificates expire, Certbot will automatically provision new TLS certificates for you.</p><h2 id="conclusion">Conclusion</h2><p>Certbot + Nginx is a fantastic tool to have in your toolbox for any administrator, and in today&#x2019;s web security landscape, HTTPS is essential. Reach out to us on <a href="https://www.linkedin.com/company/12636053/admin/">LinkedIn</a> if you have any questions!</p>]]></content:encoded></item><item><title><![CDATA[NPrinting Alternative for Qlik Sense]]></title><description><![CDATA[Meet the only 100% web based reporting solution built for modern BI, from a Qlik Technology Partner. ]]></description><link>https://connectreport.com/blog/nprinting-alternative/</link><guid isPermaLink="false">63017142cc49881faf9fa3c9</guid><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Sat, 20 Aug 2022 23:45:23 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/08/NPRINTING-ALTERNATIVE.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/08/NPRINTING-ALTERNATIVE.png" alt="NPrinting Alternative for Qlik Sense"><p>Looking for an <a href="https://www.qlik.com/us/products/nprinting">NPrinting</a> Alternative? We hear you. Desktop software dependencies, scalability issues, poor ease of use, API limitations, challenging report authoring experience &#x2014; we&#x2019;ve heard of it all.</p><p>ConnectReport is the only 100% web-based reporting and document generation platform with support for Qlik Sense. It has no dependency on desktop software, and allows even casual business users to create reports on Qlik Sense data directly from their browser. Unlike all the other tools, ConnectReport provides a live preview of reports as you work, and does not depend on expert-level knowledge of software or scripting languages to deliver documents on your Qlik Sense content. ConnectReport is trusted by the world&#x2019;s most advanced BI teams across Finance, Healthcare, Retail and other sectors to provide document automation capabilities on top of BI.</p><p>The truth is, we&#x2019;re not an NPrinting alternative &#x2014; we&#x2019;re the document automation platform that&#x2019;s built for modern BI. We may happen to cover 99% of what software like NPrinting can accomplish, but we didn&#x2019;t set out to build a product that maintained the status quo, we set out to rethink reporting for today&#x2019;s BI &amp; analytics landscape.</p><p>Today&#x2019;s data landscape is open, composable, user-friendly, and fast paced. You need vendor agnostic solutions with open APIs, self-service capability, and a modern technical architecture behind it.</p><p>ConnectReport is the platform independent solution that powers document generation at scale for today&#x2019;s data landscape. Regardless of your data source, ConnectReport enables you, and nearly anyone in your organization, to deliver insights across your business without the friction of traditional tooling.</p><p>Learn more about ConnectReport&#x2019;s disruptive self-service document generation model in the <a href="https://connectreport.com/platform.html">platform overview</a>. </p><h2 id="the-connectreport-difference">The ConnectReport Difference</h2><h3 id="self-service-reporting">Self-service reporting</h3><p>Traditional reporting depends on report developer with deep expertise to manage the entire document lifecycle. Reports originate within the reporting team, and any change requests depend on the team to turn around.</p><p>ConnectReport puts power into the hands of end-users. Anyone who has permissions to author reports can access the 100% browser-based self-service template editor. The template editor provides a live preview as users work.</p><p>ConnectReport also supports hybrid models of self-service + traditional reporting. Base templates can be configured to give users a kickstart on reports. &#xA0;Downstream users may work from base templates and make modifications to reports as needed, rather than being blocked by the reporting team.</p><figure class="kg-card kg-image-card"><img src="https://connectreport.com/blog/content/images/2022/08/explore.connectreport.com_template-editor_templateTitle-Category-20performance-templateId-fd54630b-d3f7-44be-ba96-e7c2e82077a1.png" class="kg-image" alt="NPrinting Alternative for Qlik Sense" loading="lazy" width="2000" height="1183" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/explore.connectreport.com_template-editor_templateTitle-Category-20performance-templateId-fd54630b-d3f7-44be-ba96-e7c2e82077a1.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/explore.connectreport.com_template-editor_templateTitle-Category-20performance-templateId-fd54630b-d3f7-44be-ba96-e7c2e82077a1.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/explore.connectreport.com_template-editor_templateTitle-Category-20performance-templateId-fd54630b-d3f7-44be-ba96-e7c2e82077a1.png 1600w, https://connectreport.com/blog/content/images/size/w2400/2022/08/explore.connectreport.com_template-editor_templateTitle-Category-20performance-templateId-fd54630b-d3f7-44be-ba96-e7c2e82077a1.png 2400w" sizes="(min-width: 720px) 720px"></figure><h3 id="simple-deployment-and-installation">Simple deployment and installation</h3><p>ConnectReport&#x2019;s deployment process is a fast and simple one-click installation process. Once installed, integration with Qlik Sense Cloud and Qlik Sense Enterprise is a straightforward, one-time process.</p><figure class="kg-card kg-image-card"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-19-at-6.31.06-PM.png" class="kg-image" alt="NPrinting Alternative for Qlik Sense" loading="lazy" width="1804" height="814" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-19-at-6.31.06-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-19-at-6.31.06-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-19-at-6.31.06-PM.png 1600w, https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-19-at-6.31.06-PM.png 1804w" sizes="(min-width: 720px) 720px"></figure><h3 id="governance-and-security">Governance and security</h3><p>Your data security model is inherited. ConnectReport accesses Qlik Sense data on behalf of Qlik Sense users, making section access rules carry directly over to the reporting experience.</p><p>In addition to inheriting data source security rules, ConnectReport also has its <a href="https://connectreport.com/support/about-user-roles/">own role-based access control</a>, audit logging, and extensive usage information available in the ConnectReport Management Console to indicate things like who is running reports, when, and on what data.</p><h3 id="template-editor-built-for-everyone">Template editor built for everyone</h3><p>Self-service, modern BI deserves a reporting experience that matches. &#xA0;ConnectReport&#x2019;s intuitive, web-based live template editor allows anyone comfortable working with data to build documents and reports right from their browser. Learn more about <a href="https://connectreport.com/support/create-a-template/">creating templates in ConnectReport</a> in the Getting Started Guide. </p><h3 id="powerful-qlik-sense-connector">Powerful Qlik Sense connector</h3><p>Our rich Qlik Sense connector deeply integrates with your Qlik Sense deployment. The Qlik Sense integration allows users to drag in master library items including dimensions, and measures, as well as work with data model tables and fields, and dashboard content like visualizations and sheets. In addition, our powerful data content image indexing system delivers instant previews of visualizations and sheets as soon as they are dragged into templates.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-19-at-6.41.06-PM-1.png" class="kg-image" alt="NPrinting Alternative for Qlik Sense" loading="lazy" width="2000" height="1332" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-19-at-6.41.06-PM-1.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-19-at-6.41.06-PM-1.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-19-at-6.41.06-PM-1.png 1600w, https://connectreport.com/blog/content/images/size/w2400/2022/08/Screen-Shot-2022-08-19-at-6.41.06-PM-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Editing a ConnectReport template connected to a Qlik Sense app&#xA0;</figcaption></figure><h3 id="reliability-scale-and-flexibility">Reliability, Scale and Flexibility</h3><p>ConnectReport leverages a modern, service oriented architecture built for massive scale enterprise document generation. Our product has been battle tested in some of the most complex and large scale data environments.</p><p>Modern IT and cloud teams appreciate ConnectReport&#x2019;s ability to support <a href="https://connectreport.com/support/unattended-installation/">unattended updates and deployments</a>, configuration through code and APIs, and flexible, stateless architecture. Read more about the <a href="https://connectreport.com/support/architecture-overview/">ConnectReport architecture here.</a></p><h3 id="open-apis-and-extensibility">Open APIs and Extensibility</h3><p>Nearly all of ConnectReport&#x2019;s core capabilities can be automated through its <a href="https://connectreport.com/developers.html">developer APIs</a>. The very same APIs that power the product&#x2019;s UI capabilities are available to developers to automate and leverage in their own applications. From template creation, to report scheduling, document distribution, and user and configuration management, ConnectReport delivers the building blocks needed to power document automation capabilities wherever they are needed and save teams time.</p>]]></content:encoded></item><item><title><![CDATA[10 Key Capabilities for Qlik Sense Reporting Tools]]></title><description><![CDATA[Read this before picking a Qlik Sense reporting tool. We analyze 10 key areas to look at when evaluating Qlik Sense reporting capabilities. ]]></description><link>https://connectreport.com/blog/10-key-capabilities-for-qlik-sense-reporting-tools/</link><guid isPermaLink="false">62fb2287cc49881faf9fa36c</guid><category><![CDATA[Reporting]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Tue, 16 Aug 2022 05:01:21 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/08/1-1.png" medium="image"/><content:encoded><![CDATA[<blockquote class="kg-blockquote-alt">We&#x2019;ve distilled Qlik Sense reporting requirements into 10 key areas to evaluate potential solutions on. Read on to uncover how 3 key solutions in the marketplace meet these capabilities. </blockquote><img src="https://connectreport.com/blog/content/images/2022/08/1-1.png" alt="10 Key Capabilities for Qlik Sense Reporting Tools"><p>There are many solutions out there to cover requirements for pixel-perfect reporting on Qlik Sense. From features already built-in to Qlik Sense, to Qlik-supported NPrinting, to powerful third-party products and NPrinting alternatives, there&#x2019;s a wide spectrum of reporting software to address the unique needs of every case and budget. Your use case for reporting may be a simple need for on-demand dashboard exports to PDF, or highly complex. Complex Qlik Sense reporting use cases might require integration with other applications, white-labeling, use of APIs and mashups, complex report formatting, or high-scale automated or scheduled report processing<em>.</em></p><p>Wherever your scenario lies, we break down how three different solutions fit into the 10 capability areas. The three solutions we evaluate are Qlik Sense built-in capabilities, Qlik NPrinting, and ConnectReport. From here, we&#x2019;ll dive into the pricing and license model for each solution.</p><h2 id="the-10-key-capabilities">The 10 Key Capabilities:</h2><p>Your needs in each area of capability will vary, depending on your workflow, resources, and other requirements and constraints. Before you dive into a &#xA0;solution, you should understand each of the capabilities and how the proposed solution stacks up. </p><ol><li><strong>Document formats:</strong> What export formats does the solution support? What is the level of effort required to perform exports?</li><li><strong>Report design</strong>: How are reports designed, and where? Who has the ability to design reports? Are there any formatting limitations? How challenging is it for the average business user to design a report?</li><li><strong>Scalability</strong>: What scalability expectations should you have of the solution? How quickly are reports executed? What are the available performance parameters to tune?</li><li><strong>Self-service reporting</strong>: Can end-users, customers, or staff create their own reports without the need for additional support or administrator level privileges? What level of autonomy does the solution provide end users?</li><li><strong>Ad-hoc reporting</strong>: Is it possible to create reports on the fly? Can ad-hoc reports be driven by an API? Can reporting templates be created on the fly?</li><li><strong>Scheduling</strong>: Does the solution offer scheduling? What intervals are available? Can reports be kicked off in response to events in other systems?</li><li><strong>Customer portal</strong>: How do downstream report consumers access reports? Does the solution offer a portal for report viewers? &#xA0;Can the portal be white-labeled or customized?</li><li><strong>Extensibility</strong>: Customization has its limitations. What capabilities are available for developers to extend the solution and embed its capabilities in other applications?</li><li><strong>Data security</strong>: What access control capabilities does the solution offer? How are reports filtered for different audiences? Does the solution allow you to inherit Qlik Sense section access rules?</li><li><strong>Governance and process management</strong>: Managing execution and delivery of tens of thousands of data-driven documents is complicated. What capabilities does the solution have to oversee bulk processes, and respond to errors or anomalies? Are audit logs generated? How are users and access control managed?</li></ol><h2 id="qlik-sense-built-in-reporting-capabilities">Qlik Sense Built-In Reporting Capabilities</h2><p>Qlik Sense offers built in features to address export requirements. What&#x2019;s great about these is that they don&#x2019;t require any additional software, but do note that they are quite limited.</p><p>If all you need is a simple one-off image, PDF, or CSV of a chart or table, Qlik Sense&#x2019;s built in capabilities may be useful to you.</p><h3 id="document-formats">Document formats</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-9.54.08-PM.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="2000" height="1306" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-15-at-9.54.08-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-15-at-9.54.08-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-15-at-9.54.08-PM.png 1600w, https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-9.54.08-PM.png 2064w" sizes="(min-width: 720px) 720px"><figcaption>Qlik Sense &#x2013; downloading from dashboard</figcaption></figure><p>Qlik Sense has the built in ability to export a given visualization or chart on a sheet as an image or PDF. &#xA0;There several limitations here:</p><ul><li>Only supports single objects: You cannot export an entire dashboard</li><li>No publicly documented API: This feature is only available through the Qlik Sense UI, so it cannot be automated</li></ul><p>Additionally, you can download the underlying data for a table or pivot table as CSV directly from a Qlik Sense dashboard. This is also only available through the Qlik Sense UI, and therefore cannot be automated through APIs or used in your external applications. </p><p>In terms of the other 9 capabilities, Qlik Sense&apos;s out of the box features do not really cover these. If all you need is exports, Qlik Sense may fit the bill, but for advanced static reporting use cases, you will need to look to other solutions. </p><h2 id="qlik-nprinting-reporting-capabilities">Qlik NPrinting Reporting Capabilities</h2><p>Qlik NPrinting serves a wide variety of enterprise reporting use-cases, but requires significant configuration, specialized knowledge, and integration. Qlik NPrinting is designed for centralized reporting scenarios where it is acceptable for report design to only be available to report developer staff &#x2014; it does not offer self-service report design capabilities.</p><p>Other limitations of NPrinting:</p><ul><li>Extensibility with NPrinting is limited. NPrinting APIs are primarily only designed to run on demand report generation requests. You cannot manage or create report templates from the APIs, schedule, or distribute to a customer portal.</li><li>NPrinting also has limited ad-hoc reporting capabilities. If you need to dynamically create reports on-the-fly, NPrinting may not be the right solution.</li><li>NPrinting&#x2019;s template editor is not self-service. It is designed for advanced report developers and depends on Windows-based desktop software.</li><li>Being a Qlik product, NPrinting only supports Qlik Sense and Qlik View as data sources. If you need to combine data from other sources in your reports, or potentially change your data source in the future, your reports are tied to Qlik.</li></ul><h3 id="document-formats-1">Document formats</h3><p>NPrinting allows you to deliver reports in many different formats including PDF, Word, PowerPoint, and Excel. Once a particular format for a report is chosen, however, it cannot be changed. This means that assets from Excel reports for example, are not usable in PowerPoint reports.</p><h3 id="report-design">Report design</h3><p>NPrinting offers several different ways to design reports. All reports design formats use the NPrinting template editor, which is desktop software. Report design is restricted to users who have installed the NPrinting desktop software and the NPrinting Developer role.</p><p>Overall, the NPrinting report designer is designed for advanced users and does not provide high levels of visual feedback. In many scenarios, templates contain code and it can be hard to understand what the final report will look like without running it.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-10.06.26-PM.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="2000" height="908" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-15-at-10.06.26-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-15-at-10.06.26-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-15-at-10.06.26-PM.png 1600w, https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-10.06.26-PM.png 2260w" sizes="(min-width: 720px) 720px"><figcaption>NPrinting &#x2013; Developing a report</figcaption></figure><p>NPrinting implements concepts of cycling, called Levels, that allow you to iterate through data and create sections in your reports pertaining to the level. &#xA0;When designing in the embedded Microsoft editors, you have all of the formatting capabilities available in the associated Microsoft software.</p><h3 id="scalability">Scalability</h3><p>NPrinting 20 improved the scalability of NPrinting. According to Qlik&#x2019;s benchmarks, NPrinting is capable of generating up to 40 reports per minute for a medium report on a 16-core server, and 13 reports per minute on a 4-core server. This close to linear scalability, but not quite.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-10.17.02-PM.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="1204" height="522" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-15-at-10.17.02-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-15-at-10.17.02-PM.png 1000w, https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-15-at-10.17.02-PM.png 1204w" sizes="(min-width: 720px) 720px"><figcaption>NPrinting Scalability - Source: Qlik</figcaption></figure><p>Some of NPrinting&#x2019;s scalability limitations come from the fact that is automates Microsoft office under the hood, which is not recommended by Microsoft:</p><blockquote>Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.</blockquote><p>Other solutions, such as ConnectReport, do not depend on automating Microsoft Office software and therefore achieve better stability.</p><h3 id="self-service-reporting">Self-service reporting</h3><p>Report design in NPrinting requires specialized expertise of NPrinting report development, and the NPrinting desktop software. Users who design reports must have the Developer role. NPrinting does not allow casual business users to create ad-hoc reports &#x2014; reports are usually designed by the analytics team and changes require requests to the team managing reporting. For this reason, NPrinting is not a self-service reporting tool.</p><h3 id="ad-hoc-reporting">Ad-hoc reporting</h3><p>Ad-hoc reporting generally allows users to pick specific columns or fields of a table, set some filter parameters, and get back a final document, perhaps in PDF or Excel. NPrinting does not support ad-hoc reporting. Templates must be created in the desktop NPrinting software and cannot be changed through APIs.</p><h3 id="report-scheduling">Report scheduling</h3><p>NPrinting supports distribution schedules, which allows developers to deliver reports on a given schedule. Schedules can be Once, Daily, Weekly, Monthly, or Annually, or immediately.</p><h3 id="customer-portal">Customer portal</h3><p>NPrinting offers NewsStand, a web portal where users can preview and download reports.</p><figure class="kg-card kg-image-card"><img src="https://connectreport.com/blog/content/images/2022/08/qlikview-nprinting-17-newsstand-6.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="1024" height="624" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/qlikview-nprinting-17-newsstand-6.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/qlikview-nprinting-17-newsstand-6.png 1000w, https://connectreport.com/blog/content/images/2022/08/qlikview-nprinting-17-newsstand-6.png 1024w" sizes="(min-width: 720px) 720px"></figure><p>NPrinting does not support webhooks or APIs to download previously published reports, so it is not possible to automatically retrieve scheduled reports and place them in external destinations such as OneDrive or Google Drive.</p><h3 id="extensibility">Extensibility</h3><p>NPrinting offers APIs that primarily allow you to manage and create on demand tasks. On-demand tasks result in a single report output, which can be downloaded by the user who created the task. NPrinting APIs do not allow you to schedule tasks, publish reports to specific users or a portal, or create / manage templates on the fly. Overall, NPrinting&#x2019;s extensibility features are limited if you need to drive it from APIs or embed its capabilities in your application.</p><h3 id="data-security">Data security</h3><p>As of NPrinting 20, NPrinting has the ability to inherit your Qlik Sense section access. It also offers role-based access control on top of this, to support access control within the NPrinting platform. NPrinting&#x2019;s access control allows you to create fine-grained custom roles.</p><h3 id="governance-and-process-management">Governance and process management</h3><p>NPrinting provides audit logging to allow you to trace who generated reports and when, authentication events, and more.<br>For task management, NPrinting offers a console to review task executions, but does not allow you to filter tasks by &#xA0;author, frequency, or start time parameters. It is also not possible to export the task execution table to CSV. NPrinting&#x2019;s report &#xA0;allow you to abort tasks.</p><h2 id="qlik-nprinting-pricing-and-license-model">Qlik NPrinting Pricing and License Model</h2><p>NPrinting is priced per engine, with an SMB tier and an unlimited tier. The SMB tier is limited to around 250 named recipient users and 2 developers, whereas the unlimited tier has no named recipient limitation. The unlimited tier has a base cost of around $30K USD and around $20K per additional engine. Additional engines allow you to scale NPrinting up.</p><h2 id="connectreport-qlik-sense-reporting-capabilities">ConnectReport Qlik Sense Reporting Capabilities</h2><p>ConnectReport serves complex enterprise reporting use cases, without requiring users to have specialized technical knowledge or comfort with code. The upfront integration effort of ConnectReport is small, but it&#x2019;s extensive and APIs and extensibility allow you to deeply integrate it with your applications.</p><p>Overall, ConnectReport is priced at a tier that may be too high for smaller internal use-cases, but if you are considering it as an alternative to products like NPrinting, it sticks out in a few areas:</p><ul><li>Self-service report design is possible with ConnectReport, due its web-based and user-friendly template editor. Reports do not require developers.</li><li>You can drive nearly all of ConnectReport&#x2019;s features through APIs, allowing for deep integrations with your applications and rich reporting experiences directly in your own platform.</li><li>Scalability wise, ConnectReport is better suited for high load use cases due to its modern, efficient architecture.</li><li>ConnectReport is vendor agnostic. If you decide to move your analytics to another data source, your static reports aren&#x2019;t tied to the vendor.</li></ul><h3 id="document-exports">Document exports</h3><p>ConnectReport allows you to create templates for all supported formats without deciding the final export format upfront. It supports pixel-perfect exports to Excel, PowerPoint, PDF, and CSV.</p><h3 id="report-design-1">Report design</h3><p>ConnectReport offers a web-based template editor. Users with the Author role in ConnectReport can access the ConnectReport template editor from their web browser &#x2014; there is no desktop software required. &#xA0;ConnectReport supports tables, dimensions, &#xA0;expressions, visualizations and sheets from Qlik Sense.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-16-at-3.37.05-AM.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="2000" height="1362" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-16-at-3.37.05-AM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-16-at-3.37.05-AM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-16-at-3.37.05-AM.png 1600w, https://connectreport.com/blog/content/images/size/w2400/2022/08/Screen-Shot-2022-08-16-at-3.37.05-AM.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>ConnectReport - End user designing a report from web browser</figcaption></figure><p>ConnectReport&#x2019;s &#xA0;template editor is designed to allow casual business users to create reports without significant training. It also provides a live preview as authors build out reports for visual feedback.</p><p>The ConnectReport template editor provides advanced capabilities report design, including page cycling and table grouping, without depending on Windows-based desktop software or expert technical knowledge.</p><h3 id="scalability-1">Scalability</h3><p>ConnectReport scales very well, and is capable of generating up to 90 reports per minute for a medium report on a 16-core server, and 15 reports per minute on a 4-core server. ConnectReport has extensive tuning options to control report and visualization concurrency, timeouts, and number of workers.</p><h3 id="self-service-reporting-1">Self-service reporting</h3><p>ConnectReport is designed to facilitate self-service reporting scenarios. Instead of a centralized model where reports can only be created or modified by advanced users on a reporting or IT team, ConnectReport compliments self-service BI, allowing anyone comfortable working with a tool like Qlik Sense to also create and distribute documents on Qlik Sense data. Because ConnectReport is entirely web based, there is no need to install and manage desktop software to support authoring. ConnectReport&#x2019;s template editor allows casual business users to quickly build documents on BI data without extensive training or code.</p><h3 id="ad-hoc-reporting-1">Ad-hoc reporting</h3><p>Ad-hoc reporting allows users to create reports on the fly, by specifying fields, filters and other parameters relevant to their intended output. Both through its web-based template editor and its APIs, ConnectReport allows users to create templates from on the-fly. From the template editor, users can quickly pull down the analytics they need into a document. Alternatively, ConnectReport&#x2019;s APIs can be used to power document generation.</p><p>Because ConnectReport&#x2019;s templates utilize HTML rather than a closed source format under the hood, it is possible to programmatically generate or modify templates according to user criteria set in an external application. This has allowed organizations to allow users to create ad-hoc reports by picking columns from a picklist within a line-of-business application, for example.</p><h3 id="report-scheduling-1">Report scheduling</h3><p>ConnectReport supports scheduled tasks, which allow users deliver reports on a given schedule. Schedules can be Once, Daily, Weekly, Monthly, or Annually, or immediately.</p><h3 id="customer-portal-1">Customer portal</h3><p>ConnectReport provides a report portal where users can navigate to retrieve reports that have been shared with them. The portal provides search, tagging, and the ability to view and download reports.</p><p>In addition to the portal, ConnectReport allows you to distribute reports to other destinations, such as Google Drive or OneDrive, through its webhooks and APIs.</p><h3 id="extensibility-1">Extensibility</h3><p>ConnectReport allows you to utilize nearly all of the APIs that power its product in your own applications, including creating report tasks, scheduling tasks, downloading generated reports, running on-demand tasks, managing users, and creating templates.</p><p>ConnectReport&#x2019;s APIs make it possible to run ad-hoc reports, expose scheduling capabilities in your applications, and bring lots of flexibility in terms of external system integration and embedded use cases. Overall, ConnectReport&#x2019;s API capabilities are powerful.</p><p>In addition to APIs, ConnectReport also offers &#x201C;callbacks&#x201D; &#x2014; also known as webhooks &#x2014; which can be used to respond to events happening within its system, including before and after a report task executes. You can use these to create custom behaviors, such as sending a user notification via a Slack message after a report published, or preventing a task from running if certain conditions aren&#x2019;t met.</p><h3 id="data-security-1">Data security</h3><p>ConnectReport inherits your Qlik Sense section access. In addition, it also has its own role-based access control enabling you to control which users can access templates, view reports, and perform administrative activities. ConnectReport&#x2019;s access control allows you to create fine-grained custom roles as well.</p><h3 id="governance-and-process-management-1">Governance and process management</h3><p>ConnectReport provides audit logging for all activities. Audit logs allow you to trace who ran particular report and when, authentication events, and more.<br>For task management, ConnectReport offers a console to review task executions, and find and triage any failures. It also allows you to filter tasks by owner, frequency, &#xA0;start time, end time, status, and other parameters. It is possible to export the report task list to CSV. &#xA0;Overall, ConnectReport&#x2019;s task management has solid task management fit for managing even very large workloads.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/08/Screen-Shot-2022-08-16-at-4.13.55-AM.png" class="kg-image" alt="10 Key Capabilities for Qlik Sense Reporting Tools" loading="lazy" width="2000" height="1052" srcset="https://connectreport.com/blog/content/images/size/w600/2022/08/Screen-Shot-2022-08-16-at-4.13.55-AM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/08/Screen-Shot-2022-08-16-at-4.13.55-AM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/08/Screen-Shot-2022-08-16-at-4.13.55-AM.png 1600w, https://connectreport.com/blog/content/images/size/w2400/2022/08/Screen-Shot-2022-08-16-at-4.13.55-AM.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>ConnectReport - Content Administrator task management UI</figcaption></figure><h2 id="connectreport-pricing-and-license-model">ConnectReport Pricing and License Model</h2><p>ConnectReport is priced either per-user or per-CPU core. The starting tier allows you to utilize unlimited cores for up up 25 users. &#xA0;In the per core model, you get unlimited users and reports, and there is a base fee as well as a cost for each additional 4 CPU cores.</p><h2 id="summary">Summary</h2><p>There are several great reporting solutions available for Qlik Sense, each with its own strengths and weaknesses across the 10 key capabilities. Qlik Sense&#x2019;s built-in reporting capabilities are limited but do not require any additional software. Qlik NPrinting is designed for centralized reporting scenarios where it is acceptable for report design to only be available to report developer staff. ConnectReport is the vendor agnostic solution that serves complex enterprise reporting use cases, without requiring users to have specialized technical knowledge or comfort with code. The upfront integration effort of ConnectReport is small, but it&#x2019;s extensive and APIs and extensibility allow you to deeply integrate it with your applications.</p>]]></content:encoded></item><item><title><![CDATA[Tuning HTTP Keep-Alive in Node.js]]></title><description><![CDATA[We suffered some difficult to track down ECONNRESET errors in our Node.js proxy service until we learned a lot about HTTP persistent connections and Node.js HTTP defaults.]]></description><link>https://connectreport.com/blog/tuning-http-keep-alive-in-node-js/</link><guid isPermaLink="false">61e9fddacc49881faf9fa27f</guid><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Fri, 21 Jan 2022 01:29:08 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/08/Tuning-HTTP-Keep-Alive.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/08/Tuning-HTTP-Keep-Alive.png" alt="Tuning HTTP Keep-Alive in Node.js"><p>We suffered some difficult to track down <code>ECONNRESET</code> errors in our Node.js proxy service until we learned a lot about HTTP persistent connections and Node.js HTTP defaults.</p><p>By default, HTTP creates a new TCP connection for every request. &#xA0;<a href="https://en.wikipedia.org/wiki/HTTP_persistent_connection">HTTP keep-alive</a> allows HTTP clients to re-use connections for multiple requests, and relies on timeout configurations on both the client and target server to decide when to close open TCP sockets. </p><p>In Node.js clients, you can use a module like <code><a href="https://www.npmjs.com/package/agentkeepalive">agentkeepalive</a></code> to tell your HTTP/HTTPS clients to use persistent HTTP connections. </p><p>In ConnectReport, we have a proxy service that acts as the gateway to all requests across our different services, with targets including our management API and our core server. We utilize <code><a href="https://www.npmjs.com/package/agentkeepalive">agentkeepalive</a></code> in our proxy service to reduce latency in connections from the proxy to the targets, but have periodically experienced <code>ECONNRESET</code> errors thrown by our proxy service. The <code>ECONNRESET</code> errors were fairly rare, occurring in about 1/1000 requests. Reproducing these elusive errors was nearly impossible, and we only really understood how they were being thrown once we did a deep dive into how HTTP persistent connections work. </p><h2 id="http-persistent-connections-in-a-nutshell">HTTP persistent connections in a nutshell </h2><p>Under the hood, HTTP persistent connections utilize OS level sockets. In general, clients will configure a limited number of sockets and a connection timeout. If nothing gets sent down the socket for the duration of the timeout, the socket for the connection is closed. On the other end of the client is the target server that the connection is calling, and the target server may have its own keep alive timeout. In Node.js, the <a href="https://nodejs.org/api/http.html#serverkeepalivetimeout">keep alive timeout is 5 seconds by default</a>. Node.js also has a <a href="https://nodejs.org/api/http.html#serverheaderstimeout">headers timeout</a> (which should be ~1s greater than the keep alive timeout), which contributes to the persistent connection timeout behavior. </p><h2 id="502-errors-and-their-sources-in-your-application">502 Errors and their sources in your application</h2><p>What happens in the real world (and for our product) is that the default timeout of the widely used <code>agentkeepalive</code> was 15 seconds &#x2013; much longer than the Node.js timeout of 5 seconds. How does this look in practice? </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/01/HTTP-Keep-Alive-502.drawio--1-.png" class="kg-image" alt="Tuning HTTP Keep-Alive in Node.js" loading="lazy" width="1922" height="584" srcset="https://connectreport.com/blog/content/images/size/w600/2022/01/HTTP-Keep-Alive-502.drawio--1-.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/01/HTTP-Keep-Alive-502.drawio--1-.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/01/HTTP-Keep-Alive-502.drawio--1-.png 1600w, https://connectreport.com/blog/content/images/2022/01/HTTP-Keep-Alive-502.drawio--1-.png 1922w" sizes="(min-width: 720px) 720px"><figcaption>Failed HTTP Keep-Alive connection</figcaption></figure><p>What&apos;s happens in the above:</p><ol><li>Client requests a resource from the proxy</li><li>Proxy opens a reusable TCP socket to the target application with a 15 second timeout </li><li>Request is sent down the socket to the target application, and a successful response comes back</li><li>More than 5 seconds later, no requests have hit the target application, so the application closes the socket. </li><li>The proxy receives another request and believes it has an open connection that it can use. It re-uses a reference to the same TCP socket as before, &#xA0;but the socket on the end of the target application is actually closed. </li><li>The proxy sends the requests down a dead socket and Node.js throws an <code>ECONNRESET</code> </li><li>The proxy responds to the client with a <code>502 Bad Gateway</code> error. &#xA0;</li></ol><h2 id="getting-around-econnreset">Getting around ECONNRESET</h2><p>The solution to the dead socket issue is for your client to have a shorter socket timeout than the target. If your target has a 5 second timeout, and your client has a 4 second timeout, the client will never try to send a request down a dead socket. If your client has a larger timeout than the target, at some point, the client will think it has an open socket that is actually dead. </p><p>In response to reports on this issue, <code>agentkeepalive</code> maintainers have smartly (and finally) decided to <a href="https://github.com/node-modules/agentkeepalive/pull/102">set the default freeSocketTimeout to 4 seconds</a> in version 4.2.0 of <code>agentkeepalive</code>, released on December 30th 2020. </p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text"><strong>Tip</strong>: Target server HTTP keep alive timeouts must always be greater than client timeouts to prevent sending requests to closed sockets.</div></div><p>If you&apos;re looking to use longer timeouts, or you&apos;re using a version of <code>agentkeepalive</code> earlier than 4.2.0, you can &#xA0;edit your Node.js app default timeouts to be larger as follows: </p><!--kg-card-begin: markdown--><pre><code>const express = require(&quot;express&quot;);
const http = require(&quot;http&quot;);
const app = express();

const server = http.createServer({}, app).listen(3000);

// This is the important stuff
server.keepAliveTimeout = (60 * 1000) + 1000;
server.headersTimeout = (60 * 1000) + 2000;
</code></pre>
<!--kg-card-end: markdown--><h2 id="notes-on-aws-elb-502s-with-nodejs-servers">Notes on AWS ELB 502&apos;s with Node.js servers </h2><p>If you&apos;re using ELB to point traffic at your Node.js apps as we are, you should know that is has a default keep alive timeout of 60s, which is greater than the Node.js default of 5s, which will cause your ELB to have intermittent 502 errors. </p><p>You should edit your load balancer &quot;Idle timeout&quot; attribute to 4 seconds to be compatible with Node.js defaults. &#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-20-at-8.19.48-PM.png" class="kg-image" alt="Tuning HTTP Keep-Alive in Node.js" loading="lazy" width="1718" height="800" srcset="https://connectreport.com/blog/content/images/size/w600/2022/01/Screen-Shot-2022-01-20-at-8.19.48-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/01/Screen-Shot-2022-01-20-at-8.19.48-PM.png 1000w, https://connectreport.com/blog/content/images/size/w1600/2022/01/Screen-Shot-2022-01-20-at-8.19.48-PM.png 1600w, https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-20-at-8.19.48-PM.png 1718w" sizes="(min-width: 720px) 720px"><figcaption>Edit your ELB attributes to set the idle timeout to something compatible with Node.js</figcaption></figure><p>Alternatively, you can edit the timeouts on your target Node.js app as indicated in the previous section. </p><p></p>]]></content:encoded></item><item><title><![CDATA[ConnectReport’s pixel-perfect reporting platform is now available for Sisense]]></title><description><![CDATA[<p>We are excited to announce the availability of Sisense as a supported data source in ConnectReport.</p><p>ConnectReport is a leader in delivering modern pixel-perfect reporting to address the most sophisticated and complex use-cases around paginated reporting. ConnectReport&#x2019;s platform eliminates the complexity of delivering scheduled and ad-hoc reports on</p>]]></description><link>https://connectreport.com/blog/connectreports-pixel-perfect-reporting-platform-is-now-available-for-sisense/</link><guid isPermaLink="false">61d8bc1f1b2a0e142f64a971</guid><category><![CDATA[Product Announcements]]></category><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Fri, 07 Jan 2022 22:28:58 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/01/connectreport-sisense-integration.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/01/connectreport-sisense-integration.jpg" alt="ConnectReport&#x2019;s pixel-perfect reporting platform is now available for Sisense"><p>We are excited to announce the availability of Sisense as a supported data source in ConnectReport.</p><p>ConnectReport is a leader in delivering modern pixel-perfect reporting to address the most sophisticated and complex use-cases around paginated reporting. ConnectReport&#x2019;s platform eliminates the complexity of delivering scheduled and ad-hoc reports on your data through its extensible, API driven solution, and is used to process tens of thousands of reports per month in &#xA0;some of the most highly regulated and security sensitive business environments.</p><p>ConnectReport&#x2019;s capabilities are now available to organizations who are using <a href="https://www.sisense.com/">Sisense</a> as their analytics solution. Sisense&#x2019;s low-latency, in-chip analytics provide organizations a highly performant, embeddable solution to analytics that we have seen provide our customers immense value and flexibility.</p><h2 id="how-we-integrated-sisense">How we integrated Sisense</h2><p>Adding support for Sisense meant that we had the opportunity to improve our abstracted data connection layer, called ZeroConn, to make it easier to add additional integrations in the future.</p><p>ConnectReport was built from the ground up to support any data platform. In front of all underlying data connections is socket-based API that we use to translate messages from the ConnectReport reporting engine into something each data platform understands. We then take the response from the data source and shape it into the correctly formatted ConnectReport response. This is what ZeroConn takes care of behind the scenes.</p><p>Adding Sisense put ZeroConn to the test and proved our ability to enforce user-based data platform security rules, retrieve complex tabular data, apply filters, and generate richly formatted multi-page reports with our product regardless of the data source.</p><p>Sisense provides rich, predictable APIs that played very well with our expectations and facilitated a fast implementation.</p>]]></content:encoded></item><item><title><![CDATA[The first spreadsheets existed 4,600 years ago]]></title><description><![CDATA[The disdain for the favorite tool of bureaucrats and business professionals may span millennia, beginning in ancient Egypt.]]></description><link>https://connectreport.com/blog/the-first-spreadsheets/</link><guid isPermaLink="false">61d8b0a21b2a0e142f64a932</guid><dc:creator><![CDATA[ConnectReport Team]]></dc:creator><pubDate>Fri, 07 Jan 2022 21:35:15 GMT</pubDate><media:content url="https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-07-at-3.37.40-PM-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-07-at-3.37.40-PM-1.png" alt="The first spreadsheets existed 4,600 years ago"><p>During the reign of Khufu in Egypt nearly 5,000 years ago, spreadsheets written on papyrus or engraved in limestone were used as the ancient reporting solution. Ancients administrators were extremely organized, keeping up-to-date, highly structured documentation of their projects.</p><p>Archeologists from the University Paris-Sorbonne and the French Institute in Cairo discovered an ancient harbor complex on the Red Sea coast at Wadi al-Jarf in 2008. At the time, it was one of the most complete and oldest port sites discovered in the world. In the excavation, they discovered extremely detailed tabulated records &#x2013; some spanning 50cm long &#x2013; related to the construction of the Great Pyramid of Giza, the sailing routes of ancient Egypt, and the logistics of delivering food to and supplies to wharf workers.</p><p>What did these ancient spreadsheets look like, and who wrote them? &#xA0;The most notable document was a personal logbook by a middle ranking official, an inspector called Merer. The Diary of Merer contains a detailed daily account, spanning several months, of the activities involved in the construction of the Great Pyramid. It is organized as a timetable with months and seasons going across the top and two columns per day. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-07-at-3.58.53-PM.png" class="kg-image" alt="The first spreadsheets existed 4,600 years ago" loading="lazy" width="1530" height="810" srcset="https://connectreport.com/blog/content/images/size/w600/2022/01/Screen-Shot-2022-01-07-at-3.58.53-PM.png 600w, https://connectreport.com/blog/content/images/size/w1000/2022/01/Screen-Shot-2022-01-07-at-3.58.53-PM.png 1000w, https://connectreport.com/blog/content/images/2022/01/Screen-Shot-2022-01-07-at-3.58.53-PM.png 1530w" sizes="(min-width: 720px) 720px"><figcaption>The first spreadsheets? Photographs by G. Pollin and P. Tallet. <a href="https://www.jstor.org/stable/10.5615/neareastarch.77.1.0004">Source</a></figcaption></figure><p>The document contains details illustrating the complexity and sophisticated organization involved in getting fleets to deliver massive limestone from quarries to the Great Pyramid construction site. From the most intact sections of the diary, archeologists determined that these limestone shipments occurred roughly every ten days and may have delivered nearly 30 blocks of limestone at 2-3 tonnes each (about 200 blocks per month).</p><p>Although some of may dread opening up Excel, it looks like even the ancients can attest to the value we find in crunching our numbers into spreadsheets nearly 5,000 years later.</p><p>Hopefully your reporting processes aren&apos;t feeling as primitive as the ancients after reading this. Regardless, we&#x2019;d love to help you take them to the future. <a href="https://connectreport.com">ConnectReport</a> helps companies automate the creation of &#xA0;pixel perfect reports, excel spreadsheets, and PDFs on nearly any data source.</p>]]></content:encoded></item></channel></rss>