<?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 Data model for a price book in QlikView</title>
    <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224334#M76758</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Rob &amp;amp; Nick it has given me some insights. I think I will set this up with interval match, it just did not seem (to me) an efficient method showing 365 days of prices for a price that change only once per year.&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Bruce&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 16 Jul 2010 13:22:12 GMT</pubDate>
    <dc:creator />
    <dc:date>2010-07-16T13:22:12Z</dc:date>
    <item>
      <title>Data model for a price book</title>
      <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224331#M76755</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wonder if anyone could share their thoughts on how to design a price book. We have a priice book with SKU, price and date. The prices for some items will change multiple times per week other will remain static for years.&lt;/P&gt;&lt;P&gt;What is the best way to code this so that when I have invoices on any date they will always "lookup" the price published on or before that date?&lt;/P&gt;&lt;P&gt;I thought about making a price book for every possible date, but I think this would be very ineffecient. We have about 15000 items (price/date) and millions of invoices.&lt;/P&gt;&lt;P&gt;Any ideas are welcome as I have no problem in redesigning the price book structure in QV or SQL in order to support my query.&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; regards,&lt;/P&gt;&lt;P&gt;Bruce&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jul 2010 14:49:26 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224331#M76755</guid>
      <dc:creator />
      <dc:date>2010-07-15T14:49:26Z</dc:date>
    </item>
    <item>
      <title>Data model for a price book</title>
      <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224332#M76756</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;From performance stamp point it's better to have price per book per date. It's not too many records for an year in your case: 15 000 * 365 = 5475000. Otherwise you can implement one of the algorithms for "Slowly changing dimensions" &lt;A href="http://en.wikipedia.org/wiki/Slowly_changing_dimension" title="Slowly Changing Dimensions"&gt;http://en.wikipedia.org/wiki/Slowly_changing_dimension&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jul 2010 16:37:45 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224332#M76756</guid>
      <dc:creator />
      <dc:date>2010-07-15T16:37:45Z</dc:date>
    </item>
    <item>
      <title>Data model for a price book</title>
      <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224333#M76757</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It may depend on whether you wil do the "lookup" at script time or in chart. Price per day, as Nick suggested, may be feasible in either case.&lt;/P&gt;&lt;P&gt;The QV Cookbook&lt;BR /&gt;&lt;A href="http://robwunderlich.com/Download.html"&gt;http://robwunderlich.com/Download.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;has a sample titled "Fill values in a data range using previous values" that implements a price per day model using IntervalMatch.&lt;/P&gt;&lt;P&gt;-Rob&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 16 Jul 2010 06:07:00 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224333#M76757</guid>
      <dc:creator>rwunderlich</dc:creator>
      <dc:date>2010-07-16T06:07:00Z</dc:date>
    </item>
    <item>
      <title>Data model for a price book</title>
      <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224334#M76758</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Rob &amp;amp; Nick it has given me some insights. I think I will set this up with interval match, it just did not seem (to me) an efficient method showing 365 days of prices for a price that change only once per year.&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Bruce&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 16 Jul 2010 13:22:12 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224334#M76758</guid>
      <dc:creator />
      <dc:date>2010-07-16T13:22:12Z</dc:date>
    </item>
    <item>
      <title>Re: Data model for a price book</title>
      <link>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224335#M76759</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Rob,&lt;/P&gt;&lt;P&gt;I have tried to adjust the example of Rob to my needs. In my case, I only have one single date per record - so I tried to get min/max and then add the missing dates for each product.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ORIGIN:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="316"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="19" width="83"&gt;Product&lt;/TD&gt;&lt;TD width="150"&gt;DateOfPriceChange&lt;/TD&gt;&lt;TD width="83"&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;01.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;110&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;02.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;230&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;03.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;250&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;03.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;06.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;120&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;06.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;210&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;07.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl63"&gt;08.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;220&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;RESULT:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="316"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="19" width="83"&gt;Product&lt;/TD&gt;&lt;TD width="150"&gt;DateOfPriceChange&lt;/TD&gt;&lt;TD width="83"&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;01.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;110&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;02.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;110&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;03.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;04.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;05.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;130&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;06.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;120&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;07.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;120&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Apple&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;08.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;120&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;01.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;02.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;230&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;03.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;250&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;04.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;250&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;05.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;250&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;06.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;210&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;07.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="19"&gt;Orange&lt;/TD&gt;&lt;TD align="right" class="xl65"&gt;08.01.2012&lt;/TD&gt;&lt;TD align="right"&gt;220&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I tried:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Determine the min and max dates in the data for use in building the DateTable */&lt;/P&gt;&lt;P&gt;tempTable:&lt;/P&gt;&lt;P&gt;LOAD min(PriceValidFromDate) as mindate,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; max(PriceValidFromDate) as maxdate&lt;/P&gt;&lt;P&gt;RESIDENT PriceBook&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;/* Write the min and max values to variables for use in the DateTable loop. */&lt;/P&gt;&lt;P&gt;LET vMinDate = fieldvalue('mindate',1)-1; // Subtract one for loop start&lt;/P&gt;&lt;P&gt;LET vMaxDate = fieldvalue('maxdate', 1);&lt;/P&gt;&lt;P&gt;DROP TABLE tempTable;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Don't need this table anymore&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Generate a DateTable for the range seen in the Rental data. &lt;/P&gt;&lt;P&gt;We will also create additional dimensions in the preceeding LOAD like "Month" for use in the charts.&lt;/P&gt;&lt;P&gt;See the QV Cookbook example "Generate date (calendar) table" for more information on generating date tables. &lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;DateTable:&lt;/P&gt;&lt;P&gt;LOAD *,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; month(PriceValidFromDate) as Month,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; year(PriceValidFromDate) as Year,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; QuarterName(PriceValidFromDate) as Quarter&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;LOAD date($(vMinDate) + IterNo()) as RentedDay&lt;/P&gt;&lt;P&gt;AUTOGENERATE 1&lt;/P&gt;&lt;P&gt;WHILE $(vMinDate) + IterNo() &amp;lt;= $(vMaxDate)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Now that we have a table of dates, use IntervalMatch to link the DateOut &amp;amp; DateIn fields&lt;/P&gt;&lt;P&gt;to distinct dates that fall between the range of DateOut &amp;amp; DateIn. &lt;/P&gt;&lt;P&gt;I'm choosing to do a JOIN of Rentals with the generated IntervalMatch table to avoid the synthetic key&lt;/P&gt;&lt;P&gt;that would be created if I left this as a seperate table. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The downside to using JOIN is that we increase the frequency counts of the transaction data (fact table), but this is easily handled by&lt;/P&gt;&lt;P&gt;using DISTINCT where necessary in the chart expressions.&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;LEFT JOIN(PriceBook) IntervalMatch (RentedDay) LOAD PriceValidFromDate RESIDENT PriceBook;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt;Create a counter field we can use to sum up the days rented. This is optional, as we could count something something on the fact table&lt;/P&gt;&lt;P&gt;like "EquipmentID". If you count something from the fact table, make sure it's not a Key!&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;LEFT JOIN(PriceBook) LOAD 1 as RentDayCounter AUTOGENERATE 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any kind of help is kindly appreciated!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Sebastian&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Dec 2012 10:44:13 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Data-model-for-a-price-book/m-p/224335#M76759</guid>
      <dc:creator />
      <dc:date>2012-12-03T10:44:13Z</dc:date>
    </item>
  </channel>
</rss>

