4 Replies Latest reply: Apr 23, 2017 6:46 AM by Bill Markham RSS

    Our sense app suffering from performance issues. Is there a way to Delay or Prioritize certain chart calculations over another?

    Vishnu Chakravaram

      Hello All,

       

      Here's our issue: We have an app in our QS Production environment . It's 500 MB. There are close to 60 users using the app concurrently. The app has some severe performance issues. Our environment is 24 core processors @ 2.5 Ghz, 512 GB RAM (I believe this to be accurate)

       

      We've run sample tests using dot net sdk to get CPU Usage characteristics.  We found that some charts are taking more time to load and are consuming lot of CPU (sometimes 2400%!!).

       

      WE FOUND THAT QLIK IS NOT USING ALL CORES TO FULL EXTENT (MULTIPLE THREADING...) REAL BUMMER!!!

       

      So, My question is there a way to delay the calculations ? Maybe using now() function and putting a conditional clause in data handling option.

       

      BTW.. In QlikView num(now()) gives continuously changing value, not in QlikSense though (bummer again.)

       

      You’re help will be really appreciated. Our IT dept is open to the suggestion of increasing the number of CPU’s or increasing the RAM available. But I’m skeptical as the available cores are not being utilized to the fullest extent.

       

      P.S – All our variables (about 1100) are being brought in through a text file using the include keyword.

      We have about 150 unused fields.


      hicmtorobert_mikarwunderlich

       

        • Re: Our sense app suffering from performance issues. Is there a way to Delay or Prioritize certain chart calculations over another?
          Rob Wunderlich

          If you are seeing lots of single threading, my first suspicion would be expressions that use field from more than one table. For example:

           

          sum(Quantity * UnitPrice)

           

          will show lots of single threading if Quantity and UnitPrice are in two different tables.  Whereas the calc should be multi-threaded if both fields are in the same table.

           

          Also: All those variables you are bringing in. Do many of then contain leading "="?

           

          -Rob

          http://masterssummit.com

          http://qlikviewcookbook.com

            • Re: Our sense app suffering from performance issues. Is there a way to Delay or Prioritize certain chart calculations over another?
              Vishnu Chakravaram

              Rob,

               

              Thanks for your response.

               

              Yes most of our variables have a leading '='. May I know how it can affect performance?

               

               

              Here's one of the variable below: (All this is one formula.. My eyes balled out the first time I saw this!. But most of the variables are not as big as this . They're about half as long. )

               

              //------------------------------------------------------------

               

              Set vcallplanadherence =

              if(getSelectedCount([Territory Display Name])>=1,

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_terr)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}QTD_APPORTIONED_PDE)),1),0),0.001),

               

              if(getSelectedCount([Area Name])>=1,

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_dist)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,[Market Description]=,

              [Switch From Product]=,[Week End Date]=,[Month End Date]=>}QTD_APPORTIONED_PDE)),1),0),0.001),

               

              if(getSelectedCount([Region Name])>=1,

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_dist)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}

              QTD_APPORTIONED_PDE)),1),0),0.001),

               

              if((getSelectedCount([Team Name]) or getSelectedCount([Team Alignment])>=1) and GetSelectedCount([Zone Name])>=1,

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_reg)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,[Market Description]=,

              [Switch From Product]=,[Week End Date]=,[Month End Date]=>}QTD_APPORTIONED_PDE)),1),0),0.001),

               

              if(getSelectedCount([Zone Name])>=1,

              if([Team Name]='Total DSP' or [Team Alignment]='SP',

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Team Name]={'Total DSP'},

              [Family Group Description]={'Dummy'},[Time Filter]=,[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Team Name]={'Total DSP'},[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_area_tm_dsp)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Team Name]={'Total DSP'},

              [Time Filter]=,[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}

              QTD_APPORTIONED_PDE)),1),0),0.001),

              if([Team Name]='Total DPC' or [Team Alignment]='PC',

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Team Name]={'Total DPC'},[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Team Name]={'Total DPC'},[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}num_qtd_area_tm_dpc)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Team Name]={'Total DPC'},[Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=>}

              QTD_APPORTIONED_PDE)),1),0),0.001))),

               

              round(if(sum({<SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=,[Team Alignment]=,[Team Name]=>}QTD_APPORTIONED_PDE)>0,

              rangemin((sum({< SRC={'CALL_ACT'},[Product Group Plan]=,[Product]=,flag_wk={'1'},[Execution Time Index]={'1'},[Family Group Description]={'Dummy'},[Time Filter]=,

              [Market Description]=,[Switch From Product]=,[Week End Date]=,[Month End Date]=,[Team Alignment]=,[Team Name]=>}num_qtd_area)/

              sum({< SRC={'CALL_ACT'},[Product Group Plan]=,flag_wk={'1'},[Execution Time Index]={'1'},[Product]=,[Family Group Description]={'Dummy'},[Time Filter]=,[Market Description]=,[Switch From Product]=,

              [Week End Date]=,[Month End Date]=,[Team Alignment]=,[Team Name]=>}QTD_APPORTIONED_PDE)),1),0),0.001))))));

            • Re: Our sense app suffering from performance issues. Is there a way to Delay or Prioritize certain chart calculations over another?
              Bill Markham

              I have a general rule of thumb that if the expressions in a Qlik app are getting too complicated then the data model needs attention.  The expression you have posted I would describe as too complicated - so I'd suggest looking at whether there is scope for improvement within the data model.