<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Dave's Adventures in Business Intelligence &#187; 2010 Mastering &#8230; Melbourne</title>
	<atom:link href="http://www.dagira.com/category/conferences/2010-mastering-melbourne/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dagira.com</link>
	<description>...you are in a twisty maze of passageways, all different...</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:26:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" -->
		<copyright>&#xA9; </copyright>
		<managingEditor>blogmaster@dagira.com ()</managingEditor>
		<webMaster>blogmaster@dagira.com()</webMaster>
		<category></category>
		<ttl>1440</ttl>
		<itunes:keywords></itunes:keywords>
		<itunes:subtitle></itunes:subtitle>
		<itunes:summary>...you are in a twisty maze of passageways, all different...</itunes:summary>
		<itunes:author></itunes:author>
		<itunes:category text="Society &amp; Culture"/>
		<itunes:owner>
			<itunes:name></itunes:name>
			<itunes:email>blogmaster@dagira.com</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://www.dagira.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<image>
			<url>http://www.dagira.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>Dave's Adventures in Business Intelligence</title>
			<link>http://www.dagira.com</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Universe Models For Recursive Data Part III: Alias Versus Flattened</title>
		<link>http://www.dagira.com/2010/07/02/universe-models-for-recursive-data-part-iii-alias-versus-flattened/</link>
		<comments>http://www.dagira.com/2010/07/02/universe-models-for-recursive-data-part-iii-alias-versus-flattened/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 11:45:03 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2009 GBN - Dallas]]></category>
		<category><![CDATA[2010 Mastering ... Melbourne]]></category>
		<category><![CDATA[Recursive Data]]></category>
		<category><![CDATA[Universe Design]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=284</guid>
		<description><![CDATA[This is the third of several posts that will review my presentation “Universe Models For Recursive Data” which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. As with my other presentations there is a PDF file [...]]]></description>
			<content:encoded><![CDATA[<p>This is the third of several posts that will review my presentation “Universe Models For Recursive Data” which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. As with my other presentations there is a PDF file that can be downloaded from my <a href="http://www.dagira.com/conference-presentations/">conference presentations page</a>. The first post introduced the concepts of recursive (as opposed to hierarchical) data and provided a couple of examples. The second post reviewed some of the different design challenges that I have seen in working with recursive data models. In this post I will introduce four different possible solutions and present a scorecard for each, showing how well it solves the issues presented in the prior post in this series. Links to both prior posts are presented at the end of this entry. I have also included Oracle SQL scripts that can be used to create and populate the tables used in this post.</p>
<p><em>This post will cover slides 22 through 30 from the presentation and will describe the first two solutions (one with two variations) outlined in the presentation.</em> <span id="more-284"></span></p>
<h3>Solution Options</h3>
<p>The four different solutions that I included in my presentation were: Universe aliases, Flattened structures (column or snowflake), Ancestor Model, and Depth First Tree Traversal. All of them work fine on a clean recursive hierarchy. Each of them partially works for at least some of the other challenges. Some of them present unique challenges (extra disk space requirements or lack of native drilling functionality) that will also be addressed. I am presenting the solutions in increasing order of complexity. This post will cover aliases and flattened structures (both versions). In the next post I plan to cover the ancestor model, and finally I will cover the depth first tree traversal in its own post. </p>
<h3>Universe Aliases</h3>
<p>This solution is the only one that can be completely self-contained within the universe. No DBA or ETL work is required. There are any number of ways to create an alias. I can:</p>
<ul>
<li>Right-click on a table and select Insert Alias</li>
<li>Select an existing table in my structure, then select Insert + Alias from the menu</li>
<li>Open my table browser and insert an existing table. An alias will automatically be created for me.</li>
<li>Select an existing table in my structure and click the &#8220;Insert Alias&#8221; toolbar button</li>
</ul>
<p>&#8230; and there are other ways to get aliases in my universe, especially if I have loops to resolve. The bottom line is that the process is quite simple.</p>
<p>Here&#8217;s what an alias looks like after it has been created and joined to an existing table in my structure.</p>
<p><img src="/tips/recursive_data/part_03_alias_flat/alias_implementation.png" border="0" width="443" height="324" alt="screen shot of alias implementation in a BusinessObjects universe" title="Alias implementation in a BusinessObjects universe" /></p>
<p>The join can be a bit tricky. In this case, the employee row MGR_ID is joined to the manager row EMP_ID in order to make the relationship work. It might help to look at the raw data again from an earlier post.</p>
<p><img src="/tips/recursive_data/part_01_recursion_definition/pm_data.png" width="286" height="250" border="0" alt="raw data used to demonstrate recursion in a BusinessObjects universe" title="Raw data used to demonstrate recursion in a BusinessObjects universe" /></p>
<p>See how the recursive relationship is going to work after establishing this join? Field works for Ferrerez, and Ferrerez works for Noakes. Who does Noakes work for? His MGR_ID column is empty (NULL) implying that he does not have a manager. He owns the company. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Pros of Alias Solution</h3>
<p>The primary advantage of this solution is that it is completely self-contained in the universe. No DBA or ETL work is required. That&#8217;s about it.</p>
<h3>Cons of Alias Solution</h3>
<p>There are several cons to this solution. It does not represent lateral relationships at all. I have to use outer joins in order to preserve those rows with missing keys (Noakes in this example). Both of these are important, but the most substantial drawback to this solution is that the depth is determined by the number of aliases that the universe designer creates. In the image shown above there is only one link: from manager to direct employee. How can I &mdash; in one step &mdash; determine my indirect reports? With only one level of alias, I can only report one level of my hierarchy. How many can I report with this structure?</p>
<p><img src="/tips/recursive_data/part_03_alias_flat/multi_level_aliases.png" width="530" height="138" border="0" alt="screen shot of multi-level alias implementation in a BusinessObjects universe" title="Multi-level alias implementation in a BusinessObjects universe" /></p>
<p>With that structure I now have two outer joins, but I can report on three levels instead of just two.</p>
<p>How many alias levels do I create? Generally when I have seen this solution used (or used it myself) we resort to asking how many levels are required and then creating some number above that. If I need five, I will create seven. If I need seven, I will create ten.</p>
<p>That means, of course, if I have created ten levels and all of a sudden we have twelve I have to update my universe. That&#8217;s not a problem (as long as I keep up with things) but it&#8217;s certainly not desirable.</p>
<h3>Alias Scorecard</h3>
<p>Here&#8217;s the scorecard for the alias solution for each of the four scenarios I outlined earlier.</p>
<p><img src="/tips/recursive_data/scorecard_alias.png" width="600" height="297" border="0" alt="alias scorecard for handling recursive data" title="Alias scorecard for handling recursive data challenges in a BusinessObjects universe" /></p>
<p>Aliases are the easiest solution to implement but they don&#8217;t score well. Let&#8217;s move on to the next solution.</p>
<h3>Flattened Structure &#8211; Single Table Columns</h3>
<p>The next solution involves running either a SQL script or some form of ETL. I need to take the recursive table relationship and flatten it out much like I did with aliases, but this time in the database itself. The net result is that I will take data going down in rows:</p>
<p><img src="/tips/recursive_data/part_03_alias_flat/table_rows.png" width="432" height="146" border="0" alt="data in tables is presented as rows" title="Data in relational tables consists of rows" /></p>
<p>and pivot it into columns in a table.</p>
<p><img src="/tips/recursive_data/part_03_alias_flat/table_columns.png" width="456" height="144" border="0" alt="data for a hierarchy can be pivoted into columns" title="Data in a hierarchy can be pivoted into columns" /></p>
<p>The net result is all of my recursion is done during the script process and I end up with one table that contains everything (or every person in my case) stored at their specific level in the hierarchy. It easily allows me to drill because it creates a very natural hierarchy.</p>
<h3>Pros of Flattened Table Solution</h3>
<p>It handles unbalanced hierarchies much better than aliases because missing lower nodes are simply NULL in the table. That&#8217;s fine. This solution can also handle ragged hierarchies with a proper &#8220;plug node&#8221; strategy. If I have a lower level value (Divisional Director) that reports directly to the president (top level) then level 2 (Vice President) will be empty. I need to fill something in so I can drill properly. More important, that plug node has to tell me what the path is or else I cannot drill up properly. Suppose I had a director named Smith who reported directly to Noakes. The first column in my table would include Noakes. The third column would include Smith. The second column (the missing value due to the raggedness of my data) would contain Smith VP Not Assigned or something like that.</p>
<p>Flattened tables cannot handle lateral hierarchies at all because I can&#8217;t store two values in a single column.</p>
<h3>Cons of Flattened Table Solution</h3>
<p>As already mentioned, this solution cannot handle lateral hierarchies at all. It also requires DBA or ETL work if the number of hierarchy levels changes. My column names should reflect the position (node type) in the hierarchy. That&#8217;s not a problem unless my hierarchy levels change, then I might want to update my structures.</p>
<p>But by far the most critical issue with this solution is the fact that it requires DBA or ETL work if my levels ever change. Much like aliases when I have seen this solution implemented I generally see extra columns at the end of my table just to allow for future expansion.</p>
<h3>Flattened Table Scorecard</h3>
<p>Here is my scorecard for the Flattened Table solution.</p>
<p><img src="/tips/recursive_data/scorecard_flat_columns.png" width="600" height="297" border="0" alt="flattened columns scorecard for handling recursive data" title="Flattened columns scorecard for handling recursive data challenges in a BusinessObjects universe" /></p>
<h3>Flattened Structure &#8211; Snowflake Tables</h3>
<p>One thing that I noticed about the data for the flattened structure is that I repeat a lot of values. For example, Noakes is the &#8220;level 1 mgr&#8221; for every person in the company. It might seem to be more efficient to use a structure like this:</p>
<p><img src="/tips/recursive_data/part_03_alias_flat/snowflake_structure.png" width="529" height="67" border="0" alt="screen shot of snowflake structure in a BusinessObjects universe" title="Snowflake structure for handling recursive data in a BusinessObjects universe" /></p>
<p>This would reduce my overall storage requirements because I would end up with a single row for the highest level table.</p>
<p>However, it also reintroduces the need for outer joins, which the initial flattened structure avoided. </p>
<h3>Pros of Flattened Snowflake Solution</h3>
<p>Because the tables get smaller as I get further up the tree (ultimately to a single-row table in my simple example) my overall storage requirement should be smaller as well. If I only need the top one or two levels, my queries should be very efficient. Finally, I think it would be easier to maintain as well. If a new level appears, I add a new table to my chain with the proper restrictions on the ETL for proper table population. </p>
<h3>Cons of Flattened Snowflake Solution</h3>
<p>Each of the solutions defined so far suffers from some form of this issue: I have to define a table (or column) for every possible level of my hierarchy. If I do not know what the total number of levels will be, I can try to anticipate and create extra tables to support future expansion. But that is not the best solution. Because these tables are maintained in the database, I have to talk to my DBA or ETL team when changes are required. Because the tables are joined I have to consider whether to use outer join to preserve depth on unbalanced hierarchies. And finally, the &#8220;plug node&#8221; strategy I outlined earlier becomes a &#8220;plug row&#8221; strategy in this case, and that&#8217;s substantially more complicated.</p>
<h3>Flattened Snowflake Scorecard</h3>
<p>Here is the scorecard for the flattened snowflake solution. In my opinion, it&#8217;s a slightly worse solution than the flattened table solution simply because of the join issue and the plug row concern.</p>
<p><img src="/tips/recursive_data/scorecard_flat_snowflake.png" width="600" height="297" border="0" alt="snowflake scorecard for handling recursive data" title="Snowflake scorecard for handling recursive data challenges in a BusinessObjects universe" /></p>
<h3>Next Time</h3>
<p>The solutions covered in this post are the least complex and therefore offer the least flexibility. They are easy to set up; in the case of aliases the entire solution can be built within the universe designer application. All of the other solutions require some sort of database scripting. In the next post I will talk about the ancestor model and how we used it at a manufacturing client. It has some definite advantages, and it handles just about all of the different challenges I have outlined. I don&#8217;t have to worry about plug nodes, and it handles both ragged and unbalanced hierarchies quite well. However it has an impact on disk usage and it can&#8217;t be drilled using the native functionality provided by BusinessObjects. Do the pros outweigh the cons? Come back soon and see for yourself. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://www.dagira.com/2010/06/16/universe-models-for-recursive-data-part-i-introduction/">Universe Models for Recursive Data Part I: Introduction</a></li>
<li><a href="http://www.dagira.com/2010/06/25/universe-models-for-recursive-data-part-ii-design-challenges/">Universe Models for Recursive Data Part II: Design Challenges</a></li>
</ul>
<p><strong>Supplemental Material</strong><br />
Scripts to create and populate the basic HR table used for this presentation.</p>
<ul>
<li>Create table</p>
<pre>create table employee
(emp_id number(5) not null
,emp_lastname varchar(20)
,emp_firstname varchar(15)
,emp_dob date
,emp_address varchar(40)
,emp_area_code varchar(7)
,emp_town varchar(15)
,emp_phone varchar(18)
,showroom_id number(4)
,emp_start date
,emp_mgr_id number(5)
,emp_sex varchar(1)
,job_id number(4));

alter table employee add constraint emp_pk primary key (emp_id);
create index emp_dept on employee(dept_id);
create index emp_showroom on employee(showroom_id);
create index emp_mgr on employee(emp_mgr_id);
</pre>
</li>
<li>Populate table
<pre>
insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (101, 'Noakes', 'Nicholas', '12-MAR-48', '2356, Melrose Street', '30190', 'San Jose', '12-00-00-01', '01-JAN-91', NULL, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (102, 'Ferrerez', 'Ferdinand', '10-FEB-64', '25 Arcadia Avenue', '75897', 'Los Angeles', '22-55-56-32', '30-MAR-96', 101, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (103, 'Field', 'Felicity', '15-DEC-60', '12 Brasilia Street', '12014', 'Santa Barabara', '14-46-54-22', '26-MAR-95', 102, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (104, 'Fraser', 'Frank', '13-MAR-67', '45 Seaside Avenue', '75016', 'Los Angeles', '22-55-18-33', '13-DEC-91', 101, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (105, 'Snow', 'Sara', '03-OCT-65', 'Square Woodstock', '18000', 'San Jose', '14-34-34-30', '01-MAY-93', 101, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (106, 'Speed', 'Sonya', '03-DEC-70', '5, The Vale', '22000', 'San Jose', '14-32-39-43', '04-JUL-96', 105, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (107, 'Spencer', 'Steve', '01-NOV-64', 'Square Osaka', '33010', 'Los Angeles', '22-24-25-89', '16-APR-91', 105, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (108, 'Helen', 'Harrison', '01-AUG-66', 'Via Firenze', '38200', 'Los Angeles', '22-34-31-11', '13-MAY-94', 101, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (109, 'Thomas', 'Tom', '01-DEC-68', '11 Over Way', '24000', 'San Jose', '22-45-67-45', '20-DEC-95', 101, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (110, 'Thatcher', 'Terry', '03-OCT-50', 'Stars Parkway', '21000', 'San Jose', '12-11-11-09', '06-DEC-92', 109, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (111, 'Davis', 'Diana', '12-AUG-64', 'Rue Opera Sauvage', '92100', 'Los Angeles', '14-54-11-10', '22-SEP-92', 101, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (201, 'Pickworth', 'Paul', '12-FEB-51', '23 Las palmas road', '00316', 'New York', '12-24-26-44', '12-JAN-93', 101, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (202, 'Forest', 'Florence', '10-OCT-32', 'Rue des Lombards', '75100', 'New York', '22-54-11-10', '23-DEC-94', 201, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (203, 'Brown', 'Bella', '12-APR-59', 'Hollywood Blv', '36020', 'New York', '22-36-25-50', '03-FEB-92', 202, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (204, 'Porter', 'Pete', '15-NOV-57', 'Avd Torre De Embarra', '34100', 'New York', '14-44-11-66', '13-APR-92', 201, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (205, 'Irving', 'Ira', '12-FEB-64', '44 Beach avenue', '13000', 'New York', '12-56-55-20', '18-JUN-95', 204, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (206, 'Bailey', 'Ben', '12-JUN-57', '4 Palisades Drive', '75090', 'Long Island', '12-33-51-29', '01-DEC-90', 204, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (207, 'Duckworth', 'Dave', '09-SEP-66', 'Rue du grand temps', '75018', 'New York', '12-85-01-61', '04-NOV-93', 201, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (208, 'Ince', 'Ian', '10-AUG-53', 'Sunset Blvd', '31061', 'New York', '22-52-22-00', '04-DEC-95', 207, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (209, 'Hilary', 'Hibbs', '01-FEB-60', 'Sand Hill Road', '92800', 'New York', '12-54-11-10', '08-JUN-95', 202, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (301, 'Dagmar', 'Davinda', '12-APR-58', '12, The Crescent', 'SL1 1HG', 'Slough', '01628-764234', '24-JUN-95', 101, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (302, 'Presley', 'Percy', '30-OCT-62', '1 Jubilee Close', 'SL5 23F', 'Maidenhead', '01628-834582', '15-JUL-95', 301, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (303, 'Perry', 'Philippa', '24-FEB-71', '23 Rice Hill', 'SL3 12S', 'Maidenhead', '01628-567231', '28-SEP-96', 302, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (304, 'Hubert', 'Henri', '13-DEC-69', '5 Grand Lane', 'SL3 12S', 'Maidenhead', '01628-243535', '17-APR-96', 302, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (305, 'Adamson', 'Anita', '12-OCT-69', '24 Loose Lane', 'SL4 23D', 'Cookham', '01628-782364', '15-FEB-96', 301, 'F');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (306, 'Beaver', 'Bertie', '12-MAR-72', '223 Grange Hill', 'SL2 67E', 'Windsor', '01628-187632', '13-JAN-96', 305, 'M');

insert into employee (emp_id, emp_lastname, emp_firstname, emp_dob, emp_address, emp_area_code, emp_town, emp_phone, emp_start, emp_mgr_id, emp_sex)
values (307, 'Motson', 'Mervin', '22-DEC-74', '67 Blows Down', 'SL5 45G', 'Cookham', '01628-198371', '17-JUN-96', 305, 'M');
</pre>
</li>
</ul>
<p>Scripts to create and populate the flattened version of the HR table, Oracle syntax</p>
<ul>
<li>Create flattened table</p>
<pre>create table emp_flat
(emp_lvl_1 varchar2(20)
,emp_lvl_2 varchar2(20)
,emp_lvl_3 varchar2(20)
,emp_lvl_4 varchar2(20)
);</pre>
</li>
<li>Populate flattened table.<br />
Only four levels are supported.<br />
Starting point (Noakes) is hard-coded.</p>
<pre>insert into emp_flag (emp_lvl_1, emp_lvl_2, emp_lvl_3, emp_lvl_4)
select a.emp_lastname
,      b.emp_lastname
,      c.emp_lastname
,      d.emp_lastname
from employee a
,    employee b
,    employee c
,    employee d
where a.emp_id = b.emp_mgr_id(+)
and b.emp_id = c.emp_mgr_id(+)
and c.emp_id = d.emp_mgr_id(+)
and a.emp_id = 101;</pre>
</li>
<li>Create Snowflake Tables
<pre>create table emp_level_01
(emp_id number(5)
,emp_lvl_1 varchar2(20));

create table emp_level_02
(emp_id number(5)
,emp_mgr_id number(5)
,emp_lvl_2 varchar2(20));

create table emp_level_03
(emp_id number(5)
,emp_mgr_id number(5)
,emp_lvl_3 varchar2(20));

create table emp_level_04
(emp_id number(5)
,emp_mgr_id number(5)
,emp_lvl_4 varchar2(20));</pre>
</li>
<li>Populate snowflake tables<br />
Only four levels are built, each starting from the prior table.<br />
Starting point (Noakes) is hard-coded.</p>
<pre>insert into emp_level_01 (emp_id, emp_lvl_1)
select emp_id, emp_lastname
from employee
where emp_id = 101;

insert into emp_level_02 (emp_id, emp_mgr_id, emp_lvl_2)
select e.emp_id, e.emp_mgr_id, e.emp_lastname
from employee e, emp_level_01 e1
where e.emp_mgr_id = e1.emp_id;

insert into emp_level_03 (emp_id, emp_mgr_id, emp_lvl_3)
select e.emp_id, e.emp_mgr_id, e.emp_lastname
from employee e, emp_level_02 e2
where e.emp_mgr_id = e2.emp_id;

insert into emp_level_04 (emp_id, emp_mgr_id, emp_lvl_4)
select e.emp_id, e.emp_mgr_id, e.emp_lastname
from employee e, emp_level_03 e3
where e.emp_mgr_id = e3.emp_id;
</pre>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/07/02/universe-models-for-recursive-data-part-iii-alias-versus-flattened/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Universe Models For Recursive Data Part II: Design Challenges</title>
		<link>http://www.dagira.com/2010/06/25/universe-models-for-recursive-data-part-ii-design-challenges/</link>
		<comments>http://www.dagira.com/2010/06/25/universe-models-for-recursive-data-part-ii-design-challenges/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 00:38:35 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2009 GBN - Dallas]]></category>
		<category><![CDATA[2010 Mastering ... Melbourne]]></category>
		<category><![CDATA[Recursive Data]]></category>
		<category><![CDATA[Universe Design]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=283</guid>
		<description><![CDATA[This is the second of several posts that will review my presentation “Universe Models For Recursive Data” which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. As with my other presentations there is a PDF file [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second of several posts that will review my presentation “Universe Models For Recursive Data” which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. As with my other presentations there is a PDF file that can be downloaded from my <a href="http://www.dagira.com/conference-presentations/">conference presentations page</a>. The first post introduced the concepts of recursive (as opposed to hierarchical) data and provided a couple of examples. In this post I will review some of the different design challenges that I have seen in working with recursive data. </p>
<p>I decided to identify and cover four different examples of recursive data configurations. These included Clean, Unbalanced, Ragged, and Lateral. As I mentioned in the first post, I am going to use some basic human resources (HR) data for my examples. For this post, in order to show samples of each of the four challenges, I am going to represent my recursive data using a tree. The branches of the tree show the relationships between people. The nodes of the tree contain the information about each person. The data might include their name, hire date, and position (title) within the company. In order to properly interact with my recursive data I have to be able to work with both types of information: relationships and node data as well. If you are not sure what I mean, please continue reading, this will make more sense later on.</p>
<p><em>This post will cover slides 14 through 21 from the presentation and will describe each of the different recursive challenges that I identified.</em> <span id="more-283"></span></p>
<h3>Clean Hierarchy</h3>
<p>In my first example everything is very clean. Each branch of the tree has the same depth. Each branch follows the same path. There are no real challenges encountered in this hierarchy, pictured below.</p>
<p><img src="/tips/recursive_data/part_02_design_challenges/tree_clean.png" width="537" height="320" border="0" alt="image of clean recursive hierarchy" title="Clean recursive hierarchy" /></p>
<p>Imagine that the top of the tree is the company president. The second level (the &#8220;B&#8221; nodes) represent vice presidents, and the third level (&#8221;C&#8221; nodes) represents divisional directors. When a hierarchy definition is very rigorous this is the type of tree I expect. For a very simple example let me suggest a product hierarchy instead of an HR chart for the moment. A product hierarchy for a food company might include a Brand Owner, the Brand, the Size, and finally the Flavor. The brand owner could be Beverages-R-Us, the brand could be Super Sports Drinks, the size is two liter bottle, and finally the flavor is Orange. Every product in the system is guaranteed to have all four of these attributes assigned, and they will all be in that exact order. </p>
<p>On the other hand, a human resources hierarchy is rarely as clean. Let me move on to some more interesting examples.</p>
<h3>Unbalanced Hierarchy</h3>
<p>An unbalanced hierarchy is one where the nodes are at inconsistent depths. Please review the tree shown below. </p>
<p><img src="/tips/recursive_data/part_02_design_challenges/tree_unbalanced.png" width="455" height="320" border="0" alt="image of an unbalanced recursive hierarchy" title="Unbalanced recursive hierarchy with nodes at inconsistent depths" /></p>
<p>In the example shown above, there is one node (B1 in this case) that does not have any children while the rest of the nodes at that level (B2) do. If the A node is the company president, and the B nodes are vice presidents, it is entirely possible to have a position (perhaps &#8220;VP of Special Projects&#8221;) that does not have any additional people that report up to him or her. In that case the tree stops at the VP level and does not go down to the Divisional Director position.</p>
<p>Why is this a challenge? As will be seen later, one of the possible solutions to a recursive data scenario is to pivot the data (flatten) it into different columns. What happens to the missing nodes in this case?</p>
<h3>Ragged Hierarchy</h3>
<p>In the last example I suggested that there could be a VP of the company that does not have any direct employees. In the case of a Ragged hierarchy it&#8217;s slightly different. In this case I might see a Divisional Director who is reporting straight up to the company president without going through a VP.</p>
<p><img src="/tips/recursive_data/part_02_design_challenges/tree_ragged.png" width="455" height="320" border="0" alt="image of a ragged recursive hierarchy" title="Ragged recursive hierarchy with nodes of inconsistent paths" /></p>
<p>Note that in the image above I am showing both an unbalanced node (B1) and a ragged node (C2). Let me focus on C2 for a moment. As I already mentioned, there is a relationship from that director position straight up to the president. It does not go through a vice president position. Why is this a challenge? Remember that earlier I mentioned there are two parts that I need to account for: the relationship and the position or node type. In this case the relationship only goes one step, but descends two levels (from president to director). I need to be able to represent both parts properly in whatever data model I come up with.</p>
<h3>Lateral Hierarchy</h3>
<p>If you have spent any time reviewing company organization charts you may have seen this type of relationship before: I am calling it a lateral (sideways) relationship.</p>
<p><img src="/tips/recursive_data/part_02_design_challenges/tree_lateral.png" width="537" height="320" border="0" alt="image of a recursive hierarchy with lateral relationships" title="Recursive hierarchy with lateral relationships" /></p>
<p>It&#8217;s not uncommon to see a lateral relationship from one director to another director (C2 reporting to C1 in this example). This is one of the biggest challenges to most of the design ideas I will be sharing in my next post, because there are two things (people) occupying the same space (node type) on the tree).</p>
<h3>Merge / Diverge</h3>
<p>As I mentioned toward the beginning of the post that some scenarios are inherently cleaner than others because the relationships all have to exist. Unfortunately, it is quite likely to see a combination of issues. I have even seen challenges where a hierarchy does a merge / diverge relationship such as this:</p>
<p><img src="/tips/recursive_data/part_02_design_challenges/tree_merge_diverge.png" width="455" height="443" border="0" alt="image of a recursive hierarchy with merge diverge relationships" title="Recursive hierarchy with relationships that merge and then diverge" /></p>
<p>SAP and other ERP vendors generally allow this sort of hierarchy to be built in order to provide the maximum flexibility to the client company. I have never tried to implement this in BusinessObjects because it simply does not work. There is no clear drill path. Suppose I drill from node B2 to C3, and then from C3 to D2. Now when I drill up, which path do I take? I can drill from D2 up to C3, and then from C3 I can drill up to either node A1 or B2. It&#8217;s ambiguous, and therefore our project team decided that we would not attempt to handle this at all. We instituted a business rule (an exception) that would kick out any hierarchy that included this sort of path.</p>
<p><em>This particular example was dropped from the presentation in the interest of time but I wanted to mention it here.</em></p>
<h3>Combinations</h3>
<p>Even without the merge / diverge issue, there are plenty of still challenges. For our project, a typical tree was both ragged and unbalanced. That meant that the solutions we discussed had to be able to handle both. We also had a number of lateral relationships that we needed to address. Our users wanted to be able to enter the tree by node type and drill by level. They wanted to see the entire tree presented as part of a prompt. And they wanted to be able to multi-select from those prompts&#8230; for any node at any level.</p>
<h3>Next Time</h3>
<p>Which solutions work the best? Do any solutions work for all of these different scenarios? My next post in this series will review each of the four solutions I outlined in my presentation and present a scorecard for each.</p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://www.dagira.com/2010/06/16/universe-models-for-recursive-data-part-i-introduction/">Universe Models for Recursive Data Part I: Introduction</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/06/25/universe-models-for-recursive-data-part-ii-design-challenges/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Universe Models For Recursive Data Part I: Introduction</title>
		<link>http://www.dagira.com/2010/06/16/universe-models-for-recursive-data-part-i-introduction/</link>
		<comments>http://www.dagira.com/2010/06/16/universe-models-for-recursive-data-part-i-introduction/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:38:36 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2009 GBN - Dallas]]></category>
		<category><![CDATA[2010 Mastering ... Melbourne]]></category>
		<category><![CDATA[Recursive Data]]></category>
		<category><![CDATA[Universe Design]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=282</guid>
		<description><![CDATA[This is the first of several posts that will review my presentation &#8220;Universe Models For Recursive Data&#8221; which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. After presenting it three times it seemed like an appropriate [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first of several posts that will review my presentation &#8220;Universe Models For Recursive Data&#8221; which was originally presented at the 2009 GBN conference, then at the North Texas / Oklahoma ASUG chapter meeting, and finally at the Mastering BusinessObjects conference in Melbourne. After presenting it three times it seemed like an appropriate time to (finally) get started writing up the blog posts. As with my other presentations there is a PDF file that can be downloaded from my <a href="http://www.dagira.com/conference-presentations/">conference presentations page</a>.</p>
<p><em>This post will cover slides 6 through 13 as a basic introduction of recursive data and challenges presented to universe designers.</em></p>
<h3>Defining Recursive Data</h3>
<p>Sometimes there is confusion about the distinction between hierarchical and recursive data. Hierarchical data does not present a big challenge for BusinessObjects. It can be something related to time (Year, Quarter, Month, Day), geography (Country, Region, State, City), or something more specific like an accounting structure (Business Unit, Account, Sub-Account). What makes this hierarchical structure work easily is that each element is stored in a different place. It could be in a different column in the same table (flattened) or even in different tables (snowflake). As long as I can drill from one column to another in the hierarchy everything works fine.</p>
<p>Self-referencing or recursive data may initially look like a hierarchy. The key difference is that all of the elements are stored in the same place. There are keys that relate one row in a table back to a different row in the same table. That&#8217;s how recursive data is different from hierarchical data.</p>
<p>Why is recursion is a problem for BusinessObjects? The language used &#8220;behind the curtain&#8221; is SQL, and SQL does not natively support recursion. Some database vendors offer extensions (for example the CONNECT BY PRIOR structure in Oracle) but these are not used by BusinessObjects.</p>
<p>How common is recursive data? It is certainly not unusual. Consider any of the following:</p>
<ul>
<li>Company organizational structure<br />
Object levels: President &#8211; Vice President &#8211; Director<br />
Object type: Person</li>
<li>Inventory BOM (Bill of Materials)<br />
Object levels: Product &#8211; Assembly &#8211; Sub-Assembly &#8211; Component<br />
Object type: Inventory item</li>
<li>Project Management<br />
Object levels: Project &#8211; Task &#8211; Sub-Task<br />
Object type: Project entry</li>
<li>Multi-Level Marketing (MLM)<br />
Object levels: Founder &#8211; Recruit &#8211; Recruit Level 2<br />
Object type: Person</li>
</ul>
<p>In each of the above examples the type of object (or node) type is the same at any level. For example, a company organization chart is made up of people. Some people are at different levels, and there are therefore relationships from one person to another. In order to show all of the relationships from the top of the company to the bottom (or the bottom to the top) I have to keep going back to the same table. That is recursion.</p>
<p>Because it&#8217;s easy to think about a company organizational structure I used that example for the rest of the presentation. </p>
<p><em>Note: The Motors database is used in the standard Universe Designer training course and will not be presented in its entirety in the download package for this presentation for copyright reasons. However, I will be providing the standard HR table and all of the modified versions used in this presentation.</em><span id="more-282"></span></p>
<h3>Example of Recursive Data Using Prestige Motors HR</h3>
<p>A picture will help at this point. Here is a screen shot from the Prestige Motors HR universe that I built for this presentation. Notice that there are two tables in the picture, but one is an alias of the other. In other words, I am really using the same table twice.</p>
<p><img src="/tips/recursive_data/part_01_recursion_definition/hr_relationships.png" border="0" width="398" height="371" alt="screen shot of recursive relationship in a BusinessObjects universe" title="Example of a recursive relationship in a BusinessObjects universe" /></p>
<p>The table on the left is the Employees table. I have aliased the table and called it Manager. The two tables are joined using the link from EMPLOYEE.EMP_MGR_ID to Manager.EMP_ID. Since this is really the same table twice, this join defines the relationship from any particular person to their immediate manager. It&#8217;s a recursive relationship from a person to a person.</p>
<p>Notice that in this case I have defined the join as an outer (optional) join? That&#8217;s because the top person in the company does not have a manager, and the relationship would fail in that case. I want to ensure that I return every person and their manager&#8230; even if that person does not have a manager. Here is a sample of some of the data to help show why this is important.</p>
<p><img src="/tips/recursive_data/part_01_recursion_definition/pm_data.png" border="0" width="286" height="250" alt="Sample data from HR table" title="Sample data from the Prestige Motors BusinessObjects universe showing recursive data" /></p>
<p>I can review the relationships manually if I want. I can look at the data (shown above) and determine that Pickworth works for Noakes. Davis and Ferrerez also work for Noakes. How am I making that determination? Each of those three folks has a manager ID of 101, and 101 is the employee id for Noakes.</p>
<p>Who does Noakes work for? The EMP_MGR_ID column is blank (null) for Noakes, which implies that he is at the top of the company organization chart.</p>
<p>Another way to see where people fall in the organization chart is to look at their level. Here is output from a report that I eventually will want to generate from my recursive data. It is shown in the format of a tree, with each person showing up as a node on the tree.</p>
<p><img src="/tips/recursive_data/part_01_recursion_definition/hr_tree.png" border="0" width="440" height="566" alt="Tree output from HR database table" title="Tree structured output from the Prestige Motors BusinessObjects universe showing recursive data" /></p>
<p>Noakes is at level 1. Davis, Ferrerez, and Pickworth are all at level 2. But the tree does not stop there. I have employees at level 3 and level 4 as well. </p>
<h3>Typical Recursion Questions</h3>
<p>This brings me to the set of questions that I need to be able to answer with my recursive data. I need to know:</p>
<p>Who do I work for?<br />
Who works for me?<br />
Who works at my same level and shares the same manager?<br />
Who is my manger&#8217;s manager? My manager&#8217;s manager&#8217;s manager?<br />
What is the total salary of my direct reports (people who work directly for me)?<br />
What is the total salary of my indirect reports (people who work for people who work for me)?</p>
<p>I am sure there are many more questions but these should serve as a starting point. Some of the questions only require one level of the hierarchy (who works for me, or who do I work for). Those are simple enough to answer, and in fact can be answered with the simple alias structure already shown in this post. But in order to traverse the tree for multiple levels I need a solution that is a but more robust.</p>
<h3>Next Time</h3>
<p>In the next post of this series I want to talk about some of the different challenges encountered when working with recursive data. Once I define the challenges I will be in a position to start talking about solutions. As a preview, here are the four types of hierarchies I will be talking about:</p>
<ul>
<li>Clean &#8211; a hierarchy with clean data, consistent node depths, and consistent node paths</li>
<li>Unbalanced- a hierarchy with inconsistent node depths</li>
<li>Ragged- a hierarchy with inconsistent node paths</li>
<li>Lateral- a hierarchy with sideways node paths</li>
</ul>
<p>If it is not clear what some of those mean, don&#8217;t be too concerned; I will be defining each with examples in the next post.</p>
<p>Finally, here is a preview of the various solutions I will talk about:</p>
<ul>
<li>Universe aliases</li>
<li>Flattened structures (columns or snowflake tables)</li>
<li>Ancestor / Descendant model</li>
<li>Depth first tree traversal</li>
</ul>
<p>And a few that I won&#8217;t:</p>
<ul>
<li>Oracle CONNECT BY PRIOR</li>
<li>Stored procedures</li>
</ul>
<p>Part II of this series will talk in more detail about each of the recursive challenges. After I detail the different challenges the next post will talk about the solutions. My plans for the final post for this series are to review the impact of each solution on the native drilling functionality and then to wrap things up.</p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Bill_of_materials">Wikipedia on Inventory BOM</a> in case you are unfamiliar with the concept of inventory data</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/06/16/universe-models-for-recursive-data-part-i-introduction/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mastering BusinessObjects 2010 Review</title>
		<link>http://www.dagira.com/2010/06/11/mastering-businessobjects-2010-review/</link>
		<comments>http://www.dagira.com/2010/06/11/mastering-businessobjects-2010-review/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 20:13:24 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 Mastering ... Melbourne]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=291</guid>
		<description><![CDATA[I was fortunate to once again be invited down to the Mastering BusinessObjects conference in Australia. I hope this conference continues to do well because I certainly enjoy going. Two weeks prior to this conference I was at ASUG Annual Conference /  SAPPHIRE, and the difference is substantial. SAPPHIRE is HUGE, which might explain [...]]]></description>
			<content:encoded><![CDATA[<p>I was fortunate to once again be invited down to the Mastering BusinessObjects conference in Australia. I hope this conference continues to do well because I certainly enjoy going. Two weeks prior to this conference I was at ASUG Annual Conference /  SAPPHIRE, and the difference is substantial. SAPPHIRE is HUGE, which might explain why their name is in ALL CAPS. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  The Mastering conference is much smaller (they&#8217;re only just getting started, really) and feels much more intimate. I talked to quite a few folks and got to hear some really interesting stories.</p>
<p>And like last year I got a few pictures&#8230; <span id="more-291"></span></p>
<p>The Airbus is an amazing airplane. It&#8217;s huge (double-decker) but incredibly smooth and quiet. I really enjoy flying on this plane.</p>
<p><img src="/images/2010_melbourne/airbus.jpg" width="450" height="338" border="2" alt="Airbus picture" title="Airbus, a very comfortable way to fly long distances" /></p>
<p>I got to Melbourne early in the morning after flying all night. Here was the view from my hotel (quite a bit different from Manly last year).</p>
<p><img src="/images/2010_melbourne/skyline.jpg" width="450" height="338" border="2" alt="Melbourne skyline" title="Downtown skyline for Melbourne, Australia" /></p>
<p>They took a number of pictures of the speakers. Here&#8217;s one of me where I am obviously trying to make a point. </p>
<p><img src="/images/2010_melbourne/making_a_point.jpg" width="450" height="300" border="2" alt="Making a point" title="Making a point" /></p>
<p>One night I was invited to join Tom Nather (and his wonderful wife and daughter) for dinner&#8230;</p>
<p><img src="/images/2010_melbourne/dinner.jpg" width="450" height="338" border="2" alt="Dinner with Tom" title="Dinner with Tom and family" /></p>
<p>&#8230; on this trolley car&#8230;</p>
<p><img src="/images/2010_melbourne/trolley.jpg" width="450" height="338" border="2" alt="Trolley dinner car" title="Trolley dinner car" /></p>
<p>The trolley spent 90 minutes driving around Melbourne while we ate a wonderful meal and were entertained by the restaurant staff. The food was amazing. After the food, we walked back to our hotel and saw the flaming casino.</p>
<p><img src="/images/2010_melbourne/casino_flames.jpg" width="450" height="338" border="2" alt="Flaming Casino" title="Flaming Casino" /></p>
<p>The jets of fire go off every hour on the hour. We were across the river when I took this picture and we could still feel the heat!</p>
<p>On our continued walk back we saw this restaurant:</p>
<p><img src="/images/2010_melbourne/lord_of_the_fries.jpg" width="450" height="338" border="2" alt="Lord of the Fries" title="Lord of the Fries, a restaurant in Melbourne, Australia" /></p>
<p>On Thursday I had a free day before heading back home. I walked all around downtown area looking for fun shops. I love learning about new musical artists, so I searched for music stores within easy walking distance of my hotel. I found five. Four were local independent stores like Record Collectors Corner:</p>
<p><img src="/images/2010_melbourne/record_collector_corner.jpg" width="450" height="338" border="2" alt="Record Collector Corner" title="Record Collectors Corner, Melbourne, Australia" /></p>
<p>or the appropriately named Basement Discs:</p>
<p><img src="/images/2010_melbourne/basement_discs.jpg" width="338" height="450" border="2" alt="Basement Discs" title="Basement Discs, Melbourne, Australia" /></p>
<p>I was also drawn to what I am calling a &#8220;Corvette Truck&#8221; because I don&#8217;t know of any other way to describe it:</p>
<p><img src="/images/2010_melbourne/corvette_truck.jpg" width="450" height="338" border="2" alt="Corvette Truck" title="Doesn't this look like a Corvette with a truck bed?" /></p>
<p>It&#8217;s a GM vehicle, but not one that they sell here in the United States. It sure looked fun to drive though. Even if the steering wheel was on the wrong side&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/06/11/mastering-businessobjects-2010-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mastering BusinessObjects 2010 Day 2</title>
		<link>http://www.dagira.com/2010/06/01/mastering-businessobjects-2010-day-2/</link>
		<comments>http://www.dagira.com/2010/06/01/mastering-businessobjects-2010-day-2/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 11:16:28 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 Mastering ... Melbourne]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=279</guid>
		<description><![CDATA[Today we closed the Mastering BusinessObjects 2010 conference. I presented my &#8220;Return of the Variables&#8221; talk, and afterwards I had someone come up to me and saw what I always love to hear: &#8220;You just solved one of my problems.&#8221; 
Tom Nather did a very detailed session on setting up the configuration for single sign-on [...]]]></description>
			<content:encoded><![CDATA[<p>Today we closed the Mastering BusinessObjects 2010 conference. I presented my &#8220;Return of the Variables&#8221; talk, and afterwards I had someone come up to me and saw what I always love to hear: &#8220;You just solved one of my problems.&#8221; </p>
<p>Tom Nather did a very detailed session on setting up the configuration for single sign-on (SSO). I&#8217;ve been away from the server stuff for a while, so it was good to see the process laid out so cleanly.</p>
<p>Fellow SAP Mentor Ingo Hilgefort did a keynote this morning where he outlined current (SP3) and future (XI 4) product features, concepts, and directions. He was (rather predictably I think) asked about Desktop Intelligence, and just like every other time I have heard this question asked, the answer was: &#8220;It&#8217;s gone.&#8221; With folding now in 3.1 and the data manager coming in 4.0 it really seems like it&#8217;s time to read the writing on the wall and move on. The only big remaining &#8220;gotcha&#8221; for Desktop Intelligence users is the lack of scripting support (VBA) in the rich client. In many cases what I have seen scripting used for is now covered by the standard scheduling or other processes.</p>
<p>I had some really good conversations with folks here in Melbourne, and I thoroughly enjoyed my time here at the conference. It&#8217;s so much easier (it seems) to connect with people in a smaller setting.</p>
<p>After the conference Tom invited me to go with his family to eat dinner on a train. Who was I to refuse? <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It was a wonderful dinner, served on a trolley car that drove around the city for an hour and a half while we ate. The food was wonderful, the company even more so.</p>
<p>Tomorrow I am delivering a full-day seminar titled, &#8220;From Universe Development to Report Generation: The Untold Story.&#8221; It should be fun. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/06/01/mastering-businessobjects-2010-day-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Mastering BusinessObjects 2010 Day 1</title>
		<link>http://www.dagira.com/2010/05/31/mastering-businessobjects-2010-day-1/</link>
		<comments>http://www.dagira.com/2010/05/31/mastering-businessobjects-2010-day-1/#comments</comments>
		<pubDate>Mon, 31 May 2010 22:09:56 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 Mastering ... Melbourne]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=278</guid>
		<description><![CDATA[Yesterday was the first full day of the conference, and it went very well. Timo Elliott did his typical excellent job of opening the conference with a keynote full of possibilities. He remains very enthusiastic about the social aspects of BI, which is something that I think I agree is coming even if I&#8217;m not [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was the first full day of the conference, and it went very well. Timo Elliott did his typical excellent job of opening the conference with a keynote full of possibilities. He remains very enthusiastic about the social aspects of BI, which is something that I think I agree is coming even if I&#8217;m not exactly sure when or how it is coming.</p>
<p>The second keynote was from Rubbermaid. They have done some interesting stuff with dashboards (which was fun to see) but one of the most impressive things to me was the statement that their company has at least one product in 90% of American households. That&#8217;s some serious market penetration.</p>
<p>I thought my talk went well. I had some great conversations afterwards about working with recursive data, including one interesting challenge related to investment funds. No, not a ponzi scheme, it&#8217;s a legitimate question. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The evening keynote was from Glenn Singleman. I had never heard of him, but he was an excellent story teller. He started out his career as a doctor in the emergency room. One day a co-worker asked him to go &#8220;canyoning&#8221; on the weekend, and when he asked what it was (and found out it involved hiking through deep canyons and the occasional descent over a waterfall) he was inclined to pass. A different co-worker then asked him to take his weekend shift so he could go, and Dr. Singleman decided that he would rather go hiking in wet canyons than work yet another night shift. The decision changed his life. He&#8217;s now an adventure documentary film maker along with being a doctor, and the adventures he has had&#8230;</p>
<p>He and his wife recently set a number of records by base jumping off of the highest cliff they could find, something over 6,000m (23,000 ft). From their web site:</p>
<blockquote><p>On May 23rd, 2006 that strength and persistence prevailed, and they achieved their dream. Glenn and Heather successfully climbed Mt Meru in the Indian Himalaya and BASEjumped in wingsuits from a ledge at 6604 metres. It was a new world record, a world first for a woman and a husband and wife team.</p></blockquote>
<p>And here I thought remodeling a house was the scariest thing a husband and wife could do together&#8230; <img src='http://www.dagira.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://www.baseclimb.com/">BASEClimb.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/05/31/mastering-businessobjects-2010-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arrived in Rainy Melbourne</title>
		<link>http://www.dagira.com/2010/05/29/arrived-in-rainy-melbourne/</link>
		<comments>http://www.dagira.com/2010/05/29/arrived-in-rainy-melbourne/#comments</comments>
		<pubDate>Sun, 30 May 2010 01:12:40 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 Mastering ... Melbourne]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=276</guid>
		<description><![CDATA[I had a (long) flight from Los Angeles to Melbourne; the flight went very well. By that I mean I slept through most of it.   They also had a &#8220;tail cam&#8221; which was really fun once the sun came up. They had a camera mounted in the tail so you could see the [...]]]></description>
			<content:encoded><![CDATA[<p>I had a (long) flight from Los Angeles to Melbourne; the flight went very well. By that I mean I slept through most of it. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  They also had a &#8220;tail cam&#8221; which was really fun once the sun came up. They had a camera mounted in the tail so you could see the view from behind the plane. It was especially fun to watch the landing from that perspective.</p>
<p>The folks at Eventful Management have once again done an outstanding job. I took a quick tour of the facilities, and everything is quite nice. We have over 200 folks attending the conference this year which is up from last year. I like smaller conferences because it&#8217;s much easier to connect with folks. I&#8217;ve already met Josh in the lobby, and Tom and his lovely family in the lounge area. I will be going with Tom on a tour of the city later today, then tonight there is a speaker orientation meeting. The opening keynote and reception follow.</p>
<p>Maybe they&#8217;ll have more of this:</p>
<p><img src="/images/vegemite.jpg" width="500" height="375" border="2" alt="Vegemite" title="He just smiled and gave me a vegemite sandwich..." /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/05/29/arrived-in-rainy-melbourne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Down Under All Over Again</title>
		<link>http://www.dagira.com/2009/11/17/down-under-all-over-again/</link>
		<comments>http://www.dagira.com/2009/11/17/down-under-all-over-again/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 04:02:07 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 Mastering ... Melbourne]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=224</guid>
		<description><![CDATA[I got an exciting email earlier&#8230; it seems that I have been invited to attend (and present at) the second annual Mastering Business Objects conference in Australia. In my opinion, the conference last year was an excellent event (and I&#8217;m not just saying that because I got to go.) I tend to prefer smaller gatherings [...]]]></description>
			<content:encoded><![CDATA[<p>I got an exciting email earlier&#8230; it seems that I have been invited to attend (and present at) the second annual Mastering Business Objects conference in Australia. In my opinion, the conference last year was an excellent event (and I&#8217;m not just saying that because I got to go.) I tend to prefer smaller gatherings like user groups or smaller conferences because I get to meet and interact with a lot more people. Oh, and I got to go surfing. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This year the event will move a bit south to Melbourne. Here are the specific details as recently published:</p>
<p><a href="http://www.masteringbusinessobjects.com/mbo/">Mastering Business Objects</a><br />
May 31 2010 – June 2 2010<br />
Grand Hyatt, Melbourne, Australia </p>
<p>I will post more details as they become available.</p>
<p><em>It&#8217;s funny because just this evening I was talking to Daniel (my 3rd grader) and he wanted to know (as he was petting one of our family cats) if any cats were poisonous. I told him that as far as I knew, there was only one poisonous mammal, the <a href="http://en.wikipedia.org/wiki/Platypus">platypus</a>. Which is native to&#8230; Australia. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  After a quick visit to Wikipedia I know now that there are a variety of shrews that are also poisonous, but I felt good about the fact that I at least remembered the platypus.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2009/11/17/down-under-all-over-again/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

