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

Technical

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
cancel
Showing results for 
Search instead for 
Did you mean: 

Analytics & AI

Forums for Qlik Analytic solutions. Ask questions, join discussions, find solutions, and access documentation and resources.

Data Integration & Quality

Forums for Qlik Data Integration solutions. Ask questions, join discussions, find solutions, and access documentation and resources

Explore Qlik Gallery

Qlik Gallery is meant to encourage Qlikkies everywhere to share their progress – from a first Qlik app – to a favorite Qlik app – and everything in-between.

Support

Chat with us, search Knowledge, open a Qlik or Talend Case, read the latest Updates Blog, find Release Notes, and learn about our Programs.

Events

Learn about upcoming Qlik related events, webinars and local meetups.

Groups

Join a Group that is right for you and get more out of your collaborations. Some groups are closed. Closed Groups require approval to view and participate.

Qlik Community

Get started on Qlik Community, find How-To documents, and join general non-product related discussions.

Blogs

This space offers a variety of blogs, all written by Qlik employees. Product and non product related.

Qlik Resources

Direct links to other resources within the Qlik ecosystem. We suggest you bookmark this page.

Qlik Academic Program

Qlik gives qualified university students, educators, and researchers free Qlik software and resources to prepare students for the data-driven workplace.

Community Sitemap

Here you will find a list of all the Qlik Community forums.

Recent Blog Posts

  • qlik-productblogs.jpg
    blog

    Community News

    Qlik Community Mobile App for Apple Devices is Now Available

    Hello Qlik Community Members, We are happy to announce the launch of our new Qlik Community Mobile Application for Apple users. With this new mobile a... Show More

    apple mobile app icon.jpg


    Hello Qlik Community Members,

    We are happy to announce the launch of our new Qlik Community Mobile Application for Apple users. With this new mobile app you will be able to monitor content that’s the most important to you, post and update content and collaborate with other members when not at your computer. This is particularly helpful when you are travelling, have some free time in between activities or just want to stay informed.

    Please access our detailed instructions document titled: Qlik Community Mobile App for Apple Devices FAQ’s  for download/installation and best practices.


    You can also visit the Qlik Community Mobile App for Apple Devices launch announcement thread to see member’s reviews and feedback and share your own.

    Best Regards,

    The Qlik Community Management Team

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    The Qlik engine - A Forgiving Engine

      Databases are usually not very forgiving. Strict rules apply, defining what’s allowed and what’s not. For example, you are not allowed to enter data... Show More

     

    Databases are usually not very forgiving.

    Strict rules apply, defining what’s allowed and what’s not. For example, you are not allowed to enter data unless it has the right data type and is formatted the right way. Further, you are often not allowed to enter a value for a foreign key unless this value already exists in the master table. And you are not allowed to enter the same value twice if the field is a primary key.

    The reason is of course to ensure data integrity. Without such rules, the database would soon be cluttered with bad quality data and contain a large number of errors.

    The fact is that a good system is one that has a large number of rules, but at the same time is easy to use: Equipped with a user interface designed in a way so that the user doesn’t notice the rules – or at least isn’t disturbed by them.

    But with the Qlik engine it is a very different situation.

    QlikView and Qlik Sense should not make sure that the data is free from errors. Instead, they should do exactly the opposite: Display the source data along with all its errors. This requirement is totally different from the demands you have on a database, and as a result the Qlik engine is built in a different way:

     

    No Data Types.pngData Types

    There are no data types in the Qlik engine. The reason is simple: You may have data from different tables or even from different data sources in one single field. Then there is a potential risk that you have different data types in the different sources.

    When loaded, all fields are converted into duals (number and text, or just text), and so one field can contain data that originally had different types.

     

    Mixed Formats.pngFormatting

    A single field can have a mixed data format. Also here, the reason is simple: Different sources may have different formats. As a result, it doesn’t matter if a date is formatted as 3/31/16, 2016-03-31 or 42460. They will all three represent March 31, 2016.

    Each distinct field value has its own format, and a single field may thus be displayed with different formats.

     

    No Referential Integrity.pngReferential integrity

    The Qlik engine does not enforce referential integrity. For example: You may have a customer ID in your fact table that does not exist in the customer table (which would be an error in the data integrity of the database). But the Qlik engine will accept this and show NULL as customer name.

     

    Assume Many To Many.pngRelationship type

    Often you know if you have a many-to-one or a many-to-many relationship between two entities. But this information is not loaded from the database. Instead the Qlik engine assumes worst case and is always prepared for a many-to-many relationship.

    Links between tables don’t carry information about relationship type. And all calculations involve aggregations, since there is a possibility for multiple values of the referenced field.

    The bottom line is that the Qlik engine is a very forgiving engine. It handles errors in all of the above cases gracefully. No matter how many such errors you have in the data, the Qlik engine will always make a best-effort attempt in evaluating and showing the loaded data.

    HIC

     

    Further reading related to this topic:

    Data Types in QlikView

    Automatic Number Interpretation

    It’s all Aggregations

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    What is a QlikView session?

    This is not easy to answer, so let me walk you through the flow in QlikView and talk about the life of the different sessions in QlikView.Let’s start ... Show More

    This is not easy to answer, so let me walk you through the flow in QlikView and talk about the life of the different sessions in QlikView.

    Let’s start at the browser. The most common way of maintaining a session in the web layer is session cookies. Session cookies is a small set of information that the browser will send with every request in a session. Session cookies is also what QlikView uses to maintain the web layer sessions. So once authenticated, QlikView knows who you are and will assign a random set of characters, stored in a session cookie in the browser, to identify your future requests to QlikView.

    The session cookie will identify your requests until you either log out or your session times out from inactivity.

    The web session is the first session you will encounter using QlikView. The second session is the QlikView server session.

    Session.png

    So what is a QlikView server session? Think of the QlikView server session as the place where QlikView keeps track of what you are doing in a document. The session is identified by a user’s access to one document. As you click in the document, your state will be recorded in the session. Your session is maintained in memory while you are active in the document and a bit longer. When a QlikView server session times out, the state is written to disc. If you come back to the same document later you can continue exploring at the same place you left off.

    So when are the different sessions used?

    If you use the AJAX client, both sessions are used. If you lose your web session you will have to re-authenticate to get a new session and if the QlikView server session times out you will have to reconnect.

    Reconnect4.png

    If you use the thick client or the plugin, these talk directly to the QlikView server and therefore only use QlikView Server sessions.

    The timeouts can be configured: the timeout configuration you do in the QMC is related to the QlikView Session; whereas the timeout values for the web session only are configurable in the local configuration file for the web server.

    So now you know how sessions are used in QlikView. Even though this is not directly related to security, it will help you understand concepts like load balancing, web tickets and authentication in QlikView.

    I hope you found this information useful, if you have any other subjects related to security that you like me to write about please leave a comment.

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    QlikView 12 - please stand up

    It was back in April at Qonnections, our 10th global partner conference that we unveiled Qlik Sense 2.0 and shared our platform strategy with the worl... Show More

    It was back in April at Qonnections, our 10th global partner conference that we unveiled Qlik Sense 2.0 and shared our platform strategy with the world.  It was also the first time we talked in detail about our plans for QlikView 12. Today I’m delighted to be able to share the news that it’s arrived! QlikView 12 will you please stand up and show yourself to the world!


    There is no doubt that this is an eagerly awaited release by many of our 37,000 strong global customer base. But why? QlikView is a very mature product, it's functionally rich, and it’s undoubtedly in my opinion the product that revolutionized business intelligence and ultimately created the global data discovery market as we know it today. So what is so important about QlikView 12?


    An investment in QlikView 12 is an investment in Qlik


    With QlikView 12, Qlik delivers on its commitment to its proven, market-leading data discovery solution which secures our customers long term investment in the product.  It also lays the foundation for our customers to partner with Qlik to build out their business intelligence strategies and meet the expanding needs of their BI consumers by addressing multiple use cases through a unique platform approach to visual analytics.


    QlikView 12 now runs on the second generation QIX (Qlik Data Indexing) engine that powers the entire Qlik portfolio. With this improvement, we can more easily help customers address new use cases in Qlik Sense by allowing them to share data models across the platform. 


    Our investments also benefit the way our customers use QlikView today. QlikView 12 delivers a number of deployment, performance, security and connectivity enhancements along with greater accessibility through enhanced mobile touch-enabled capabilities. In addition QlikView customers will be able to now take advantage of Qlik’s strategy to deliver value added cloud services – such as Qlik’s “Data as a Service” offering, Qlik DataMarket.


    (If you want to see some of this in action check out this brief presentation)


    QlikView 12 - What's New Presentation


    QlikView - REST Connector

    QlikView - Qlik Data Market


    Put simply, QlikView is a business intelligence solution with an unrivaled pedigree, functional richness and delivers the lowest cost of ownership in the market. Many customers have already delivered robust guided analytics and dashboards to knowledge workers across their organizations, and with QlikView 12, that investment is secured. 


    Regards,


    Michael Tarallo

    Senior Product Marketing Manager

    Qlik

    @mtarallo - follow me



    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Scaling Visual Analytics with Qlik Sense

    Hello Qlik Community, in this post our resident guest blogger and Principal Enterprise Architect, Marcus Spitzmiller, introduces us to visual analyitc... Show More

    marcus.png


    Hello Qlik Community, in this post our resident guest blogger and Principal Enterprise Architect, Marcus Spitzmiller, introduces us to visual analyitcs scaling. Marcus is a member of the Qlik Enterprise Architecture team focusing on enterprise deployments and best practices.  His areas of expertise include scalability and performance, deployment best practices, integration, and security.

    Scaling Visual Analytics

    When we talk about scalability, it is often centered around data volumes, users, and the technology behind a given product. However, one should also consider the capabilities that a product provides which enable broad deployment and governance within an organization. It is within this context that we will look at Qlik Sense. Of course, data volumes and users matter too, so if you have a few moments, check out the Qlik Sense Performance Benchmark for that.

    Instead of detailing everything in this blog I created a video presentation on this topic. In this video, we will look at Qlik Sense from the standpoint of four main topics that allow you to scale your visual analytics initiatives:

    • Delivery – Qlik Sense’s platform approach to visual analytics enables authoring, self-service, and consumption with the patterns that fit to your organization, not the other way around.
    • Security  - Qlik Sense’s “attribute based access control” (ABAC) security model enables role and attribute based administration of the resources and content within Qlik Sense.
    • Administration – Qlik Sense’s default, customizable, and delegated roles and out of the box monitoring enable simple and scalable administration.
    • Infrastructure – Qlik Sense’s powerful In-Memory, Associative Data Indexing Engine and distributed architecture enables physical, virtual, and cloud based deployments with best in class performance.

    Organizations are continually faced with market pressures to make decisions more quickly.  The Qlik Sense platform enables visual analytics to be widely deployed within an organization so people have access to their data, with security and governance, and at scale.

    Watch or download (.mp4) this video to learn more:

    Show Less
  • qlik-productblogs.jpg
    blog

    Qlik Learning

    Why PowerPoint is Killing Corporate Education!

    Save corporate education from death by PowerPoint!"PowerPoint should be used to aid the learning with visualizing key topics that are hard to depict i... Show More

    Save corporate education from death by PowerPoint!

    "PowerPoint should be used to aid the learning with visualizing key topics that are hard to depict in other ways.  A PowerPoint deck would make a good instructor manual, but let the instructor manage the class and tell the story and keep it interactive.  Keep everything tied to the learning objectives, but do not script out the entire course"  Kevin Hanegan, Qlik Vice President of Knowledge and Learning.

    To read more and learn what top six things to AVOID in PowerPoint, visit Why PowerPoint is Killing Corporate Education | Qlik

    Bored.PNG

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    AND and OR

      In the Qlik engine, the logic of the selections is always an OR between selections in the same field, and an AND between selections in different fi... Show More

     

    In the Qlik engine, the logic of the selections is always an OR between selections in the same field, and an AND between selections in different fields. Selecting e.g. two products and one customer is very much like the WHERE clause in the following SELECT statement:

         SELECT … WHERE (Product='Cap' OR Product ='Tracksuit') AND Customer='ACME' ;

    Under some special circumstances, you can however use something called AND-mode. Read more about it in Jennell’s excellent blog post: AND-Mode. With AND-mode you can select two different products and find the customers that bought both.

    Image2.png

     

    However, the AND-mode logic is quite different from a standard AND operator in a WHERE clause: And it does not work at all the same way as OR-logic. There are theoretical implications that do not exist for OR logic.

    For example: If you select two products and demand an OR between them, the possible values of all other fields are immediately determined: Any field value implied by either of the products is marked as “possible”.

    But if you instead demand an AND between them, it is not clear what you mean: Do you mean “Customers” that have bought both products, or do you mean “Months” when both products have been sold? Or do you mean “Countries” where both products have been sold? Just specifying the two products is not enough to determine a result. You also need to specify the field that the AND-mode refers to.

    The example shows that the AND-mode demands an intermediate iterator: The AND-mode always infers a second field for which the AND-logic is relevant. This is a theoretical problem that has nothing to do with how the logic is implemented in the software.

    Let’s look at SQL: In a standard SELECT statement, the conditions on either side of the AND operator almost always concern two different fields. It would not make sense to demand

         SELECT … WHERE Product='Cap' AND Product ='Tracksuit' ;

    since there are no individual records that fulfill that requirement: "Product" can only have one value at the time. But this is exactly the type of requirement that you have in AND-mode - but operating on a group of records instead of on a single record.

    If you would implement something similar to AND-mode in SQL, you would need to join a table with a copy of itself. The following will pick out customers that have bought both a Cap and a Tracksuit:

         SELECT DISTINCT Customer FROM Orders AS Orders1

         INNER JOIN Orders AS Orders2 ON Orders1.Customer=Orders2.Customer

         WHERE Orders1.Product='Cap' AND Orders2.Product='Tracksuit'

    Again, an intermediate iterator is needed: Here it is "Customer" - the field used to join the two tables.

    In QlikView we have chosen to solve this problem by demanding a two-column table for AND-mode, where the first column defines the iterator (e.g. Customer), and the second is the field where the user makes the AND selection (e.g. Product).

    So, the two-column table is not just an arbitrary limitation; it is instead a framework implied by the theoretical problem.

    HIC

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    How To Improve Your Design Process Working With Qlikview

    I've been a designer for about 10 years, 8 of which I've been designing web sites. The fancy buzz-word way of saying you work on websites is to say th... Show More

    I've been a designer for about 10 years, 8 of which I've been designing web sites. The fancy buzz-word way of saying you work on websites is to say that you work in "User Experience Design." The user experience is how someone (a user) might interact with something (a website, an ATM, or in this case QlikView). You consider what troubles a user might encounter, what might be helpful, how they will accomplish certain tasks, etc. From Amazon to Zappos, User Experience Design is the (not so) secret ingredient that separates the bad experiences from great experiences with loyal customers.

    So what makes User Experience Design work? One of the keys is to be empathetic, to put yourself in the shoes of the user and design for them and not yourself. You design for and with others, that is you don't do it alone. Designers are just one group of people who take a website from conception to completion. Information Architects, Writers, Designers, Developers, and Usability Engineers all contribute to the process. People with specialized disciplines doing what they do best to make great experiences. If you aren't lucky enough to have a team of bright UX professionals, it probably means you will have to become a "jack of all trades" and take on all of these roles yourself.

    Never fear. As a guide I've written the attached Technical Paper that walks you through how you can apply the iterative UX waterfall design process to developing QlikView applications. There is a lot of overlap between designing a website and designing a QlikView application because at the heart of both is the user experience. Designing for what is best for the user is key no matter what the final product.

    Next Steps? Start small. I would recommend trying these ideas on a smaller, easier project first and then apply what works for you to larger projects over time.

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Capabilities API error on exporting data

    Working on one of our projects, the requirement was to export the object data. It seems though, 2.1 does not let you do that. I used both: app.getObje... Show More

    Working on one of our projects, the requirement was to export the object data. It seems though, 2.1 does not let you do that. I used both:

    app.getObject(value, value).then(function(model){

    model.exportData()

    and

    qlik.table(model).exportData({download: true})

    Both of them returned error

    Object {code: 403, parameter: "REST HTTP error", message: "Forbidden"}

    Until this bug is fixed, I have created a workaround. A new directive that will handle the export by accepting Dimensions and Measures, passing them to the api service.  This is for every Hypercube we want to create which is also for the objects like stacked bar chart that 2.1 does not have the ability to export yet. I believe this is fixed in 2.2 though!

    We will use the template from Creating a website with Angular and the Capabilities API.

    In controllers/dashboard.js add the Dimensions and Measures for export

      $scope.export = [

      {

         headers:['Case Owner Group', 'Avg Case Duration'],

         data:[['Case Owner Group'], ["Avg([Case Duration Time])"]]

      }

      ];

    In the views/dashboard.html add a button that will use the new directive

    <button class="btn btn-default pull-right" export-to-csv data="export[0].data" headers="export[0].headers" title="'myFileName'">Export</button>

    git: https://github.com/yianni-ververis/capabilities-api-angular-template

    Branch: Qlik Branch

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Qlik Sense 2.2 - It just keeps getting better and better

    What?!?! Another release? Come on! I thought this year's Superbowl ads were creative, but Puppy, Monkey, Baby was definitely something to see, but...t... Show More

    What?!?! Another release? Come on!


    I thought this year's Superbowl ads were creative, but Puppy, Monkey, Baby was definitely something to see, but...this is even better. zf0ew.jpg


    Seriously, welcome to the Qlik Community and thank you for taking a brief moment to learn what's new in Qlik Sense 2.2.

    We’ve done it again! Qlik Sense 2.2
    Powerful enhancements for both business users and developers

    In the past year and a half, we have continued to deliver product innovation at an impressive cadence. Delivering true decision support system and business intelligence software with our platform approach...yep, it's more than just a tool.


    By keeping our promise to deliver three new releases every year, Qlik has proven it’s ability to deliver as an organization thereby ensuring that our customers have continuous access to an ever increasing set of capabilities.  It is important to recognize however that these new capabilities extend well beyond what most people see in the product.  At Qlik, we are just as committed to delivering value to the developer community as we are to business users.

    Delivering capability for both the end user and the developer is critical to support our platform approach.  This is because enabling one shared common platform that supports all business intelligence and analytics use cases (click to watch) is the key to seeing the whole story that lives in your data. Not only are we innovating faster than ever but our extensive open APIs ensure that others can innovate right along with us thereby multiplying the power of the platform approach.

    Qlik Sense 2.2 enables business users to more freely prepare and explore data, and provides developers new, powerful tools for building custom applications and extending Qlik Sense. 


    Here are some of the highlights:


    • Advanced data preparation
      • automatic date handling, calculated fields, and a newly redesigned data manager
    • Alternate dimensions and measures
      • user can swap measures and dimensions int he same chart to answer many questions
    • Powerful new developer APIs and capabilities
      • new app integration API
      • visualization API for programmatic creation of analytics
      • new integrated developer environment (IDE) plugin for Visual Studio
    • Expanded printing and exporting capabilities for stories and charts to PowerPoint, .PDF, and Excel
    • Numerous user experience and enterprise management improvements

    You can learn more and see these features in action here:

    Then learn how to use some of these great new features on the Qlik Help Channel Playlist: What's new in Qlik Sense 2.2 - YouTube

    Enjoy guys - please feel free to leave me your comments and questions, we love to hear from you.

    Regards,

    Mike Tarallo

    Senior Product Marketing Manager

    Qlik

    Follow Me: @mtarallo

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Full Accumulation example

    During the last days we have been working in a new visualization piece that will be live soon in The Telegraph website. We got some data with daily re... Show More

    During the last days we have been working in a new visualization piece that will be live soon in The Telegraph website. We got some data with daily refugees arrivals to different countries, the goal was to visualize how many people have moved across Europe during the last few months in a map, but we also wanted to plot a line/area chart with the cumulative number of arrivals per country and per day so you can see trends and evolution over time. Our data set included daily data but it didn't contain cumulative numbers so we had to calculate them.


    The calculation should be something like this:


    chart1.jpg

    If is the first row or country is different than previous row country, then load the field value, else load the field value plus same field previous row value.

    Step 1 Data Load

    Start by loading our data table with the daily arrival values by country.

    //Load the main table

    DataLoad:

    LOAD

        "Date",

        Country,

        "Daily Estimated Arrivals"

    FROM [lib://LibraryName/Data.qvd] (qvd);

    The generated table will look like the picture below:

    chart2.png

    As you can notice the data is not sorted in a way that will let me successfully calculate the new field as I designed it because it will mix data from different countries, so my next move will be to sort the table by country and date.

    Step 2 Sorting the table

    //Sorting the table

    SortLoad:

    NoConcatenate Load

      "Date",

        Country,

        "Daily Estimated Arrivals"

    Resident DataLoad

    Order by Country, Date;

    Drop table DataLoad; //Deletes the previous table no longer needed

    Because I’m using a Resident Load statement to load and sort the values from the previous table, and both tables have identical field sets, I need to specify NoConcatenate before the load, otherwise both tables will be automatically concatenated. Using ‘Order By’ clause will sort the table by Country and then by Date. Finally, because the first table DataLoad will be no longer needed I’ll delete it using Drop Table.

    My new table will be as in the picture below

    chart3.png

    Step 3 Adding the calculated new field

    Now that we have the data table ready we can finally calculate the new field to the table containing the cumulative daily estimated arrivals. To do so we will use the peek and previous script functions. Both functions are similar but they have some key differences that you should learn, please don’t miss this blog post:  Peek vs Previous: when to use each

    //Add cumulative data to the table

    CummulativeLoad:

    NoConcatenate Load

        "Date",

        Country,

        "Daily Estimated Arrivals",

        If(RowNo()=1 Or Country<>Previous(Country),

              "Daily Estimated Arrivals",

              "Daily Estimated Arrivals" +  Peek("Cumulative Daily Estimated Arrivals", RowNo()-2))

        as "Cumulative Daily Estimated Arrivals"

    Resident SortLoad;

    Drop table SortLoad; //Deletes the previous table no longer needed

    chart4.png

    Click on the image below to see how we created the new field to match with our calculation statement.

    expression.jpg

    The final result will be a data table containing the fields to support both daily and cumulative charts.

    result.gif

    Enjoy Qliking!

    AMZ

    (Note: I divided this example in 3 steps so hopefully it is clearer, but step 2 and 3 can be merged in one single step)

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Alternate States and Capability APIs

    Here are some useful topics related to alternate states and the Capability APIsCreating Alternate StatesCreating an alternate state with the Capabilit... Show More

    Here are some useful topics related to alternate states and the Capability APIs

    Creating Alternate States

    Creating an alternate state with the Capability APIs is easy. Just do the following

    app.addAlternateState('StateName');

    Alternate states created through the Capability APIs can be saved in the app or created every session. If you try to add an alternate state that already exists though, you may get some unexpected behavior. That's why I would recommend using something like the following when adding an alternate state:

    app.getAppLayout(function(layout) {

         if(layout.qStateNames.indexOf('StateName') === -1) {

              app.addAlternateState('StateName');

         }

    });

    This will check to make sure the alternate state doesn't already exist before adding it to the app.

    Alternate States and Session Objects

    For session objects, such as lists and hypercubes, it's super easy to assign them to an alternate state. All you need to do is include the 'qStateName' parameter in your object definition. Below is an example of a list object that fetches 10 rows from the field 'SomeField', and is assigned to the state 'StateName'.

    app.createList({

        'qDef': {

            'qFieldDefs': ['SomeField'],

        },

        'qInitialDataFetch': [

            {

                'qHeight': 10

            }

        ],

        'qStateName': 'StateName'

    }, function(reply){});

    Alternate States and Qlik Sense Objects

    You can't assign a Qlik Sense object directly to an alternate state, but with a bit of set analysis, you can make an object respond to selections on an alternate state. Let's take, for example, a measure that is simply the sum of some field name, and add the set analysis needed to make it respond to selections on an alternate state.

    Sum( {$< FieldName = P( {StateName} FieldName ) >} FieldName)

    Making Selections on Alternate States

    Making selections on alternate states is as simple as passing an extra parameter to the Field API methods. Example below

    app.field('FieldName', 'StateName').select([0], false, false);

    The above example would select the first row in the "FieldName" field, on state "StateName". The important part of the above is the second parameter to the app.field() method. Utilizing that second paramter, you can apply just about any method in the Field API to an alternate state.

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    How I used Aggr() and Above() in a KPI Object

    I ran into an interesting dilemma last week when trying to create a measure for a KPI object in Qlik Sense.  Let me set the scene.  I was working on a... Show More

    I ran into an interesting dilemma last week when trying to create a measure for a KPI object in Qlik Sense.  Let me set the scene.  I was working on an app that tracks organization members and activities.  The requirement was to look at the number of members in the organization over time and identify the largest and lowest monthly gain and loss.  I was able to build the table below to see how the number of members varied over time and where the largest gain and loss were.  The largest gain was from Nov 2015 to Dec 2015 with a 15.91% member increase.  The largest loss was Sept 2015 to Oct 2015 with -48.88% member decrease.

    table.png

    The measures for this table looked like this:

     

    Number of Members – count the number of distinct members

    num members.png

     

    Difference – count the difference between this month and the previous month using the Above() function to capture the previous month’s number of members

    num measure.png

     

    Variance – show the difference as a percentage

    percent measure.png

    Now here is where my dilemma began.  I needed to capture the percentage and number of the gains and losses in a KPI object and I was not sure how to do that.  I knew there had to be a way to do it in Qlik Sense so I turned to my colleague Arturo Munoz who enlightened me to the fact that when I use the Aggr() function, it creates a temporary staged result set, like a table, similar to what I was doing in the table above.  So I tried this out in a KPI object using the Variance expressions above and aggregating the results by MonthYear.  Since I wanted the largest gain and loss, I also used the Max() and Min() functions.  Here is what my KPI measures looked like when I was done:

     

    Largest Gain %

    max.png

    kpi max.png

    Largest Loss %

    min.png

    kpi min.png

    I was able to use the Above() function in my KPI measure to get the variance and then I aggregated the result by MonthYear and captured the maximum and minimum variance.  I was able to apply this to my app for other KPIs as well.  It was brilliant.  I never thought that I could use the Above() function outside of a Table object but I was very happy to find out I was wrong.  In order for the Aggr() function to work as I expected, I needed to make sure the MonthYear field was sorted properly in ascending order so I handled this in my script.  Note that if the MonthYear field was not in ascending order, the Above() function may not always return the previous month thus returning the wrong results.

     

    Henric Cronstrom has blogged about the Aggr() function in his blog Aggregations and Function Classes as has Adam Bellerby in his AGGR... blog.  The Aggr() function can be quite helpful and while I have gotten use to using it, I realized that there are still so many other ways it can be used.  I hope you find this way of using it as helpful as I did.

     

    Thanks,

    Jennell

    Show Less
  • qlik-productblogs.jpg
    blog

    Qlik Learning

    New Course Available: Reporting with QlikView® NPrinting

    The Reporting with QlikView NPrinting course is based on QlikView NPrinting v17. This course is intended for business users and business analysts who ... Show More

    NPrinting.png

    The Reporting with QlikView NPrinting course is based on QlikView NPrinting v17. This course is intended for business users and business analysts who need to be able to build and distribute static reports from QlikView. The course will cover the generation of reports based on (multiple) QlikView applications, options for distribution to users and groups, and scheduling options.

    Please note that this course is only suitable for those wishing to learn specifically about the features of QlikView NPrinting v17. This course is not compatible with earlier versions QlikView NPrinting.

    How Can You Learn NPrinting?

    Visit http://inter.viewcentral.com/reg/qlik/ReportQVNPrinting to register today!

    Show Less
  • qlik-productblogs.jpg
    blog

    Qlik Learning

    Training That Cuts To The Chase

    For most of us, information that is not put to action quickly is simply forgotten.  If the information is not practical or relevant immediately to you... Show More

    clock.PNG

    For most of us, information that is not put to action quickly is simply forgotten.  If the information is not practical or relevant immediately to your job, chances are, you won’t remember it.  The solution to this is what is known as “just-in-time” learning. Just-in-time learning can provide you with all the training you need, right at your fingertips, through a self-service learning platform.

    Here are a few situations where the learner would benefit from just-in-time learning.

    • Keeping up with new product features
    • Spacing out your learning
    • Refreshing your knowledge
    • Learning task-based solutions

    To read the full blog visit Training That Cuts To The Chase | Qlik and don't forget to check out the our self-service learning platform Qlik Continuous Classroom.

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Enhancing the User Experience Using Conditional Expressions

    As QlikView developers, one of our main focuses is on the user experience. There are many instances where objects only need to be shown upon the user’... Show More

    As QlikView developers, one of our main focuses is on the user experience. There are many instances where objects only need to be shown upon the user’s request. An example of this is list boxes (filters). With the use of conditional expressions, a QlikView developer can make the list boxes available when the user needs them.

    I have seen too many applications where list boxes take up most of the design area available to the developer. Invariably you get the same response, “It is what the users want”. And while I am sure they “need” all of the list boxes, they just do not need them on the screen the entire time.  So how do you get around this demand for list boxes? Create a “Filters” button and have the user show and hide the list boxes whenever they want.

    For this first example, I will reference the Workforce Management demo. On the dashboard below there are no visible list boxes. The lack of list boxes opens up more space to the developer. Instead of making the list boxes available at all times, we have a Filters button which, when invoked, will display the filters over top of the visualizations. Once the user makes the appropriate selections, he/she can close the filter panel and continue with his/her discovery.  This is done by setting a variable and conditionally showing the objects based on the current value of the variable. The beauty of this approach is that the user gets to have the filters that he/she needs and the developer does not lose any display area.

    Here you can see the filter button with a conditional show. When invoked, there is an action to change the variable to 1 which makes the filters button disappear and makes the filter objects appear.

    ShowFilters1.png

    ShowFiltersScreenshot1.png

    All of the filter objects have the same show conditional. When the user selects the close button, the variable is changed back to 0 which makes the filter objects disappear and the Filters button reappear.

    ShowFilters2.png

    ShowFiltersScreenshot2.png

    This approach can also be used if you need to show/hide help/information pop-ups as shown here in the IT Asset Management demo.

    InfoScreenshot1.png

    InfoScreenshot2.png

    If you would like to see how the filter and the help/information buttons were developed, the QVWs can be downloaded from the demo site. As was stated earlier, the filter example referenced the Workforce Management demo and the Help/Info button referenced the IT Asset Management demo. Happy Qliking!

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Accumulations

      When building analytical applications you very often encounter cases where you want to accumulate numbers inside a chart. It could be that you want ... Show More

     

    When building analytical applications you very often encounter cases where you want to accumulate numbers inside a chart. It could be that you want to calculate a Year-to-date number, or a rolling 6 month average, or a moving annual total.

    When creating an accumulation, there are two fundamental challenges. First, there is the question on how to treat dimensional values with no data. The tables below illustrate the problem:

    Missing month.png

    In this example, there is no data for the month of March. The default behaviour is that this row then is omitted, see left table. This leads to an incorrect accumulation – the rolling 3 total for April includes January, which it shouldn’t. The table to the right however treats missing months correctly.

    Secondly, there is the question on how to treat the first dimension when there are several dimensions. The tables below illustrate the problem:

    First dimension.png

    In the left table, you want the accumulation to re-start for each new product. You do not want the accumulation to continue from the previous product. Note that for ‘2014 Jan’ the accumulation is reset.

    But in the right table, it is the other way around: A moving annual total should span over two calendar years, so you want the accumulation to continue over into a new value of the first dimension.

    In QlikView and Qlik Sense there are several ways to create accumulations, each with its own pros and cons.

    1. Using the control in QlikView charts

    In a QlikView chart, you can easily create an accumulation just by selecting the right chart setting:

    Chart UI accumulation.png

    This method will however fail both the above challenges. Also, an accumulation can only be made over the first dimension, and the accumulation will always be reset for a new value in the second dimension.

    Further, you cannot use it to calculate moving averages. It only works for calculations of sums.

    2. Using the Above() function

    If you use the Above() function in a chart table like

         RangeSum(Above(total Sum(Amount) , 0, 12))

    or in an Aggr() table like

         Only(Aggr(RangeSum(Above(total Sum({Amount),0,12)), YearMonth))

    you will get a 12-month moving total. It will pass the “multiple dimensions” challenge: By using – or not using – the total specifier in the Above() function you can decide which behaviour you want.

    But it will fail the “no data” challenge. There is a however a way to make an accumulation in an Aggr() table work also for this problem: Trick the QIX engine to show all rows by adding a zero term for all dimensional values:

         Only(Aggr(RangeSum(Above(totalSum(Amount) + Sum({1} 0),0,12)), YearMonth))

    and enable the display of zero values. Then you will get the right numbers also when some dimensional values are excluded.

    3. Using an As-Of table in the data model

    The As-Of table, is an excellent solution that will pass both challenges. Here you must set the condition using Set Analysis:

         Sum({$<MonthDiff={"<12"}>} Amount)

    However, it has one drawback: When a user clicks in the chart, a selection will be made in the AsOfMonth. But you don’t want the user to make selections here: You want month selections to be made in the real month field. So I usually make my charts read-only if they use the AsOfMonth as dimension.

    With this, I hope that you understand accumulations better.

    HIC

     

    Further reading related to this topic:

    The Above Function

    The As-Of Table

    Calculating rolling n-period totals, averages or other aggregations

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    RecNo or RowNo?

    Do you know the difference between the RecNo() and the RowNo() functions?  You may think that you can use these interchangeably to count the records o... Show More

    Do you know the difference between the RecNo() and the RowNo() functions?  You may think that you can use these interchangeably to count the records or rows in a table but these functions differ slightly.  The RecNo() function will return an integer for the record currently being read from the source table starting with number one.  The RowNo() function also returns an integer but it represents the position of the row in the resulting QlikView internal table.  So while RecNo() counts from the source table, RowNo() counts from the resulting table.

    In the script below the fields from the Temp table are loaded along with fields to represent the RecNo and the RowNo.  A Where clause is used to load all records where Number does not equal 3.

    script.png

    The resulting table below shows the results of this script.  In the RecNo field we see values 1 through 10 excluding 3.  This is because the script excluded records where Number = 3 so while that record was read, it was excluded from the results.  In the RowNo field we see values 1 through 9 for the position of each row in the results table.  The fact that some rows were excluded does not affect the RowNo field because we are only looking at the internal table that is created.  The RecNo field indicated the order in which the records were read from the source table and the RowNo field indicates the positon of the record in the internal table.

    table.png

    To see an example, check out my technical brief that includes the QVW and detailed descriptions of these functions.  In the technical brief, I also discuss the IterNo() function and the FieldValueCount() functions.

    Jennell

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    Text searches

    One of the strengths of QlikView is its search engine. With it, you can find pieces of information in a fraction of a second and select the found fiel... Show More

    One of the strengths of QlikView is its search engine. With it, you can find pieces of information in a fraction of a second and select the found field values. The response is immediate, which is necessary for the user experience. Without it, you would easily get an empty result set without understanding why.

     

    Search strings can be made in many different ways, and QlikView will respond differently depending on how the search string is defined. Normally you just enter a text, and QlikView will match this against the beginning of the words in the field values. If several strings are entered, QlikView will return the union of the matches of each of the strings.

     

    search multi.png

     

    But if you instead use a wildcard in your search string, the evaluation of the search string will be made in a different way: the entire search string with the wild card will be matched against the entire field value, sometimes yielding more matches, sometimes fewer.

     

    search h.png

     

    If you want to create more complex search strings (and e.g. store them in actions or bookmarks) you can do this too. Just use (, |, & and double quotes to define the syntax.

     

    search compound.png

     

    In all the above cases, the search and the selection are made in one and the same field. But sometimes you want to make the selection in one field, but make the search in another. This can be done using the associated search, which is an indirect search method. Start with the field where you want to make the selection, enter the search string, and click on the small chevron to the right. You will then get a list of other fields containing this search string. By clicking the desired match, you will narrow down the number of matches in the primary list to show just the relevant values. You can then make your selection by hitting Enter.

     

    search indir.png

     

    Further, did you know that

    • In the user preferences and in the list box properties, you can define how a default search string should be created, but this does not affect how it is evaluated – only how it is created. Once created, you can add or remove wild cards as you please.
    • When you make a search and save the resulting selection in a bookmark, the bookmark will contain the search string and not the list of selected values. When the bookmark is applied, it will perform the search and select the found values. If data has changed, this may imply a different search result than before.
    • You can use the same search string in many places: In list boxes, in Set analysis, in the Advanced search dialog, in actions and in bookmarks.

     

    Bottom line: The search string is a powerful tool that helps you find the values you want. Use it.

     

    HIC

     

    Further reading related to this topic:

    Search - But what shall you find?

    The Search String

    The Expression Search

    Show Less
  • qlik-productblogs.jpg
    blog

    Design

    A few templates

    Recently, I put together three simple templates for use in the dev hub. Check out where to find them and more below.Blank Bootstrap TemplateThe "Blank... Show More

    Recently, I put together three simple templates for use in the dev hub. Check out where to find them and more below.

    Blank Bootstrap Template

    The "Blank Bootstrap Template" download and installation instructions can be found at Qlik Branch - Blank Bootstrap Template. This template is simply a blank template, with boilerplate html, css, and javascript for creating a webapp or mashup using the Qlik Capability APIs. The template loads Bootstrap for you, and takes care of some conflicting css issues between bootstrap and the css used for the Capability API.  If you'd like to build your own web app or mashup and use bootstrap, this is a good place to start.

    Bootstrap Tabs Template

    The "Bootstrap Tabs Template" download and installation instructions can be found at Qlik Branch - Bootstrap Tabs Template. This template builds on the blank bootstrap template, and includes bootstrap tabs and qvplaceholders so you can easily drag and drop objects and create a mashup or web app from an existing Qlik Sense app within minutes. A demo can be found here, and a video demo is below.

    Video Link : 3972

    Bootstrap Off-canvas Menu Template

    The "Bootstrap off-canvas menu template" download and installation instructions can be found at Qlik Branch - Bootstrap off-canvas menu template. This template also builds on the blank bootstrap template, and includes a very simple off-canvas menu so you can stash a filter pane or anything else you'd like in an off-canvas menu, as well as qvplaceholders, allowing you to quickly create a web app or mashup from an existing Qlik Sense app within minutes. A demo can be found here.

    Show Less