<?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; obiee</title>
	<atom:link href="http://www.rittmanmead.com/tag/obiee/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>Working with OBIEE in Birmingham, and plans for the BI Apps</title>
		<link>http://www.rittmanmead.com/2008/04/working-with-obiee-in-birmingham-and-plans-for-the-bi-apps/</link>
		<comments>http://www.rittmanmead.com/2008/04/working-with-obiee-in-birmingham-and-plans-for-the-bi-apps/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 21:08:12 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[BI Apps]]></category>
		<category><![CDATA[obiee]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/04/06/working-with-obiee-in-birmingham-and-plans-for-the-bi-apps/</guid>
		<description><![CDATA[I&#8217;ve just arrived in Birmingham to be ready for a week of OBIEE data modeling for one of our clients up here. They have built an application that now needs some reports added, they&#8217;ve gone for OBIEE and my job is to create the logical model, map it on to their OLTP database, add security [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just arrived in Birmingham to be ready for a week of OBIEE data modeling for one of our clients up here. They have built an application that now needs some reports added, they&#8217;ve gone for OBIEE and my job is to create the logical model, map it on to their OLTP database, add security and so forth and get it ready for the reports. It&#8217;s going to be an interesting task as the data as it stands may or may not be suitable for transforming into a dimensional model, so we may need a bit of OWB to shape and integrate the data before it&#8217;s ready for importing. What I&#8217;m going to try and do is update the blog over the next few days with the techniques that I use (sort of a &#8220;prototype methodology&#8221;, something I&#8217;ve been planning to do for a while), using some of the sample data on my laptop to illustrate the process I&#8217;m using. Let&#8217;s see how it goes.</p>
<p>It&#8217;s interesting being up here in Birmingham for a reason other than the UKOUG conference &#8211; I&#8217;ve been up here a few times since last December for various client visits, this time though I&#8217;m here for a few days and staying in Jury&#8217;s Inn, the hotel we all stayed in for the last conference. Outside it&#8217;s snowing though Broad Street looks as busy and manic as usual, I may even pop around to one of the bars around Brindley Place one evening just for a bit of UKOUG meetup nostalgia.</p>
<p>The other thing I&#8217;ve been working on is moving all my Oracle BI software on to a new virtual machine based around VMWare, as opposed to Parallels which I&#8217;ve been using ever since getting a Mac (VMWare is our company standard). One thing I would also like to get up and running in this new environment is the <a href="http://www.oracle.com/appserver/business-intelligence/docs/business-intelligence-applications-overview-whitepaper.pdf">Oracle BI Apps</a>, which like OBIEE you can download in full from <a href="http://edelivery.oracle.com">edelivery.oracle.com</a>; I&#8217;m keen to see how the BI Apps dimensional model fits together, how the DAC works and how Informatica gets data in to the warehouse, and whilst I could do this using the <a href="http://bic2g.oracle.com/">&#8220;BIC2G&#8221; demo environment</a> that&#8217;s available to partners, installing and configuring it yourself always gives you a bit more insight into how it all works.</p>
<p>One slight issue that I think I&#8217;m going to have is that, of course, I&#8217;ll need an ERP system to extract data from, Oracle e-Business Suite is the obvious candidate but it&#8217;s no small install &#8211; last time I looked it was around 33Gb worth of software, which means I&#8217;ll probably have to create another VM to put this in and of course go through all the install steps, but at least I should then have the Vision demo instance to use as a data source (these <a href="http://appsfusion.blogspot.com/2007/12/oracle-apps-r12-installation-on-linux.html">blog</a> <a href="http://garethroberts.blogspot.com/2007/08/oracle-ebusiness-suite-r12-demo-on.html">postings</a> seem to suggest it&#8217;s possible and not too tricky a task, once you&#8217;ve managed to download all the disks).</p>
<p>The other thing I considered was one of these <a href="http://www.jamesballconsulting.com/small_architectures.htm">&#8220;E-Business Suite in a box&#8221; setups</a> that gives you 11i on a Mini-ITX server, this would probably be a whole lot easier but I&#8217;m not sure if I can justify dropping £600 or so on it. Any other suggestions (such as somewhere I can download a VMWare VM with e-Business Suite already installed) would be gratefully appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/04/working-with-obiee-in-birmingham-and-plans-for-the-bi-apps/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>News on the Book</title>
		<link>http://www.rittmanmead.com/2008/03/news-on-the-book/</link>
		<comments>http://www.rittmanmead.com/2008/03/news-on-the-book/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 22:12:04 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[BI Suite Developer Book]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[obiee]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/25/news-on-the-book/</guid>
		<description><![CDATA[A year or so ago I mentioned that I&#8217;d started work on a book for Oracle Press entitled &#8220;Oracle Business Intelligence Suite Developers Guide&#8221; with a projected release date of the first part of this year. Whilst the book is still in the pipeline, we&#8217;ve revised the plans a bit and I thought this would [...]]]></description>
			<content:encoded><![CDATA[<p>A year or so ago I mentioned that <a href="http://www.rittmanmead.com/2006/12/06/announcing-oracle-press-oracle-business-intelligence-suite-developers-guide/">I&#8217;d started work on a book</a> for Oracle Press entitled &#8220;Oracle Business Intelligence Suite Developers Guide&#8221; with a projected release date of the first part of this year. Whilst the book is still in the pipeline, we&#8217;ve revised the plans a bit and I thought this would be a good opportunity to bring everyone up to speed.</p>
<p>Our original plan was to cover Oracle BI Suite Standard Edition and Enterprise Edition, together with Oracle Warehouse Builder, and base the book on the 10g releases of the various products. The idea here was to take readers through the various tools in OBISE (Discoverer, Reports, Discoverer Portlets) and show how they could link in with the new tools (OBIEE, ODI and so forth). As we started writing the chapters though, it became more and more apparent that all of this would come together much more coherently in the 11g timeframe, with for example OWB being able to create OBIEE metadata, OBIEE Dashboards being able to incorporate Discoverer worksheets, Essbase coming in to the frame, OWB orchestrating the Oracle database bit and ODI having a more obvious role in bringing in non-Oracle data. There&#8217;s also a whole bunch of new functionality coming in around process integration (the &#8220;Action Framework&#8221;) that&#8217;ll be so central to OBIEE 11g and it&#8217;s integration with Fusion Middleware that we just didn&#8217;t want to leave this out.</p>
<p>In short, it made a lot more sense for us to wait for the 11g release of Oracle&#8217;s BI tools rather than write the book for what is obviously a &#8220;work in progress&#8221; in terms of integration and functionality. Coupled with the fact that, with publishing schedules as they are, the book would probably only be out for a few months before OBIEE11g and OWB11gR2 would start becoming available, holding fire and writing for these new versions made a lot of sense.</p>
<p>So the plan right now is to resume writing the book once the beta releases of OBIEE 11g and OWB11gR2 become available, and aim for handover of the manuscripts to the publishers towards the end of 2008, which gives us a publication date around the second calendar quarter of 2009. With a bit of luck this will coincide with the public release of the software, which means the book will be spot on in terms of topicality and should hopefully be something that&#8217;ll be of a lot of interest to readers of this blog. Whilst you can <a href="http://www.amazon.com/Oracle-Business-Intelligence-Suite-Developers/dp/0071495754/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1206482965&#038;sr=8-1">pre-order the book on Amazon</a> (and I do appreciate the support here), in reality nothing will ship now until that time, and I&#8217;ll certainly keep you all posted on progress on the blog. In the meantime, thanks for the enquiries and interest and I promise it&#8217;ll be worth the wait.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/news-on-the-book/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Migrating OBIEE Logical Models to use a Data Warehouse : Part 3</title>
		<link>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-3/</link>
		<comments>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-3/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 20:20:29 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[dw]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[owb]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/17/migrating-obiee-logical-models-to-use-a-data-warehouse-part-3/</guid>
		<description><![CDATA[In the final part of my series on migrating an OBIEE installation from direct application access to a data warehouse, I&#8217;m finally going to plug my new data warehouse into my OBIEE logical model. Previous to this, in the first posting I created a single logical model over three different application data sources, and in [...]]]></description>
			<content:encoded><![CDATA[<p>In the final part of my series on migrating an OBIEE installation from direct application access to a data warehouse, I&#8217;m finally going to plug my new data warehouse into my OBIEE logical model. Previous to this, in the first posting I <a href="http://www.rittmanmead.com/2008/03/16/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/">created a single logical model over three different application data sources</a>, and in the previous posting I <a href="http://www.rittmanmead.com/2008/03/16/migrating-obiee-logical-models-to-use-a-data-warehouse-part-2/">migrated the data from these data sources into a data warehouse</a>, using Oracle Warehouse Builder, and then imported this data warehouse into my OBIEE physical model. Now, I&#8217;m going to edit my logical model and make it point to these new warehouse tables instead.</p>
<p>Before I start, I review the new data warehouse tables I&#8217;ve imported into my OBIEE physical model.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-0-review-new-dw-tables1.jpg" width="288" height="379" /></p>
<p>Notice all the alias tables in there &#8211; I&#8217;m going to use those later on when creating separate logical dimension tables for each of my fact table date hierarchies. Now, I use the physical database diagrammer to check that all of my new warehouse tables are joined together properly.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-1-join-dw-tables-views1.jpg" width="431" height="193" /></p>
<p>This is particularly important as I&#8217;ve imported the views that OWB creates over dimension tables in instead of the actual tables themselves; this is because OWB in versions 10gR2 upwards adds additional rows (with negative dimension keys) into dimension tables for levels above the bottom level, so that you can join to the dimension at any level. For what I&#8217;m doing though, these extra rows are just confusing for users and so I import the views in instead, which filter these rows out. The views though, of course don&#8217;t have FK relationships with the fact tables, and so I have to use the OBIEE diagrammer to create these for me.</p>
<p>Doing this is fairly easy as each dimension table/view that OWB creates has the same column name, &#8220;dimension key&#8221; as the primary key column, and I join these back to the fact tables on the relevant fact table columns. You don&#8217;t join on the surrogate key columns, you join on these dimension key columns instead, which is a bit confusing first of all but when you get the hang of it, it (sort of) makes sense.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-2-specify-join-cols1.jpg" width="436" height="480" /></p>
<p>Now that my physical model is set up correctly, it&#8217;s time to re-map the dimensions using new logical table sources. To take an example, my Jobs dimension logical table has a business key of Job ID and a number of attributes. I leave this business key and attributes in place, but add a new column called &#8220;dimension key&#8221; which will hold the new dimension/surrogate key that the warehouse dimension table will use.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-3-remap-dimension1.jpg" width="374" height="480" /></p>
<p>Then, as the Job ID business key will no longer be the primary key for this logical column, I delete it and create a new primary key that maps to the new dimension key column.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-4-remap-dimension-key.jpg" width="374" height="480" /></p>
<p>Finally, I map the columns from the warehouse job dimension table onto the logical job dimension table, which adds this new warehouse table as the logical table source for this logical table.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-5-remap-dimension-key.jpg" width="480" height="204" /></p>
<p>This process is then repeated for the other dimension tables until they&#8217;re all swapped over to use the new data warehouse tables. Then, I repeat the process for the fact tables, starting with the Appointments Fact table, which initially has four business keys that link it through to its logical dimensions.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-6-clear-down-fact.jpg" width="179" height="98" /></p>
<p>I edit the logical table definition and remove these business keys, as I now need the fact table to join using the dimension keys I created earlier.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-7-create-fact-dim-keys.jpg" width="374" height="480" /></p>
<p>I then create a new primary key for this fact table that uses the new dimension keys.</p>
<p></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-8-create-fact-pk.jpg" width="374" height="480" />
</div>
<p>Finally, I map the warehouse physical columns on to these new logical columns, so that the logical fact table&#8217;s logical table source now points through to the warehouse fact table.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-9-map-new-fact-keys.jpg" width="480" height="161" /></p>
<p>In most cases, I don&#8217;t need to re-join the logical fact tables to the logical dimension tables as I previously created these joins as complex (logical) joins, which don&#8217;t specify actual logical columns and instead use the joins found in the physical layer, which now use the dimension key joins that OWB created.</p>
<p>I repeat the process for the other fact tables, replacing business keys in the logical fact table with the new dimension keys that the logical dimension tables now use, like this:</p>
<p></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-12-map-new-fact-dim-keys.jpg" width="259" height="145" />
</div>
<p>Once this is all done, I review the final model prior to testing it all out.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-13-review-final-log-model.jpg" width="217" height="480" /></p>
<p>Now, the final test: do the reports I created right at the start, which ran against my single unified logical model that took data from the three different source system, still work now I&#8217;ve re-wired the model so that it now points to the data warehouse? I start off by trying the simple tabular report.</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-14-check-simple-tabular-report.jpg" width="201" height="286" /></p>
<p>Bingo. The report still runs and returns the same data as before. What about the crosstab report?</p>
<p style="text-align: center;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen-dw-map-15-check-crosstab-report.jpg" width="367" height="232" /></p>
<p>Nice one. It runs the same, with no changes needed to the report, as the only real changes I&#8217;ve made are to the table keys, with the logical model adjusting automatically itself to the new datatypes as I mapped in the new logical table sources.</p>
<p>So, what do I conclude from all this? Well, firstly, it was a lot easier to re-wire the OBIEE logical model than I expected, principally because I&#8217;d built it independently of the original source systems first of all, then mapped them in and then afterwards switched this to the warehouse later on. The main change that I needed each time was to bring in the new dimension key that OWB created for each dimension, but this didn&#8217;t affect any of the existing reports as I could still keep the business key for each table, and the reports themselves didn&#8217;t display any key values, they just used them to join to other tables.</p>
<p>This approach should also work for slowly-changing dimensions &#8211; a dimension where we tracked attribute value changes (a Type 2 dimension) would just end up with more than one dimension key value for a given business key, but it&#8217;d still join back the same way and values for a particular dimension member would be aggregated as long as the dimension key wasn&#8217;t included in the report.</p>
<p>So, I was fairly pleased with this. The most time-consuming part was putting the OWB data model and mappings together, if Oracle can automate the process of generating the data warehouse schema and mapping data to it, this&#8217;ll make the whole process much much simpler. As it is though, it&#8217;s eminently do-able which will give me a lot more confidence proposing it at my talk later in the week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Migrating OBIEE Logical Models to use a Data Warehouse : Part 2</title>
		<link>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-2/</link>
		<comments>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-2/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 22:08:47 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[dw]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[owb]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/16/migrating-obiee-logical-models-to-use-a-data-warehouse-part-2/</guid>
		<description><![CDATA[In yesterdays posting, I took a look at some of the practicalities behind my recent article on OBIEE &#8220;next-generation&#8221; architectures. The idea behind this architecture is that you can use the connectivity features of OBIEE to initially report against your data in-place, and then behind the scenes take this data, load it into a data [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.rittmanmead.com/2008/03/16/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/">yesterdays posting</a>, I took a look at some of the practicalities behind my <a href="http://www.rittmanmead.com/2008/02/15/a-future-oracle-obiee-architecture/">recent article on OBIEE &#8220;next-generation&#8221; architectures</a>. The idea behind this architecture is that you can use the connectivity features of OBIEE to initially report against your data in-place, and then behind the scenes take this data, load it into a data warehouse and then &#8220;re-wire&#8221; OBIEE so that it eventually reports against the data warehouse, all without the metadata layer and user reports getting interrupted. Whilst this is a nice idea in principle, I was interested to see how well it worked in practice, and so I built an OBIEE metadata layer against three application data sources and created a logical model that spanned across all of them.</p>
<p >In todays posting, I&#8217;m going to take the data held in these three application schemas and create a data warehouse out of them using Oracle Warehouse Builder 10.2.0.3. Before I do this though, one thing I have done is extend the logical model in OBIEE to three fact tables and a few more dimensions, so that it becomes a complete dimensional model over all of my source data. When I come to create the data warehouse, it&#8217;ll have fact tables corresponding to the four fact tables in my logical model, and dimensions to match the total set of dimensions in the model.</p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-1-review-final-model.jpg" width="205" height="301" alt="nextgenowb_1_review_final_model.jpg" />
</div>
<p><span style="font-family: Helvetica;"><br />Before I start the process, there&#8217;s a few issues that I can see cropping up with this migration. Firstly, OWB is going to create surrogate keys (or to be more precise, a &#8220;dimension key&#8221;) for each of the dimension tables, and it&#8217;s these rather than business keys such as CUST_ID, PROD_ID and so on that are going to join to the fact tables. The fact tables themselves will have surrogate/dimension keys rather than business keys in them, and together these issues are going to mean that the tables I map to in OBIEE are going to be keyed on different fields than before.</span></p>
<p ><span style="font-family: Helvetica;">Another issue that immediately springs to mind is how OBIEE will handle slowly-changing dimensions. OWB has automatic support for slowly-changing dimensions in the tool, but it&#8217;s not clear (at least to me) how OBIEE will handle this. I&#8217;m actually going to cheat on this a bit and just use Type 1 dimensions in my example, but I&#8217;ll give some thought as I go on to how Type 2 dimensions, which can have multiple entries per dimension member, partitioned by time, will be handled.</span></p>
<p ><span style="font-family: Helvetica;">The final issue is around all the extraneous columns and rows that OBIEE adds to the tables it creates, particularly the dimension tables. OWB creates a surrogate key for each dimension level, as well as a &#8220;dimension key&#8221; field that acts as table-wide surrogate key, which has the benefit of allowing slowly-changing dimensions and separation from changes to source system keys, but to the inexperienced it seems like an awful lot of keys. In addition, you get extra rows in your dimension tables for all the levels above the bottom level in your hierarchy, which in conjunction with the dimension key I mentioned earlier allows you to join to the dimension table at any level of aggregation, but which could confuse people if they just want to list out customers, or products for example. There are ways around this (OWB automatically creates views that at least remove the extra rows, and in fact the dimension key concept is quite simple once you work it out) but again it&#8217;ll need a bit of thought.</span></p>
<p ><span style="font-family: Helvetica;">Anyway, the first thing I do is go into Oracle Warehouse Builder and create modules for the three source applications and the data warehouse that I&#8217;m going to create.</span></p>
<p style="text-align: center;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: 12px 'Lucida Grande';"><span style="font-family: Helvetica;"><img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-2-create-modules.jpg" width="210" height="221" alt="nextgenowb_2_create_modules.jpg" /><br /></span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Lucida Grande; min-height: 15.0px"><span style="font-family: Helvetica;"><br /></span></p>
<p ><span style="font-family: Helvetica;">Then, I create the dimension and fact objects, together with their supporting tables, in the data warehouse module. In this instance, I create them as relational (ROLAP) objects as it&#8217;s a bit trickier, currently, to import MOLAP objects into OBIEE.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-3-create-dims-and-facts.jpg" width="258" height="322" alt="nextgenowb_3_create_dims_and_facts.jpg" />
</div>
<p ><span style="font-family: Helvetica;">Once that&#8217;s done, I create the mappings to load data from the source tables into the dimension objects. OWB takes care of all the surrogate key handling for me, all I have to do is map in the source data.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-3a-map-dim-loads.jpg" width="480" height="276" alt="nextgenowb_3a_map_dim_loads.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Now I can deploy the dimension objects and tables to the Oracle database, and run the mappings to load data into them.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Lucida Grande; min-height: 15.0px"><span style="font-family: Helvetica;"><br /></span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-4-deploy-and-load-dims.jpg" width="480" height="410" alt="nextgenowb_4_deploy_and_load_dims.jpg" />
</div>
<p><span style="font-family: Helvetica;"><br />At this point, my dimension tables have data loaded in to them. The next thing to do is to map the transactional information from my source systems into the fact tables. Again, OWB takes care of converting business keys into surrogate keys, the only tricky thing is the daft way that OWB specifies the date business key as a number, in the format YYYYMMDD, which means I have to convert it from the date format used by the source into this numeric format, before I can load it into the fact table.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-5-map-fact-loads.jpg" width="480" height="276" alt="nextgenowb_5_map_fact_loads.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Finally, once all the data is loaded into the warehouse, I can take stock of the final OWB project, which looks like this:</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Lucida Grande; min-height: 15.0px"><span style="font-family: Helvetica;"><br /></span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-6-complete-dw-in-owb.jpg" width="275" height="578" alt="nextgenowb_6_complete_dw_in_owb.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />and then load the resulting objects into my OBIEE repository, like this &#8211; note the views over the dimensions that I&#8217;ve brought in, I&#8217;ll come back to this in tomorrows&#8217; posting.</span></p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Lucida Grande; min-height: 15.0px"><span style="font-family: Helvetica;"><br /></span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgenowb-7-load-dw-into-obiee.jpg" width="283" height="445" alt="nextgenowb_7_load_dw_into_obiee.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />So, that&#8217;s the data warehouse created from the source data I brought in to OBIEE yesterday. Although these steps seem all fairly simple, it was quite a time-consuming task to do this &#8211; it took me a good few hours to set up all the dimension and fact objects, make sure all the datatype lengths are correct, create the mappings, add all the constants and conversions that were needed and so on, so I&#8217;m looking forward to some sort of automation of this process in the future &#8211; automating the creation of a physical schema from the logical model to create the data warehouse schema would be an obvious easy win, and it should even be possible to automate the creation of the data mappings from the source systems to the warehouse tables.</span></p>
<p ><span style="font-family: Helvetica;">Tomorrow though, I&#8217;ll be mapping the logical model in my OBIEE metadata layer to these new warehouse tables, and trying to see whether it&#8217;s possible to preserve all the reports and avoid changing the logical model around. It&#8217;ll be interesting to see how the table key changes are handled, and how easy it is to get rid of all the extra information OWB adds to the warehouse tables.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/migrating-obiee-logical-models-to-use-a-data-warehouse-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Migrating OBIEE Logical Models to use a Data Warehouse : Part 1</title>
		<link>http://www.rittmanmead.com/2008/03/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/</link>
		<comments>http://www.rittmanmead.com/2008/03/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 21:47:21 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[dw]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[owb]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/16/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/</guid>
		<description><![CDATA[A couple of weeks ago I posted an article about a next-generation Oracle BI architecture, where I advocated building a first cut OBIEE system against your operational applications, producing some &#8220;quick win&#8221; reports, and then over time copying your operational data into a data warehouse and re-pointing the OBIEE semantic model to point to this [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I posted an article about <a href="http://www.rittmanmead.com/2008/02/15/a-future-oracle-obiee-architecture/">a next-generation Oracle BI architecture</a>, where I advocated building a first cut OBIEE system against your operational applications, producing some &#8220;quick win&#8221; reports, and then over time copying your operational data into a data warehouse and re-pointing the OBIEE semantic model to point to this instead. The idea behind this is to allow you to realize some immediate benefits from OBIEE and the semantic model, whilst providing a method by which you can eventually move your data into an Oracle data warehouse without disturbing the reports you created earlier. I&#8217;m presenting on this at the upcoming UKOUG BI &amp; Performance Management Special Event next week in London, you can download the slides from <a href="http://www.rittmanmead.com/files/Next-Generation%20Oracle%20BI%20Architecture.pdf">here</a>.</p>
<p >All well and good, but how well does this work in practice? Well, there&#8217;s no better way to find out than to give it a go, so what I&#8217;m going to do over the next three days is work through three stages of the type of project I&#8217;m suggesting:</p>
<ol>
<li>Firstly, we&#8217;ll start off with three operational systems (Orders, CRM and HR), and create a single logical model that maps on top of them.</li>
<li>We&#8217;ll then create some reports against this data and save them for checking later.</li>
<li>Then, we&#8217;ll use OWB to extract this data from the source systems and create a data warehouse</li>
<li>We&#8217;ll then re-map the logical model I created earlier to point to this new data source</li>
<li>Then, we&#8217;ll check the same reports and see whether they still work ok.</li>
</ol>
<p >Starting up SQL Developer and taking a look at the three application data sources, the Orders schema contains a number of tables in a &#8220;normalized&#8221; design. It&#8217;s got an orders table, an order details table, various product tables and so on.</p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen0a-orders-schema.jpg" width="233" height="323" alt="nextgen0a - Orders Schema.jpg" />
</div>
<p><span style="font-family: Helvetica;"><br />The CRM schema is a bit simpler, and contains details on customer interactions, their reason and their outcome. The customers it refers to are in the Orders schema.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen0c-crm-schema.jpg" width="190" height="86" alt="nextgen0c - CRM Schema.jpg" />
</div>
<div style="text-align: left;">
  <br />The HR Schema contains details of employees, appointments, jobs and departments, with details of employees being in the Orders schema to record salesperson activity.
</div>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen0b-hr-schema.jpg" width="161" height="120" alt="nextgen0b - HR Schema.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />So what we have here is a set of normalized tables that contains details on order activity, refunds, staff appointments and customer interactions. Out of these tables I therefore want to create a dimensional model, with the fact tables corresponding to the activities I just mentioned (orders, appointments, customer calls and so on) and the dimensions corresponding to the customer, product, employee and other lookup tables in the source schemas.</span></p>
<p ><span style="font-family: Helvetica;">Starting off with a new repository then, the first thing I do is start creating this logical model. I&#8217;ll start off by modeling the facts first, then I&#8217;ll build out the dimensions, and only once that&#8217;s complete will I start thinking about mapping them to the source data.</span></p>
<p ><span style="font-family: Helvetica;">I start off them by creating my first fact table, which will model the orders that I receive.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen1-define-first-fact.jpg" width="227" height="272" alt="nextgen1 - define first fact.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />At this initial stage, I just create the logical columns within the fact table; the datatypes for each column will be defined later once I map source columns to them. Then, I repeat the process for the dimension tables, again just creating the column names and leaving the definition of the datatypes until later on. The point here is that you are modeling what the logical model should be, later on we&#8217;ll worry about mapping these objects to the source data.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen4-define-dims-no-datatypes-yet.jpg" width="229" height="777" alt="nextgen4 - define dims (no datatypes yet).jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Now, I create logical(complex) joins between the dimensions and fact table that I&#8217;ve just created.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen5-define-complex-joins.jpg" width="383" height="278" alt="nextgen5 - define complex joins.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Then, it&#8217;s a case of defining the dimensions for my logical model and setting the aggregation method for the measures, and the logical model is complete.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen6-initial-logical-model-built.jpg" width="209" height="346" alt="nextgen6 - initial logical model built.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />So I&#8217;m now at the point where I have a complete first cut of my logical model. At the moment, I&#8217;ve only got a single fact table, later on I&#8217;ll add some more, but for now my next step is to map in the source tables. To do this, I use the Import &#8230; From Database feature in Administrator and read in the source table metadata.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen7-import-physical-tables.jpg" width="261" height="575" alt="nextgen7 - import physical tables.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />One of the most important things you have to do when importing source data into OBIEE is to make sure all the primary and foreign keys are registered in the physical model. I therefore go and create a physical database diagram for each schema, making sure all the tables are properly joined together &#8211; this for example is the Orders schema.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen10-add-fk-and-pks-to-physical-model.jpg" width="352" height="681" alt="nextgen10 - add fk and pks to physical model.jpg" />
</div>
<p ><span style="font-family: Helvetica;">Then, I go and create joins between the different schemas, joining for example the tables in the HR schema to the Order schema via the Orders table, as employee data is references in orders via the Salesperson ID.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen11-add-fk-and-pks-to-physical-model.jpg" width="279" height="294" alt="nextgen11 - add fk and pks to physical model.jpg" />
</div>
<p ><span style="font-family: Helvetica;">By repeating this across all of the source schemas, I make it possible for OBIEE to join together all the source data into a single, &#8220;virtual&#8221; source database.</span></p>
<p ><span style="font-family: Helvetica;">Now it&#8217;s time to map the source data onto the logical model I created earlier. I start off by dragging the Order ID field from the Order Details physical table and dropping it on top of the Orders Fact logical table, which adds this physical table as a logical table source for the fact table and maps the Order ID logical column to the Order ID physical column.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen13-map-detail-level-of-fact.jpg" width="454" height="442" alt="nextgen13 - map detail-level of fact.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />I then repeat the process for the Order Line ID column, and the rest of the columns in this source table that have corresponding entries in the logical fact table.</span></p>
<p ><span style="font-family: Helvetica;">The Order Details physical table only contains a part of the order information I want to put into my logical fact table &#8211; the most granular part that details the individual line items in the order. I also want to map across some data from the actual Orders table as this contains the order &#8220;header&#8221; information, such as the date of the order and the customer who made the order. To do this, I first map the existing fact table logical table source to this additional table, which I can do because the Orders and Order Details tables are joined together in the physical model.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen15-add-reference-to-additional-fact-source.jpg" width="437" height="507" alt="nextgen15 - add reference to additional fact source.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Now I can just map in the additional columns from the Orders table to finish off this logical table&#8217;s mapping.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen15-map-additional-fact-source-columns.jpg" width="521" height="458" alt="nextgen15 - map additional fact source columns.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Once this step is complete, I&#8217;ve mapped in all the source columns for the logical fact table, with the fact table&#8217;s logical table source pointing to two source tables, the Orders and Order Details tables.</span></p>
<p ><span style="font-family: Helvetica;">I then repeat the process for the logical dimension tables, editing the logical table sources as needed to provide access to additional lookup tables.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen19-add-reference-to-dim-subtables.jpg" width="437" height="507" alt="nextgen19 - add reference to dim subtables.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Once this is complete, I then edit the logical tables to add the primary keys, and then check the state of the logical model at this stage.</span></p>
<p ><span style="font-family: Helvetica;">Everything is now complete except that I haven&#8217;t yet provided source table mappings for the time dimension. There&#8217;s a reason for this though, in that the source systems don&#8217;t have a &#8220;Times&#8221; table, all dates are held as Date datatypes in the various transaction tables and it&#8217;ll therefore be up to me to make a separate table out of them, together with derived fields such as Month, Day of Week and so on.</span></p>
<p ><span style="font-family: Helvetica;">In my Orders fact table, time actually crops up a couple of times; there&#8217;s an Order Date and a Ship Date, and to be able to analyze these dates independently, I&#8217;ll need to create two time dimension tables, one for order data and one for ship date. I rename the Time dimension table I created earlier on to Order Date instead, and then map in the Order Date from the Orders table on to the Day ID logical column within it.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen23-map-in-order-date-to-dim.jpg" width="512" height="426" alt="nextgen23 - map in order date to dim.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />I then edit the logical table source for the Order Date logical table and use the Expression Editor to derive the various date components from the Order Date physical column.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen25-calculate-order-dim-cols.jpg" width="437" height="507" alt="nextgen25 - calculate order dim cols.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />We&#8217;re now ready to go. I create a simple Presentation model out of my Logical Model, start up Oracle BI Answers and run a couple of test reports.</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen28-view-basic-report.jpg" width="202" height="357" alt="nextgen28 - view basic report.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />The tabular report comes back OK. What about one that involves dates and a bit more analysis, say a pivot table report?</span></p>
<div style="text-align: center;">
  <img src="http://www.rittmanmead.com/wp-content/uploads/2008/03/nextgen30-simple-crosstab.jpg" width="342" height="238" alt="nextgen30 - simple crosstab.jpg" />
</div>
<p ><span style="font-family: Helvetica;"><br />Not bad, it looks OK. So, tomorrow we&#8217;ll look at the next step &#8211; taking this operational data spread over three applications and copying it into a data warehouse, which we&#8217;ll do using Oracle Warehouse Builder 10gR2.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/re-wiring-obiee-logical-models-to-use-a-data-warehouse-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

