<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>David Lai&#039;s Business Intelligence Blog &#187; Universe Design</title>
	<atom:link href="http://davidlai101.com/blog/category/universe-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidlai101.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 23 Jul 2010 05:53:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Cascading List of Values</title>
		<link>http://davidlai101.com/blog/2009/01/08/cascading-list-of-values/</link>
		<comments>http://davidlai101.com/blog/2009/01/08/cascading-list-of-values/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 03:09:24 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Universe Design]]></category>
		<category><![CDATA[Web Intelligence]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Business Objects]]></category>
		<category><![CDATA[cascading list of values]]></category>
		<category><![CDATA[design universe]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[List of Values is a powerful feature that allows users to select from a pick list when setting conditions in a query.  This is especially important if you want to query on codes linked to a set of products.  Using the List of Values feature, you will not need to memorize which codes [...]]]></description>
			<content:encoded><![CDATA[<p>List of Values is a powerful feature that allows users to select from a pick list when setting conditions in a query.  This is especially important if you want to query on codes linked to a set of products.  Using the List of Values feature, you will not need to memorize which codes go to which products.</p>
<p>The part that I would like to focus on is <i>Cascading List of Values</i>.  In a real world Data warehouse for example, we may have thousands of customer codes.  As a business user, in order to get to the customer codes I desire, I would probably want to select my customers from a certain region.  Using Cascading List of Values, I can first select which regions I want to view and then select my customers from there.</p>
<p>Please note that it is important to think of the most efficient path a business user can take to get to their answer.  One blunder that happens with many developers is the lack of planning when creating a Cascading List of Values.  Some may include too many levels which in the long run increases the response time of user selection or too few levels which would cause users to spend too much time looking for certain values.<br />
<span id="more-16"></span><br />
<img src="http://www.davidlai101.com/blog/media/blogs/bobj/cascading_list_of_values/webi_pic.png" alt="" title="" /></p>
<p>Here is an example on creating a cascading list of values.  Let&#8217;s use a universe that contains markets inside regions and create a cascading list on markets.  At the end of the day we will want to select our markets that belong to a set of regions that we drilldown from. <i>Note that I have used markets instead of customers because it&#8217;s easier to display on the webi pic.</i></p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/cascading_list_of_values/universe.png" alt="" title="" /></p>
<p>First we will need to go into the &#8220;edit properties&#8221; tab of the market object object.  From there click on the <b>edit button</b>. </p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/cascading_list_of_values/query_panel.png" alt="" title="" /></p>
<p>A query panel will come up with the market object on the <i>Result Objects</i> window.  On the conditions window, drag and drop the &#8220;Region&#8221; object and choose the &#8220;in list&#8221; option so that we can choose from a list of Regions.</p>
<p>After running the query, it is important to have the Hierarchical View checked in the <i>edit properties</i> tab.  The reason is that this view is much more user intuitive than the tabular view when selecting from the prompts.  You can test this out to see for yourself.</p>
<p>Once you have become comfortable with creating cascading list of values, you will be able to present business users with user intuitive selections that will increase productivity and reduce response time.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2009/01/08/cascading-list-of-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practices for Organizing and Naming Objects</title>
		<link>http://davidlai101.com/blog/2008/12/04/title/</link>
		<comments>http://davidlai101.com/blog/2008/12/04/title/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 03:10:25 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Universe Design]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Business Objects]]></category>
		<category><![CDATA[naming objects]]></category>
		<category><![CDATA[ordering of objects]]></category>
		<category><![CDATA[organizing objects]]></category>
		<category><![CDATA[universe]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[While working with many Universes, I&#8217;ve noticed that sometimes not enough attention is given to naming objects and the ordering of objects.  This in turn may cause confusion with the business users since they are not completely clear on what each of the objects do.
Ordering of objects

When you have objects of the same class [...]]]></description>
			<content:encoded><![CDATA[<p>While working with many Universes, I&#8217;ve noticed that sometimes not enough attention is given to naming objects and the ordering of objects.  This in turn may cause confusion with the business users since they are not completely clear on what each of the objects do.</p>
<p><font size="large"><b>Ordering of objects</b></font></p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/object_sorting/object_ordering.jpg" alt="" title="" /></p>
<p>When you have objects of the same class grouped together, it makes it much clearer to the business user to view when they see it in a hierarchal form instead of alphabetically.  Lets take for example date objects.  We have a year, quarter, month, and day object.  The largest increment or grouping should always appear at the top and the most detailed at the bottom.  Having this ordering will facilitate drilldowns.  If these were sorted alphabetically, a business user would have to do more work in order to come up with a drilldown hierarchy.<br />
<span id="more-18"></span><br />
<font size="large"><b>Naming of objects</b></font></p>
<p>Universe Designers should always follow the 4 Cs (Customer Oriented, Clear, Consistent, Concise)</p>
<p><b>Customer Oriented</b><br />
Objects created from the universe should be business oriented; anything that the business user does not need to see should never be created.</p>
<p><b>Clear</b><br />
Objects should always have a clear name.  For example if there are multiple types of month names (ie: Jan, 01, January), to be clear a designer should create detail objects for all 3 depending on what the business user wants to see and name them accordingly.  If we just had the name &#8220;Month&#8221;, a business user would not know if it was either Jan, 01, or January.</p>
<p><b>Consistent</b><br />
Object names should always have consistent formatting, this is usually a general rule so that users are familiar with the object names</p>
<p><b>Concise</b><br />
Sometimes names can have a shortform ie: Article Code could be named SKU.  If the article code is only 4 characters long, it would be a waste of column space on the report to have Article Code on the column heading, thus SKU would serve a better purpose unless you would want the business user to manually change report name each time.</p>
<p>I hope that this article will help designers put these 2 items in their good practices checklist so that it will eliminate business user&#8217;s headaches in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2008/12/04/title/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preventing Chasm and Fan Traps!</title>
		<link>http://davidlai101.com/blog/2008/11/18/preventing-chasm-and-fan-traps/</link>
		<comments>http://davidlai101.com/blog/2008/11/18/preventing-chasm-and-fan-traps/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 03:11:42 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Universe Design]]></category>
		<category><![CDATA[Web Intelligence]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Business Objects]]></category>
		<category><![CDATA[chasm trap]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[fan trap]]></category>
		<category><![CDATA[universe]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[In this article I would like to talk about Chasm traps and Fan traps. These are problems that we often experience while building universes and reports.  When encountering these traps, one may wonder what is going on? How come my sum statements arent adding up correctly? Or why am I missing some rows?  [...]]]></description>
			<content:encoded><![CDATA[<p>In this article I would like to talk about <b>Chasm traps</b> and <b>Fan traps</b>. These are problems that we often experience while building universes and reports.  When encountering these traps, one may wonder what is going on? How come my sum statements arent adding up correctly? Or why am I missing some rows?  A properly designed universe will help avoid these problems. In addition, a good understanding about measures and contexts from report designers will help as well.</p>
<p><font size="large"><b>Chasm Traps</b></font></p>
<p>Let&#8217;s talk about <b>Chasm traps</b> first.  In short, a <i>Chasm trap</i> can be imagined as a bottomless pit where some rows may unknowingly fall in and never come back out.  So when viewing a report caught in a Chasm trap, one may ask &#8220;Hey where did Record X go??&#8221;.<br />
<span id="more-17"></span><br />
<img src="http://www.davidlai101.com/blog/media/blogs/bobj/chasm_and_fan_traps/universe1.jpg" alt="efashion test" title="" /></p>
<p>Looking at the eFashion Universe <i>(note that this is a modified version of the efashion universe)</i>, we see that there are 2 fact tables that join to 2 of the same dimension tables.  If we do not set a context for each of the fact tables in the universe, we will only get 1 query when building a report that involves measures from both fact tables.<br />
<code><font color="green"><br />
SELECT<br />
  Article_lookup.Article_id,<br />
  Shop_facts.Amount_sold<br />
FROM<br />
  Article_lookup,<br />
  Shop_facts,<br />
  product_promotion_facts,<br />
  Calendar_year_lookup<br />
WHERE<br />
  ( product_promotion_facts.Week_id=Calendar_year_lookup.Week_id  )<br />
  AND  ( Article_lookup.Article_id=Shop_facts.Article_id  )<br />
  AND  ( Article_lookup.Article_id=product_promotion_facts.Article_id  )<br />
  AND  ( Shop_facts.Week_id=Calendar_year_lookup.Week_id  )<br />
</font></code><br />
Since the promotion fact table and shop fact table are joined in the same query, we will only get results that are in both the promotion fact and shop fact table.  In reality we want all available products even if they are not on promotion.  The products that are not on promotion will fall down the bottomless pit and report designers will be wondering where they have gone.</p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/chasm_and_fan_traps/chasm_trap.jpg" alt="chasm trap" title="" /></p>
<p><font size="large"><b>Fan Traps</b></font></p>
<p><b>Fan traps</b> are another common problem and occur when a measure is overstated.  So using the same example above, the <i>promotion cost measure</i> is a &#8220;sum of promotion costs&#8221;.  Let&#8217;s say for one product we might have 5 entries in the shop fact table and 2 entries in the promotion fact table.  Instead of a one-to-many join for the promotion fact table, we now have a many-to-many join which will cause a cartesian product.  The promotion cost for that product will be 5 times higher than what its supposed to be since we have 5 entries in the shop fact table.</p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/chasm_and_fan_traps/fan_trap.jpg" alt="fan trap" title="" /></p>
<p><font size="large"><b>Prevention</b></font><br />
To prevent falling into these traps, we must properly set our contexts in the universe.  Here we set a context for both the promotion fact and shop fact.  As a <b>rule of thumb</b> we should always set contexts for facts. </p>
<p><img src="http://www.davidlai101.com/blog/media/blogs/bobj/chasm_and_fan_traps/contexts.jpg" alt="setting universe contexts" title="" /></p>
<p>Setting contexts for these 2 facts will now produce 2 queries that will be synchronized thus returning the correct results because now we have 2 seperate joins instead of 2 joins in the same table.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2008/11/18/preventing-chasm-and-fan-traps/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
