<?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; dw</title>
	<atom:link href="http://www.rittmanmead.com/tag/dw/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>New White Paper on Cube Organized Materialized Views</title>
		<link>http://www.rittmanmead.com/2008/03/new-white-paper-on-cube-organized-materialized-views/</link>
		<comments>http://www.rittmanmead.com/2008/03/new-white-paper-on-cube-organized-materialized-views/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 09:30:24 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle OLAP]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>
		<category><![CDATA[collaborate08]]></category>
		<category><![CDATA[dw]]></category>
		<category><![CDATA[olap]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/25/new-white-paper-on-cube-organized-materialized-views/</guid>
		<description><![CDATA[I noticed on the Oracle OLAP blog the other day that a new white paper on Cube Organized Materialized Views has been uploaded to OTN. If you&#8217;ve followed Pete and my postings on this new feature in Oracle 11g the white paper goes into a bit more detail on how it works, and in our [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed on the <a href="http://www.oracle.com/technology/products/bi/db/11g/pdf/comparision_aw_mv_11g_twp.pdf">Oracle OLAP blog</a> the other day that a new <a href="http://www.oracle.com/technology/products/bi/db/11g/pdf/comparision_aw_mv_11g_twp.pdf">white paper on Cube Organized Materialized Views</a> has been uploaded to OTN. If you&#8217;ve followed Pete and my postings on this new feature in Oracle 11g the white paper goes into a bit more detail on how it works, and in our opinion this looks set to be the most important new data warehousing feature in the Oracle database since &#8220;classic&#8221; materialized views and bitmap indexes.</p>
<p>Anyway, take a look if you get a chance, take a look also at the <a href="http://wiki.oracle.com/page/Oracle+OLAP+Option">OLAP Option pages on the Oracle Wiki</a>, and if you&#8217;re going to Collaborate&#8217;08 don&#8217;t forget that <a href="http://iougew.prod.web.sba.com/displaymod/detailevent.cfm?conference_id=52&#038;event_id=1642">Peter Scott is doing a conference session</a> on the Thursday on this very subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/new-white-paper-on-cube-organized-materialized-views/feed/</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>Indexing the unusual</title>
		<link>http://www.rittmanmead.com/2008/03/indexing-the-unusual/</link>
		<comments>http://www.rittmanmead.com/2008/03/indexing-the-unusual/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 16:18:20 +0000</pubDate>
		<dc:creator>Peter Scott</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[dw]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/10/indexing-the-unusual/</guid>
		<description><![CDATA[For many years I had an interest in non-standard indexing and exotic data types, that is things that weren&#8217;t NUMBER or VARCHAR2. In fact before I came in to data warehousing I was involved in indexing free text such as conversation transcripts and and narrative reports; some of this was pushing the technology of the [...]]]></description>
			<content:encoded><![CDATA[<p>For many years I had an interest in non-standard indexing and exotic data types, that is things that weren&#8217;t NUMBER or VARCHAR2. In fact before I came in to data warehousing I was involved in indexing free text such as conversation transcripts and and narrative reports; some of this was pushing the technology of the time, but was as achievable. As <a href="http://dbasrus.blogspot.com/" target="_blank">Noons</a> pointed out in passing on a response to yesterday&#8217;s <a href="../2008/03/09/data-warehouses-are-not-dead-yet/" target="_blank">piece</a> technology moves on and we will soon have to resolve the challenge of developing new indexing techniques to cope with the grossly unstructured such as HD Video and recorded sound.</p>
<p>I briefly discussed this last year on my blog and probably also over at <a href="http://datageekgal.blogspot.com/" target="_blank">Datageekgal&#8217;s</a> blog (and congratulations Beth on the new job!) The indexing needs of the security services, medicine and a whole host of organisations that need to index patterns within a LOB type object will spawn some pretty clever indexing methods, and hopefully some of those will become accessible through database vendors products.</p>
<p>In a way there are some similarities with data mining, except that a LOB could (I think would) contain bit patterns for more than one index key value. We are probably talking about non-unique indexes, as for non-archival purposes researchers are usually concerned with finding similar records.</p>
<p>But one good thing about the need to index LOB contents is that they are usually non-volatile, a recorded conversation or a DNA sequence is historical fact and is not going to change so perhaps index updates are not going to be important. Most of the building blocks to do this type of indexing are already available (especially if we choose to create an index of the &#8220;index&#8221; by using some form of indirect table approach) the only bit to do is to write the domain specific code to identify the keys values in the LOB&#8230; hang on that&#8217;s the hard bit!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/indexing-the-unusual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Warehouses are not dead, yet</title>
		<link>http://www.rittmanmead.com/2008/03/data-warehouses-are-not-dead-yet/</link>
		<comments>http://www.rittmanmead.com/2008/03/data-warehouses-are-not-dead-yet/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 15:49:31 +0000</pubDate>
		<dc:creator>Peter Scott</dc:creator>
				<category><![CDATA[Data Warehousing]]></category>
		<category><![CDATA[dw]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/09/data-warehouses-are-not-dead-yet/</guid>
		<description><![CDATA[One of the reasons that I left my old job to work with Rittman Mead Consulting was to get back to technology. Don&#8217;t get this wrong, I really did enjoy managing people and having responsibility for a BI practice, but that was at the expense of involvement in a lot of the delivery of systems; [...]]]></description>
			<content:encoded><![CDATA[<p>One of the reasons that I left my old job to work with Rittman Mead Consulting was to get back to technology. Don&#8217;t get this wrong, I really did enjoy managing people and having responsibility for a BI practice, but that was at the expense of involvement in a lot of the delivery of systems; for every one day of project work, I tended to spend eight doing &#8220;other stuff&#8221;, and I was getting to miss the buzz of being at the sharp end of a project, well maybe not missing the 2:30am coding whilst eating a slice of pizza stuff (which is a young person&#8217;s game)</p>
<p>Recently, I have been set the challenge to grow the amount of data warehouse and data quality work I am involved in and perhaps at the same time help dispel the perception that Rittman Mead Consulting just do short engagements and training; in the three months or so I have been here I have spent just three days delivering training and 2.5 months on-site with a single customer developing a data warehouse, so that notion is a bit of a myth anyway. Maybe the new Rittman Mead web site will feature some of the longer term type of engagements we are involved in.</p>
<p>I suppose a good question to start with is &#8220;do people still develop data warehouses?&#8221; Mark brought up a similar idea the other week in his &#8216;future BI architecture&#8217; <a href="http://www.rittmanmead.com/2008/02/12/towards-a-future-oracle-bi-architecture/" target="_blank">piece</a> which also attracted some good comments. Indirectly, I mentioned alternatives to DWs in my article on Real Time BI for the Evaluation Centre &#8211; I hope to either post the article here on the blog or perhaps on the Rittman Mead web site in the next few days. A lot of organisations have already invested in data warehouses, these will continue to need attention, either from the support perspective or for enhancement as new classes of information are added. Data warehouses still have a place in BI as way of facilitating the delivery of quality data to the reporting layer in an efficient way so I can&#8217;t quite see the death of the Data Warehouse just yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/data-warehouses-are-not-dead-yet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OLAP and summary management</title>
		<link>http://www.rittmanmead.com/2008/03/olap-and-summary-management/</link>
		<comments>http://www.rittmanmead.com/2008/03/olap-and-summary-management/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 18:14:54 +0000</pubDate>
		<dc:creator>Peter Scott</dc:creator>
				<category><![CDATA[Data Warehousing]]></category>
		<category><![CDATA[Oracle OLAP]]></category>
		<category><![CDATA[dw]]></category>
		<category><![CDATA[olap]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2008/03/08/olap-and-summary-management/</guid>
		<description><![CDATA[So, why is someone who normally writes about data warehouses going to talk about Oracle OLAP, and in particular, cube organized materialized views? I could run out the argument that I work in a BI consultancy and none of us here at Rittman Mead are 100% aligned to a specific expertise area; for example I [...]]]></description>
			<content:encoded><![CDATA[<p>So, why is someone who normally writes about data warehouses going to <a href="http://www.collaborate08.com/collaborate08/" target="_blank">talk</a> about Oracle OLAP, and in particular, cube organized materialized views?</p>
<p>I could run out the argument that I work in a BI consultancy and none of us here at <a href="http://www.rittmanmead.com/" target="_blank">Rittman Mead</a> are 100% aligned to a specific expertise area; for example I do OBIEE and OWB as well as data warehouse design and performance. And besides, in my past I did look after one of the largest Oracle Sales Analyzer systems in Europe (ROLAP reporting on a couple terabytes of relational data), so there is quite a bit of Oracle Express Server (and OLAP DML) lurking in my past. But in reality my talk is going to look at the use of OLAP Cube Organized Materialized Views in the context of summary management and that, of course, is right at the heart of what I do!</p>
<p>Summary management has always been one of those &#8216;art form&#8217; areas of DW/BI &#8211; which summary tables to build and how many of them are needed to balance performance, maintenance time and space usage. Query rewrite was great step forward in Oracle 9.2 (OK, it was there before, but I tended not to use it) at last, I only needed to map a single fact table (the base table) into the query tool, and for some third-party tools that was a significant thing. And now with Oracle 11g, the ability to transparently rewrite a query against the base fact table to a OLAP cube is a significant advance, it means that I needn&#8217;t think about the materialized views I need create since the cube effectively contains them all!  This is a bit of a simplification of course and I will say a lot more in the 50 minutes or so of speaking slot &#8211; so if you are Collaborate 08 &#8211; and that is just a month away, you could get to hear the whole talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2008/03/olap-and-summary-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

