<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Script Dynamic Sub Totals in QlikView</title>
    <link>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297140#M618796</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I attach the excel file here...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 29 Mar 2017 03:01:14 GMT</pubDate>
    <dc:creator>hector_munoz</dc:creator>
    <dc:date>2017-03-29T03:01:14Z</dc:date>
    <item>
      <title>Script Dynamic Sub Totals</title>
      <link>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297138#M618794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello --&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am working on a dashboard that will help us plan for our data and backup storage requirements for the IT group. They want to be able to forecast how much backup storage will be required specifically based on the data retention they enter. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am having trouble getting this to work correctly and I feel what I need is a way within Qlik script to be able to sub-total the last X rows based on a variable field. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a data table that provides some information about the systems being backed up. It contains the amount of storage they presently have, their rate of growth per day, and some other information regarding data compression and deduplication for backup.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid rgb(0, 0, 0); width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Node&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Base Disk Size GB&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Change Rate %&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;Backup Start&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;Compression Ratio&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Daily Retention&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;350&lt;/TD&gt;&lt;TD&gt;10%&lt;/TD&gt;&lt;TD&gt;4/1/2017&lt;/TD&gt;&lt;TD&gt;50%&lt;/TD&gt;&lt;TD&gt;5 &lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;9%&lt;/TD&gt;&lt;TD&gt;4/1/2017&lt;/TD&gt;&lt;TD&gt;48%&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From this information I can start to make some calculations. &lt;/P&gt;&lt;P&gt;First, I create a table filling in a growth expectation for the data based on 10% change looking 365 days into the future.&lt;/P&gt;&lt;P&gt;For each of those days, I have created a backup counter that creates an incremental backup of the base disk with growth and apply compression. I end up with a table that looks something like this. (I made up the numbers for the example)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid rgb(0, 0, 0); width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Node&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Base Disk&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Base Disk Growth&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;Date&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Backup Size&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Retention Day&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;Days to Retain&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/2/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;17&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/3/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;18.7&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/4/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;19&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/5/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;20&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/6/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;21&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;371&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/7/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;20&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;371&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/8/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;21&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;2&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;371&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/9/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;22&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;3&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;371&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/10/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;22.5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;371&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/11/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;23.5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px;"&gt;A&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;350&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;394&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;4/12/2017&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;23&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px;"&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you can see in the example, the backup size will growth as the base disk grows over time - however they only want to subtotal the amount of data that would be retained per their policy &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So in the instance, I would like to subtotal in script the last X rows (using the Daily Retention)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ultimately, I'd like to end up with a table that looks something like this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" style="border: 1px solid rgb(0, 0, 0); width: 100%;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Node &lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Retention Point &lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Size&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="text-align: center; background-color: #6690bc; color: #ffffff; padding: 2px;" valign="middle"&gt;&lt;STRONG&gt;Logic Explanation&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;4/6/2017&lt;/TD&gt;&lt;TD&gt;445&lt;/TD&gt;&lt;TD&gt;&lt;SPAN style="font-size: 13.3333px;"&gt;Sum of Last X Rows Backup Size (95.7) + Base Disk (350)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;4/11/2017&lt;/TD&gt;&lt;TD&gt;449&lt;/TD&gt;&lt;TD&gt;&lt;SPAN style="font-size: 13.3333px;"&gt;Sum of Last X Rows Backup Size (&lt;SPAN style="font-size: 13.3333px;"&gt;109&lt;/SPAN&gt;) + Base Disk (350)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I know I could do this using the Peek() function, but the problem I am having is that the days to retain is going to be different per node. How can I go back X number of rows to get this rolling total within the script dynamically? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Mar 2017 21:21:57 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297138#M618794</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2017-03-28T21:21:57Z</dc:date>
    </item>
    <item>
      <title>Re: Script Dynamic Sub Totals</title>
      <link>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297139#M618795</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Joe,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think we could solve your proeblem with the following code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;BACKUP:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;LOAD Node,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Base Disk],&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Base Disk Growth],&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Backup Size],&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Retention Day],&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Days to Retain],&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Backup Size] +&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #ff0000;"&gt;If([Retention Day] = 1, &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&lt;STRONG style="color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Peek('Retention Point Size', -1, 'BACKUP')) AS [Retention Point Size]&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;FROM BACKUP.xlsx (ooxml, embedded labels, table is Hoja1);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;NOTE&lt;/STRONG&gt;: there is a strong precondition in the above code all the data in BAKUP table MUST be previously ordered by Node ASC, and Date ASC. If is not ordered so, the peek function will show an unpredictable result.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What we do in [Retention Point Size] field generation is:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Always sum the [Backup Size] field value.&lt;/LI&gt;&lt;LI&gt;Look at the current record value in field [Retention Day].&lt;/LI&gt;&lt;LI&gt;If is the first day of the sequence to retain I donot sum anything as I donot want to accumulate value.&lt;/LI&gt;&lt;LI&gt;Else, I take the value of the precedent record in the [Retention Point SIze] field as it contains the accumulated value.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does not matter if nodes have different days to retain even if a node change its; only matter that the origin table is ordered by node and date.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The result could be:&lt;/P&gt;&lt;P&gt;&lt;IMG alt="29-03-2017 4-59-11.png" class="jive-image image-1" src="/legacyfs/online/158016_29-03-2017 4-59-11.png" style="height: 233px; width: 620px;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I attach you a sample. Hope it serves!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;H&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Mar 2017 03:00:24 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297139#M618795</guid>
      <dc:creator>hector_munoz</dc:creator>
      <dc:date>2017-03-29T03:00:24Z</dc:date>
    </item>
    <item>
      <title>Re: Script Dynamic Sub Totals</title>
      <link>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297140#M618796</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I attach the excel file here...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Mar 2017 03:01:14 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Script-Dynamic-Sub-Totals/m-p/1297140#M618796</guid>
      <dc:creator>hector_munoz</dc:creator>
      <dc:date>2017-03-29T03:01:14Z</dc:date>
    </item>
  </channel>
</rss>

