<?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>Rittman Mead Consulting &#187; Discoverer</title>
	<atom:link href="http://www.rittmanmead.com/category/discoverer/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rittmanmead.com</link>
	<description>Delivering Oracle Business Intelligence</description>
	<lastBuildDate>Mon, 06 Feb 2012 21:18:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Michael Armstrong-Smith Answers Your Discoverer Questions</title>
		<link>http://www.rittmanmead.com/2009/01/michael-armstrong-smith-answers-your-discoverer-questions/</link>
		<comments>http://www.rittmanmead.com/2009/01/michael-armstrong-smith-answers-your-discoverer-questions/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 22:27:17 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Discoverer]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/01/08/michael-armstrong-smith-answers-your-discoverer-questions/</guid>
		<description><![CDATA[Our good friend Michael Armstrong-Smith has just started a new initiative on his website, with a new series of free &#8220;Ask Michael&#8221; Webinars starting January 14th 2009. Michael is well known in the Discoverer world as the author of the Oracle Press Discoverer 10g Handbook (for which I guest-authored the chapter on Discoverer for OLAP, [...]]]></description>
			<content:encoded><![CDATA[<p>Our good friend Michael Armstrong-Smith has just started a new initiative on his website, with a new series of free <a href="http://www.ascbi.com/question.htm">&#8220;Ask Michael&#8221; Webinars</a> starting January 14th 2009.</p>
<p>Michael is well known in the Discoverer world as the author of the <a href="http://www.ascbi.com/books/10g-handbook.htm">Oracle Press Discoverer 10g Handbook</a> (for which I guest-authored the chapter on Discoverer for OLAP, trivia fans), is a regular contributor to the <a href="http://forums.oracle.com/forums/forum.jspa?forumID=56">Discoverer OTN Forum</a> and of course the IOUG and ODTUG user groups.</p>
<p>Michael will be answering questions not just on Discoverer, but also OBIEE and other BI technologies, so if you&#8217;ve got some time free on the 14th, pop over with your questions and say &#8220;hello&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/01/michael-armstrong-smith-answers-your-discoverer-questions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Automatic migration of a Discoverer EUL to an OBIEE Repository</title>
		<link>http://www.rittmanmead.com/2008/10/automatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-m/</link>
		<comments>http://www.rittmanmead.com/2008/10/automatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-m/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 15:27:05 +0000</pubDate>
		<dc:creator>Borkur Steingrimsson</dc:creator>
				<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/10/23/automatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-m/</guid>
		<description><![CDATA[The latest release of OBIEE, version 10.1.3.4 comes with a brand new demo repository and dashboards, that Mark already talked about, in this post. This is not the only new thing to come with this latest release. For the first time now, Oracle makes available a tool that allows the BI administrator to automatically generate [...]]]></description>
			<content:encoded><![CDATA[<p>The latest release of OBIEE, version 10.1.3.4 comes with a brand new demo repository and dashboards, that Mark already talked about, in <a href="http://www.rittmanmead.com/2008/10/14/exploring-the-new-obiee-10134-samples-sales-application-data/" title="Exploring the New OBIEE 10.1.3.4 Samples Sales Application &amp; Data">this post</a>. This is not the only new thing to come with this latest release. For the first time now, Oracle makes available a tool that allows the BI administrator to automatically generate an OBIEE repository from an exported Discoverer End-User Layer (EUL) file (.EEX) ! For some time now, OBIEE customers have been able to get access to this tool via Metalink, but this release is the first one to include this handy tool in to the wild.</p>
<p>The tool is a part of the Administration toolset, so it’s only available on the Microsoft Windows platform. The program file is called MigrateEUL.exe and can be found in the OracleBI/server/Bin/ directory. The migration tool must be run on a machine with an existing OBIEE Administrator installation. This is a command line utility, so get ready to do some work in the Windows shell …</p>
<p>In this first release the migration utility only supports the generation of a repository file (.RPD) based on the business areas (BAs) that are contained in the exported .EEX file. This means that no Discoverer Workbooks can be migrated yet. This is planned for a later release. But what what we do get is a complete physical, business and presentation layer. This also includes join definitions, hierarchies for dimensions and calculations. When workbook migration will be made available we should expect to get a presentation services web catalog as well. Also due to this limitation, some things in the Discoverer EUL can not be migrated, such as optional conditions that would normally be represented as saved filters in OBIEE web catalog.</p>
<p>First, to be able to do this migration you must make sure you are already running on the latest release of Oracle Discoverer, 10.1.2.X (if your production environment is not running in this version, I’d suggest you get the latest release of the Discoverer Desktop tools, create a dummy EUL in your test environment and use that to quickly migrate your EUL, so that you can still go on with testing this migration utility). Using the Discoverer Administrator tool, we must first export the desired BAs to a file, as I have already mentioned. Once that is done, you simply run the command line utility, passing the name of the .EEX file as an argument:</p>
<blockquote>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">- MigrateEUL.exe vidstr.eex</p>
</blockquote>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">The generated results will be placed in the same folder as the input .EEX file</p>
<ul>
<li>vidstr.rpd &#8211; This is the resulting OBIEE repository</li>
<li>vidstr.migration.log &#8211; Progress of the migration</li>
<li>vidstr.exception.log &#8211; Any exceptions such as folders and joins that could not be migrated</li>
</ul>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">&nbsp;</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal"><strong>The Logs</strong></p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">The migration.log will look something like this:</p>
<pre>
  Oracle BI SE - EE Migration Assistant Version 10.1.3.4.0
  Repository creation started...
  ****************************************************************
  Business Area : Video Store Tutorial
  ****************************************************************
  Custom Folder : Alternate Sort Store Size
  Custom Folder : Alternate Sort Days
  -- Processing EUL Joins....
  -- Processing Folder(s) based on EUL Joins....
  ## List of Folder(s) with SKIPPED JOINS / PATHS
  FOLDER_ID SELECTED = ### FOLDER_NAME JOIN_NAME
  --------------------------------------------
  ### FOLDER CONTAINER MAPPING ###
  Mapping For Folder : Alternate Sort Days : Alternate Sort Days
  Mapping For Folder : Alternate Sort Store Size : Alternate Sort Store Size
  Mapping For Folder : Calendar Date : Calendar Date
  Mapping For Folder : Fiscal Date : Fiscal Date
  Mapping For Folder : Products : Products
  Mapping For Folder : Sales Facts : Sales Facts
  Mapping For Folder : Store : Store
  Mapping For Folder : Target Sales : Target Sales
  -- Processing Complex Folder(s)....
  ** Complex Folder : Monthly Sales Analysis
  Complex Folder is not based on any folder in the current Business Area : Video Store Tutorial
  Complex Folder cannot be migrated!!!

  -- Processing Dimension(s)....
  ** Dimension Video Analysis Calendar Time Hierarchy based on a Complex Folder is not supported!!!
  ** Dimension Video Analysis Store Hierarchy based on a Complex Folder is not supported!!!

  ************* CREATING PHYSICAL LAYER *************
  -- Creating Database...[DONE]
  -- Creating Connection Pool...[DONE]
  -- Creating Physical Table(s)...
  -- Physical Table(s) creation...[DONE]
  -- Creating Physical Join(s)...
  -- Physical Join(s) creation...[DONE]
  ************* PHYSICAL LAYER CREATION DONE *************

  ************* CREATING LOGICAL LAYER *************
  -- Creating Subject Area...[DONE]
  -- Creating Logical Table(s)...
  -- Creating Logical Join(s)...
  -- Logical Join(s) creation...[DONE]
  -- Creating Calculation(s)...
  - Creating Complex Folder Calculation(s)...
  -- Calculation(s) creation...[DONE]
  -- Logical Table(s) creation...[DONE]
  -- Creating Dimension(s)...
  Dimension : Calendar Date Hierarchy
  Dimension : Fiscal Calendar Hierarchy
  Dimension : Product Hierarchy
  Dimension : Store Hierarchy
  -- Dimension(s) creation...[DONE]
  ************* LOGICAL LAYER CREATION DONE *************
  ************* CREATING PRESENTATION LAYER *************
  -- Creating Presentation Folder(s)...
  Folder : Video Analysis Information
  *** Admin Optional Condition Year is 1998 or 1999 will not be migrated to a repository!!!
  *** Admin Optional Condition Department is Video Rental or Video Sale will not be migrated to a repository!!!
  Folder : Stores and Sales Details
  Folder : Products
  Folder : Store
  Folder : Calendar Date
  Folder : Fiscal Date
  Folder : Sales Facts
  Folder : Target Sales
  -- Presentation Folder(s) creation...[DONE]

  ************* PRESENTATION LAYER CREATION DONE *************

  ------------------- All Business Area(s) processed -----------------
  -- Creating Security Filter(s)...
  -- Security Filter(s) creation...[DONE]
  -- Creating User(s)...

  EUL
  PUBLIC
  VIDEO5

  -- User(s) creation...[DONE]

  The migrated repository is saved at C:\TEMP\vidstrEUL.rpd
  ------------------------------------------
  EUL MIGRATION SUCCESSFUL
  ------------------------------------------</pre>
<p>Anything that doesn’t get migrated or fails during the execution of the tool will get looged in to the the migration log as well as the execption log. The exception.log will only list, as the name suggests, the exceptions that occurred during the pass through.</p>
<pre>
  Oracle BI SE - EE Migration Assistant Version 10.1.3.4.0
  ****************************************************************
  Business Area : Video Store Tutorial
  ****************************************************************
  ## List of Folder(s) with SKIPPED JOINS / PATHS
  FOLDER_ID SELECTED = ### FOLDER_NAME JOIN_NAME
  ——————————————————————

  ** Complex Folder : Monthly Sales Analysis
  Complex Folder is not based on any folder in the current Business Area : Video Store Tutorial
  Complex Folder cannot be migrated!!!
  ** Dimension Video Analysis Calendar Time Hierarchy based on a Complex Folder is not supported!!!
  ** Dimension Video Analysis Store Hierarchy based on a Complex Folder is not supported!!!
  *** Admin Optional Condition Year is 1998 or 1999 will not be migrated to a repository!!!
  *** Admin Optional Condition Department is Video Rental or Video Sale will not be migrated to a repository!!!</pre>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">The interesting things we see here are:</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">&nbsp;</p>
<ul>
<li>Complex folders that are based on other complex folders are not supported (yet?)</li>
<li>Hierarchies based on Complex Folders are not supported</li>
<li>Optional Conditions are not supported (as mentioned above) as they’d need to be placed in the web catalog</li>
</ul>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px"><strong>Configuration Parameters</strong></p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">The migration tool reads configuration parameters from a file called MigrationConfig.properties that is stored in the same directory as the executable. SInce the only command line argument the tool expects is the name of the Discoverer .EEX, all other configurations need to be stated in this properties file.</p>
<table border="2">
<tr>
<th>Parameter</th>
<th>Description</th>
</tr>
<tr>
<td>CreateAggregatedCols</td>
<td>True = Aggregated Columns with functions like SUM, MIN, MAX, AVG and COUNT will be created for Measure columns<br />
False = Aggregated Columns will be created for Measure columns based on the DEFAULT AGGREGATION set in the EUL</td>
</tr>
<tr>
<td>CreateSeperateRPDs</td>
<td>True = Each Business Area in the EUL export ﬁle will be migrated to a seperate repository<br />
False = All the Business Areas in the EUL export ﬁle will be migrated to a single repository</td>
</tr>
<tr>
<td>ExcludeJoins</td>
<td>Valid values are comma seperated JOIN_IDs available for every join created in Discoverer. These Joins will not be migrated</td>
</tr>
<tr>
<td>ConsiderMultiplePaths</td>
<td>True = The Joins skipped for eliminating the Circular and Multiple Join paths will be considered for migration<br />
False = The Joins skipped for eliminating the Circular and Multiple Join paths will not be migrated</td>
</tr>
<tr>
<td>IncludePathsForFolders</td>
<td>Valid values are comma seperated TABLE_ID values generated in the log ﬁle listing the folders having joins that are skipped for eliminating the Circular and Multiple Join paths. IF ConsiderMultiplePaths property is TRUE and there are no values speciﬁed fIncludePathsForFolders then all the Skipped Joins will be migrated</td>
</tr>
<tr>
<td>DataSourceName</td>
<td>This property value is the name of the System Datasource Name used for connecting to the Database</td>
</tr>
<tr>
<td>Username</td>
<td>This property value is the Username for connecting to the Database</td>
</tr>
</table>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">&nbsp;</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">Looking at the MigrationConfig.properties file we can see that the following is the default setting:</p>
<pre>
  CreateAggregatedCols=FALSE
  CreateSeperateRPDs=FALSE
  ExcludeJoins=
  ConsiderMultiplePaths=TRUE
  IncludePathsForFolders=
  DataSourceName=
  Username=</pre>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">Sticking with the Discoverer Video Store Tutorial, here is what the business area looks like in the Administration tool:</p>
<p style="text-align: center; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/discoverer-1.png" alt="Discoverer_1" height="237" width="256" /></p>
<p style="text-align: center; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">&nbsp;</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">After we run the migration tool, we get a new .RPD called vidstr.rpd. Opening this repository in the OBIEE Administration tool, we must first set the properties of the connection pool, so that the BI Server can connect to the database, namely the TNS connection name, username and password.</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">&nbsp;</p>
<p style="text-align: center"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/presentation-layer-1.png" alt="Presentation Layer 1" height="195" width="228" /> <img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/logical-layer-1.png" alt="Logical_Layer_1" height="323" width="258" /> <img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/physical-layer-1.png" alt="Physical_Layer_1" height="216" width="198" /></p>
<p style="text-align: center">&nbsp;</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">Validate and save the repository. Notice the warning that the Administrator user has been created using a blank password.</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">Now would be a good time to shut down the BI Server as well as the BI Presentation Server.</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">Copy the vidstr.rpd file to the OracleBI/server/Repository/ directory. Change the OracleBI/Server/Config/NQSConfig.ini configuration file to point to the new repository.</p>
<pre>
  #Star = samplesales.rpd, DEFAULT;
  Star = vidstr.rpd, DEFAULT;</pre>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">Before we go on, we might also want to create a new web catalog to test the migration in Answers. Edit the OracleBIData/web/conf/instanceconfig.xml file to point to a new catalog. Simply giving it a new name will create a new blank catalog once the BI Presentation Service has been started.</p>
<pre>
  &lt;CatalogPath&gt;E:/OracleBIData/web/catalog/vidstr&lt;/CatalogPath&gt;</pre>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">Restart the BI Server and the BI Presentation Server services and log in to the Oracle BI web application and we will see that the “Business Area: Video Store Tutorial” Subject Area is now available for querying.</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">&nbsp;</p>
<p style="text-align: center"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/answers-1.png" alt="Answers_1" height="470" width="480" /></p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; min-height: 14px">&nbsp;</p>
<p style="text-align: center">&nbsp;</p>
<p style="text-align: center"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/10/answers-2.png" alt="Answers_2" height="480" width="252" /></p>
<p style="text-align: center">&nbsp;</p>
<p style="font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal">To conclude this, we can see that it is quite straight forward to migrate a Discoverer EUL to OBIEE. However, there are still some fundamental differences between the architecture of the two products that make it difficult to automatically migrate everything. But what we do get is a very good head start. The Video Store Sample I used here is a very simple business area, where as your EUL might contain quite a lot more complicated logic. Things can get hairy very fast when your Discoverer join configurations are slightly more complicated than a simple star. But don’t hesitate to give it a go, even if just to demonstrate what your current Discoverer reporting environment might look like, in the spiffy new OBIEE …</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/10/automatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-migration-of-a-discoverer-eul-to-an-obiee-repositoryautomatic-m/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Live from Denmark</title>
		<link>http://www.rittmanmead.com/2008/09/live-from-denmark/</link>
		<comments>http://www.rittmanmead.com/2008/09/live-from-denmark/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 21:09:51 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[Oracle BI Apps]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/09/07/live-from-denmark/</guid>
		<description><![CDATA[I&#8217;m currently sitting in my hotel room in Fredericia, Denmark, as tomorrow I&#8217;m running a customized version of our OBIEE course for a new customer over here. I flew in to Copenhagen Airport late this afternoon and then got the train from the airport to where I am now; the journey on the train was [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently sitting in my hotel room in Fredericia, Denmark, as tomorrow I&#8217;m running a customized version of our OBIEE course for a new customer over here. I flew in to Copenhagen Airport late this afternoon and then got the train from the airport to where I am now; the journey on the train was around two and a half hours and as I wasn&#8217;t quite sure that I got on the right train, I spent most of the journey (a) not really sure if the sign above me said my seat was already reserved, and (b) whether I was in fact going in the right direction. In the end I got here around 8pm and now I&#8217;ve been spending most of the evening answering emails and getting things set up for tomorrow.</p>
<p>The past few weeks have been fairly hectic what with the preparation for my Open World sessions, adding some new material to the OBIEE course and pulling the seminar material together for my new Oracle 11g Data Warehousing seminar that&#8217;s running for the first time in Denmark next week. Apart from that I&#8217;ve been teaching and consulting in OBIEE over in Galway (a very nice place), doing some work with Borkur on a Discoverer project in London, and appearing on the panel for a BI Thought Leaders&#8217; forum that Imperial College kindly arranged last week. Between now and Open World I&#8217;ve got the three days course delivery this week, then back to London for more Discoverer work, then I&#8217;m doing some technical consulting for an Oracle BI Applications project back in the UK for two days, then off to Denmark for the DW seminar, then back to the UK for a day before flying off to San Francisco. In all it&#8217;s turning into one of those months where we&#8217;re working flat out and often away from home, in my experience it&#8217;s often now (autumn) and the early part of the year (February through to May) when we&#8217;re the most busiest and this year Open World falls right into the middle of it. Hopefully come the end of September things will have calmed down a bit at least in terms of R&#038;D work, however I suspect the first OBIEE 11g beta will arrive around then so I doubt I&#8217;ll actually get much spare time.</p>
<p>Apart from consulting and training, the other thing we&#8217;ve been working on is pulling an agenda together for the first of our &#8220;Oracle BI Training Days&#8221; events, where we&#8217;ll be hiring out a venue in London for three days and offering intensive, expert-level training on OBIEE and the Oracle BI Applications for a small, public audience, plus a social event on one of the evenings where we&#8217;ll all get a chance to go out for a meal and shoot the breeze on Oracle BI development. There&#8217;ll be more news on this during the next week or so, but if you&#8217;re interested the dates are likely to be the 22nd through to the 24th of October, the venue will be Canary Wharf London, and we&#8217;ll post more details soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/09/live-from-denmark/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Resolving Fan Traps and Circular Joins using OBIEE</title>
		<link>http://www.rittmanmead.com/2008/08/resolving-fan-traps-and-circular-joins-using-obiee/</link>
		<comments>http://www.rittmanmead.com/2008/08/resolving-fan-traps-and-circular-joins-using-obiee/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 17:47:35 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Discoverer]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/08/26/resolving-fan-traps-and-circular-joins-using-obiee/</guid>
		<description><![CDATA[If you&#8217;re looking to migrate data from a Discoverer system to Oracle Business Intelligence Enterprise Edition, one of the first things you&#8217;ll probably end up thinking about is how your (not necessarily star schema-based) End User Layer will translated to a (star schema mandatory) Common Enterprise Information Model. In particular, Discoverer allows tables to have [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking to migrate data from a Discoverer system to Oracle Business Intelligence Enterprise Edition, one of the first things you&#8217;ll probably end up thinking about is how your (not necessarily star schema-based) End User Layer will translated to a (star schema mandatory) Common Enterprise Information Model. In particular, Discoverer allows tables to have more than one join route between them, and it also allows circular joins so that, for example, an employee can belong to a department, which belongs to a region, which has an employee as the regional manager.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoin1-2.tiff" height="228" width="278" border="0" hspace="4" vspace="4" alt="Circularjoin1-2" /></p>
<p>If you try and bring this arrangement in to the Physical Layer of your OBIEE semantic model, the administration tool will initially allow this and your repository verifies as being correct.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoins3.jpg" height="208" width="500" border="0" hspace="4" vspace="4" alt="Circularjoins3" /></p>
<p>However if you then drag and drop the tables into the logical business model layer, all three lookup tables are shown as dimension tables, as you would expect,</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoins4.jpg" height="142" width="186" border="0" hspace="4" vspace="4" alt="Circularjoins4" /></p>
<p>and the BI Administrator tool shows an error message when you try and verify the repository, saying that circular joins aren&#8217;t supported.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoins5.jpg" height="171" width="500" border="0" hspace="4" vspace="4" alt="Circularjoins5" /></p>
<p>In reality, you don&#8217;t want three dimension tables (departments, regions, employees) joining to the fact table (appointments), you just want one, so you&#8217;re going to have to use the mapping ability in the business model and mapping layer to join these three lookup tables together under one logical table source. For the employee table though, rather than join it through this circular join, you need to create an alias for it in the physical layer (in my case I call it CIRC_JOIN_REGEMP) like this:</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoin6.jpg" height="126" width="200" border="0" hspace="4" vspace="4" alt="Circularjoin6" /></p>
<p>and join the region table to this rather than the employees table.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoin7.jpg" height="227" width="500" border="0" hspace="4" vspace="4" alt="Circularjoin7" /></p>
<p>Then you can create a single logical dimension table within your logical business model, and map the logical table source to the join between the four lookup tables, including your new alias for the employee table.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circularjoins8.jpg" height="404" width="435" border="0" hspace="4" vspace="4" alt="Circularjoins8" /></p>
<p>When you add the new columns into the logical table and then run a report, the figures come up as expected, with the regional manager details displayed correctly, the alias having resolved the circular join.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/circjoin11.jpg" height="231" width="500" border="0" hspace="4" vspace="4" alt="Circjoin11" /></p>
<p>Another issue that often comes up with Discoverer is &#8220;Fan Traps&#8221;. Fan traps are an oddity of SQL where, if you have say a dimension table full of account details, and two facts that join to it, say with sales figures in one and budget figures in the other, logically if you query the two together you should get a set of results like this, taken from the Oracle document <a href="http://www.oracle.com/technology/products/discoverer/pdf/Discoverer_FanTrap.pdf">&#8220;Oracle Discoverer&#8217;s Fan Trap Resolution &#8211; Correct Results Every Time&#8221;</a></p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/fantrap1.jpg" height="387" width="500" border="0" hspace="4" vspace="4" alt="Fantrap1" /></p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/fantrapexpectedres.jpg" height="141" width="500" border="0" hspace="4" vspace="4" alt="Fantrapexpectedres" /></p>
<p>The problem is though, that if you issue the obvious query in SQL, the results come back wrong, because SQL does a cartesian join between the two fact tables and over-counts the figures.</p>
<pre>SQL&gt; select a.acc_name,
2  sum(sales),
3  sum(budget)
4  from fan_trap_accounts a, fan_trap_sales s, fan_trap_budget b
5  where a.acc_id = s.acc_id
6  and   a.acc_id = b.acc_id
7  group by a.acc_name
8  order by a.acc_name
9  /

ACC_NAME             SUM(SALES) SUM(BUDGET)
-------------------- ---------- -----------
ACCOUNT1                    900        1050
ACCOUNT2                    130         200
ACCOUNT3                    600         750
ACCOUNT4                    600         600
</pre>
<p>Now Discoverer handles this quite well, and automatically rewrites the query internally to use two in-line views, one to join the sales and accounts tables, and one to join the budget and accounts tables, and then join the results together with the correct aggregation applied. So how does OBIEE handle this? Does it ignore the potential error and give you the wrong figures, or does it even disallow this sort of schema design in the first place? Let&#8217;s take a look.</p>
<p>The BI Administrator tool doesn&#8217;t have a problem with this sort of arrangement in the physical layer:</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/fantrap2.jpg" height="164" width="436" border="0" hspace="4" vspace="4" alt="Fantrap2" /></p>
<p>The logical business model is fine as well, with the sales and budget tables being displayed as fact tables, and the accounts table as a dimension, as you would expect.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/fantrap3.jpg" height="50" width="166" border="0" hspace="4" vspace="4" alt="Fantrap3" /></p>
<p>In fact, when you run a query, using the same selection as our SQL statement, the figures do in fact come out correct.</p>
<p style="text-align:center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/08/fantrap4-1.jpg" height="344" width="478" border="0" hspace="4" vspace="4" alt="Fantrap4-1" /></p>
<p>So what&#8217;s happening? Well, if you take a look at the query log and see how the logical, and physical, SQL queries are put together, you can see that OBIEE is doing what Discoverer does, but within the BI Server rather than writing a single SQL statement that uses inline views. The BI Server effectively creates two inline views that in turn lead to two physical SQL statements being sent to Oracle, the BI Server then joins them together and returns the data back as a single result set.</p>
<pre>-------------------- Execution plan:

RqBreakFilter &lt;&lt;2750&gt;&gt;[1] [for database 0:0,0]
    RqList &lt;&lt;2641&gt;&gt; [for database 0:0,0]
        case  when D903.c1 is not null then D903.c1 when D903.c2 is not null then D903.c2 end  as c1 GB [for database 3023:5710,44],
        D903.c3 as c2 GB [for database 3023:5710,44],
        D903.c4 as c3 GB [for database 3023:5710,44]
    Child Nodes (RqJoinSpec): &lt;&lt;2752&gt;&gt; [for database 0:0,0]
        (
            RqList &lt;&lt;2795&gt;&gt; [for database 0:0,0]
                D902.c1 as c1 [for database 3023:5710,44],
                D901.c1 as c2 [for database 3023:5710,44],
                D901.c2 as c3 GB [for database 3023:5710,44],
                D902.c2 as c4 GB [for database 3023:5710,44]
            Child Nodes (RqJoinSpec): &lt;&lt;2798&gt;&gt; [for database 0:0,0]

                    (
                        RqList &lt;&lt;2653&gt;&gt; [for database 3023:5710:ora11g,44]
                            FAN_TRAP_ACCOUNTS.ACC_NAME as c1 GB [for database 3023:5710,44],
                            sum(FAN_TRAP_SALES.SALES by [ FAN_TRAP_ACCOUNTS.ACC_NAME] ) as c2 GB [for database 3023:5710,44]
                        Child Nodes (RqJoinSpec): &lt;&lt;2686&gt;&gt; [for database 3023:5710:ora11g,44]
                            FAN_TRAP_ACCOUNTS T6678
                            FAN_TRAP_SALES T6685
                        DetailFilter: FAN_TRAP_ACCOUNTS.ACC_ID = FAN_TRAP_SALES.ACC_ID [for database 0:0]
                        GroupBy: [ FAN_TRAP_ACCOUNTS.ACC_NAME]  [for database 3023:5710,44]
                        OrderBy: c1 asc [for database 3023:5710,44]
                    ) as D901 FullOuterStitchJoin &lt;&lt;2744&gt;&gt; On D901.c1 =NullsEqual D902.c1; actual join vectors:  [ 0 ] =  [ 0 ]

                    (
                        RqList &lt;&lt;2690&gt;&gt; [for database 3023:5710:ora11g,44]
                            FAN_TRAP_ACCOUNTS.ACC_NAME as c1 GB [for database 3023:5710,44],
                            sum(FAN_TRAP_BUDGET.BUDGET by [ FAN_TRAP_ACCOUNTS.ACC_NAME] ) as c2 GB [for database 3023:5710,44]
                        Child Nodes (RqJoinSpec): &lt;&lt;2723&gt;&gt; [for database 3023:5710:ora11g,44]
                            FAN_TRAP_ACCOUNTS T6678
                            FAN_TRAP_BUDGET T6681
                        DetailFilter: FAN_TRAP_ACCOUNTS.ACC_ID = FAN_TRAP_BUDGET.ACC_ID [for database 0:0]
                        GroupBy: [ FAN_TRAP_ACCOUNTS.ACC_NAME]  [for database 3023:5710,44]
                        OrderBy: c1 asc [for database 3023:5710,44]
                    ) as D902
        ) as D903
    OrderBy: c1 asc [for database 0:0,0]

+++Administrator:2a0000:2a0001:----2008/08/26 17:24:48

-------------------- Sending query to database named ora11g (id: &lt;&lt;2653&gt;&gt;):

select T6678.ACC_NAME as c1,
     sum(T6685.SALES) as c2
from
     CUST_ORDER_HISTORY.FAN_TRAP_ACCOUNTS T6678,
     CUST_ORDER_HISTORY.FAN_TRAP_SALES T6685
where  ( T6678.ACC_ID = T6685.ACC_ID )
group by T6678.ACC_NAME
order by c1

+++Administrator:2a0000:2a0001:----2008/08/26 17:24:48

-------------------- Sending query to database named ora11g (id: &lt;&lt;2690&gt;&gt;):

select T6678.ACC_NAME as c1,
     sum(T6681.BUDGET) as c2
from
     CUST_ORDER_HISTORY.FAN_TRAP_ACCOUNTS T6678,
     CUST_ORDER_HISTORY.FAN_TRAP_BUDGET T6681
where  ( T6678.ACC_ID = T6681.ACC_ID )
group by T6678.ACC_NAME
order by c1
</pre>
<p>Now this strictly speaking isn&#8217;t as efficient as Discoverer&#8217;s approach, which uses a single SQL statement and does the join of the two inline views within the database, but it&#8217;s still pretty clever and would work for platforms that don&#8217;t support inline views. In a way its an &#8220;on the fly&#8221; creation of two logical table sources without you having to set this up explicitly in the logical business model.</p>
<p>One thing I haven&#8217;t tried out yet is how OBIEE handles queries that, in Discoverer, would cause a fan-trap detection error, i.e. queries that it can&#8217;t rewrite to use two or more inline views. I suspect that these sorts of scenarios, that usually involve facts of differing granularity, where circular joins exist or where the keys to the tables don&#8217;t correspond would get picked up by the general data modeling rules in OBIEE, but if anyone&#8217;s got any experiences with this then by all means leave a comment.</p>
<p>If you&#8217;re wondering what prompted this posting, I&#8217;m putting the finishing touches to my Oracle Open World presentation on OBIEE data modeling, and looking to cover off a few data modeling &#8220;oddities&#8221;. I&#8217;ll try and cover support for ragged/unbalanced/value-based hierarchies in a posting tomorrow, and finish up with how the logical business model supports the Kimball concept of Bridge Tables, but no-one seems to use them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/08/resolving-fan-traps-and-circular-joins-using-obiee/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

