<?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; Hyperion Essbase</title>
	<atom:link href="http://www.rittmanmead.com/category/hyperion-essbase/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>Hyperion Profitability &amp; Cost Management &#8211; Overview</title>
		<link>http://www.rittmanmead.com/2012/01/hyperion-profitability-cost-management-overview/</link>
		<comments>http://www.rittmanmead.com/2012/01/hyperion-profitability-cost-management-overview/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 09:13:18 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=10040</guid>
		<description><![CDATA[Recently i have been doing lot more work on the Oracle EPM stack than on the Oracle BI stack. So, i will be writing more on the various Oracle EPM products like HFM, Planning, FDQM etc in the forthcoming weeks. To sort of kick start the series of postings, i thought i will begin an [...]]]></description>
			<content:encoded><![CDATA[<p>Recently i have been doing lot more work on the Oracle EPM stack than on the Oracle BI stack. So, i will be writing more on the various Oracle EPM products like HFM, Planning, FDQM etc in the forthcoming weeks. To sort of kick start the series of postings, i thought i will begin an article on Hyperion Profitability &amp; Cost Management also popularly known as HPCM. It is one of those products that is often overlooked, due to the overlap of features it has with other products like Essbase &amp; Planning. It is sort of a targeted product with a solid technical foundation and uses Hyperion Essbase as its backend. On the outset, HPCM primarily provides Functional Users with the ability to automatically allocate Costs &amp; Revenue to various departments, accounts thereby giving the ability to do proper &amp; complete profitability reporting.</p>
<p>HPCM primarily has 3 main sweet spots</p>
<p>1. Every company will have indirect costs. For example, a Consulting company where Revenue is obtained through driving projects will have a lot of indirect costs like HR Costs, Admin Costs etc. HPCM provides an ability to allocate the costs back to the projects so that proper project profitability is derived. How the costs are allocated will be defined through HPCM itself. For example, if a company is running say 3 consulting projects with 20, 30 &amp; 40 resources each, then the indirect costs are allocated back to the project based on the number of people(or time logged etc) in each project.</p>
<p>2. Every company will be storing the incoming Revenue &amp; Costs in a Ledger. Due to various reasons, even the direct costs &amp; revenue might not actually be tied back to a project (Consulting company example above). So, there might be a need to allocate the project based Direct Costs &amp; Revenue as well to the Projects (allocation possibly by head count etc).</p>
<p>3. Allocation of Costs is pretty dynamic in nature depending on the type of business. It can vary quite frequently. So, the key is to ensure that the allocation logic can be changed frequently and easily. In addition, one more key point is to find the lineage back to the source on how the costs are obtained.</p>
<p>HPCM provides all the 3 above. If you are an Essbase or a Planning person, you could argue that we can do the same thing using these 2 products itself. Though true, in many cases Cost &amp; Revenue allocation rules are defined by Functional Users. So, it is not possible for Functional users to create Business Rules/Calculation Scripts every time there is a change. In addition though Essbase is very good, it is very difficult to do a data lineage from a calculation script, to find out how the costs are allocated. Thats the main reason why, HPCM is a solution positioned primarily at Business/Functional users for providing that cost &amp; Revenue Breakdown.</p>
<p>Though i have mentioned that HPCM is a functional tool, its underlying technology is very interesting. It has a relational metadata that stores the metadata related to HPCM. In addition each HPCM application will have 2 Essbase databases. One is Block Storage cube which will be used for the allocation &amp; calculations. The other is a reporting Aggregate Storage cube which will be used for reporting. Data push from BSO and ASO is automatically available out of the box from HPCM. Also, one important point to note, change to dimensions, change to metadata, pushing data from BSO to ASO are all achieved within HPCM without writing any external code/scripts. Everything is done out of the box. This architecture is shown below.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10041" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic0.png" alt="" width="481" height="415" /></p>
<p>In addition, the most interesting aspect of HPCM is the way it handles dimensions. This is what we will be covering in this article today. HPCM uses EPMA for managing its dimensions &amp; attributes. HPCM as an application has 3 types of dimensions</p>
<p>1. System Dimensions &#8211; There are 2 System Dimensions &#8211; Measures &amp; AllocationType. Generally while creating a HPCM application through the Wizard we can pre-create these 2 dimensions. AllocationType is used by HPCM internally for doing allocations. It is generally not needed to make any changes to this dimension. But Measures dimension is the most important dimension that HPCM uses for pushing costs &amp; allocating them. We can create custom members in the Measure dimension if needed.</p>
<p>2. POV Dimensions &#8211; HPCM supports upto 4 point of view dimensions. These dimensions are generally for storing Year, Period, Scenario &amp; Version. True to their names, they generally are used as POVs and are not used directly in any allocation (the POVs are always fixed in the calculation scripts).</p>
<p>3. Business Dimensions &#8211; Business Dimensions are those dimensions where allocations happen. These dimensions drive the allocation logic.</p>
<p>In addition HPCM also supports alias and attribute dimensions. For this article, i will use a simple case of demonstrating how to go about allocating HR Costs in a Consulting Company recognising its revenue through Projects. Lets make an assumption that on a monthly basis we record the HR Costs (including Salary paid to HR, other misc costs) etc. Lets also assume that we have 3 projects running in the company with the following break-up</p>
<p>a. Project A &#8211; 300 people full time<br />
b. Project B &#8211; 500 people full time<br />
c. Proejct C &#8211; 200 people full time</p>
<p>We will start off with creating the application through the Application Wizard (pre-create System Dimensions) and then we shall define the necessary dimensions.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10066" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic1.png" alt="" width="460" height="254" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10065" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic2.png" alt="" width="472" height="383" /></p>
<p>We basically have 2 business dimensions &#8211; one for Accounts which will hold the HR Costs. Then we have the Project dimension which will record the revenue and costs specific to the project.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10064" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic31.png" alt="" width="229" height="283" /></p>
<p style="text-align: center">&nbsp;</p>
<p>Lets deploy this application and then login to the application through Workspace.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10063" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic4.png" alt="" width="482" height="375" /></p>
<p>In HPCM all allocation happens through stages. Stages is where allocation happen. HPCM supports uppto 9 stages. Each stage also supports intra stage allocation. Lets try to understand what this means from a Multi-Dimensional Essbase database Standpoint. In our example, we will have 2 stages. The first stage will have just the Accounts dimension &#8211; basically HRCosts in Accounts dimension will flow from Stage 1 to Stage 2 and will get allocated in Stage 2. So, Stage 2 will contain both the Accounts and Project dimensions.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10062" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic51.png" alt="" width="460" height="135" /></p>
<p>After creating these 2 stages(ensure you also have a POV defined) lets go ahead and deploy this to Essbase from the Manage Database screen(both Calculation &amp; Reporting Database). What you will notice is 3 things</p>
<p>1. There will be 2 essbase databases one suffixed with letter C and the other suffixed with letter R. C database is the Block Storage database that is used for allocation. R database is the Aggregated Storage database that will be used for reporting.</p>
<p>2. You will notice that for each stage there will be a corresponding set of dimensions prefixed by the Stage prefix given at the time of creation. So effectively, if there are 2 stages with 2 dimensions each, then Essbase will have 4 dimensions (though the 2 dimensions might be the same in EPMA).</p>
<p>3. You will also notice that each dimension will have a dummy member called NoMember. This is one of the most important members that controls the grain of the data. This member is the key in loading multi-grain data for allocation into HPCM.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10061" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic61.png" alt="" width="478" height="319" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10060" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic71.png" alt="" width="282" height="274" /><br />
<img class="aligncenter size-full wp-image-10059" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic81.png" alt="" width="382" height="450" /></p>
<p>Now that we have the Essbase cubes deployed as well, lets try to understand how the allocation logic works. To begin with lets assume for the month of Jan 2011, the HR Costs for the Consulting Company is say 1000 USD as shown below</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10058" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic91.png" alt="" width="496" height="91" /></p>
<p>This is the input data into Stage 1. So to load this in we will have be creating a text file and load it directly into Essbase. There are 3 options to load data into HPCM</p>
<p>1. Manual Data Entry &#8211; HPCM provides a screen where we can update data manually.</p>
<p>2. Staging Tables &#8211; We can load the data temporarily into a set of staging tables, and then from within HPCM we can push the data from Staging tables into Essbase.</p>
<p>3. Directly loading data into Essbase</p>
<p>In our case, we will load the data directly into Essbase as that will give more clarity on how HPCM works. For doing data load for Stage 1, remember we have a total of 9 dimensions in Essbase (Measures,AllocationType,Year, Scenario, Period, Version, ACAccount,PRAccount,PRProject). But our input data of HRCosts comes at a grain of only 7 dimensions (Measures,AllocationType,Year, Scenario, Period, Version, ACAccount). So, load this in we will have use the NoMember intersection of the remaining 2 dimensions (PRAccount &amp; PRProject). The input data file to Essbase is shown below</p>
<p>CostInput,DirectAllocation,2011,Jan,Actual,Working,HRCosts,[PRAccounts].[NoMember],[PRProgram].[NoMember],1000<br />
Our idea is to allocate the 1000 USD down to the 3 projects for the January Month. So, our end result should look like this</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10057" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic101.png" alt="" width="500" height="100" /></p>
<p>If you notice, the 1000 USD is split across the 3 projects based on the overall number of resources(Resource Count for each project/Total Resources*HRCost) in each project. So basically for the allocation to happen, we need to load the Resource Count data. Resource Count data for all projects and the individual projects have to be loaded as shown below</p>
<p>FixedDriverValue,DirectAllocation,2011,Jan,Working,Actual,HRCosts,HRCosts,Project A,300<br />
FixedDriverValue,DirectAllocation,2011,Jan,Working,Actual,HRCosts,HRCosts,Project B,500<br />
FixedDriverValue,DirectAllocation,2011,Jan,Working,Actual,HRCosts,HRCosts,Project C,200<br />
Weight,DirectAllocation,2011,Jan,Working,Actual,HRCosts,[PRAccounts].[NoMember],[PRProgram].[NoMember],1000</p>
<p>In the above data file there are 2 things we can notice</p>
<p>1. We have used a measure called FixedDriverValue and Weight. We will see their significance a little bit later. For now think of them as intersections that will hold the Resource Count Data.</p>
<p>2. The first 3 records above have HRCosts repeated twice to load into both the Accounts dimension we have in the Essbase Cube. Again we will see the significance of why we are doing this below.</p>
<p>So far we have loaded all the necessary data into the Essbase Cubes and have also setup the stages. The next step is in defining the Allocation Logic. This is done through a concept called Drivers. From the Perspective of HPCM, drivers define how the allocation values get pushed from source to target. HPCM supports different allocations like Activity Based Costing etc through the concept of Drivers. In our case, the Driver for allocation is the Resource Count. Just to recap, within Essbase now we have dimensions catering to two stages &#8211; Stage 1 and Stage 2. This is illustrated below. So basically we have 3 separate sub-cubes each having its own intersection.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10056" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic111.png" alt="" width="469" height="238" /></p>
<p>In the above diagram, whenever we want to do allocation there can be different ways of doing it. The 3 most common ways are</p>
<p>1. Allocation Based on Source &#8211; Here all the driver values are obtained from the source stage and data from source stage is then assigned to the Destination Stage based on the Source driver values.</p>
<p>2. Allocation Based on Destination &#8211; Here all the driver values are obtained from Destination stage and data from source stage is then assigned to the Destination Stage based on the Destination driver values.</p>
<p>3. Allocation Based on Source &amp; Destination &#8211; Also known as Assignments &#8211; Here all the driver values are obtained from the intersection of Source &amp; Destination and data from source stage is then assigned to the Destination Stage based on the Assignment driver values.</p>
<p>If you look at our Driver data above (3 records containing FixedDriverValue &amp; 1 containing Weight), you can see that our driver (Resource Count) is loaded in 2 ways. First the FixedDriverValue is loaded at the intersection of Source &amp; Destination stages. The second driver Weight is loaded at the Source Stage intersection. We have chosen these 2 measures (FixedDriverValue &amp; Weight). We could have chosen any other measure like Rate, Volume etc. But each measure has a logical meaning and it is better to stick to the ones we think is logically close to what we are trying to do. If we are not able to use the existing measures and if they don&#8217;t relate to our driver names then we can create custom measures. So, this allocation handling through drivers is defined through the Driver Definition screen in HPCM.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10055" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic121.png" alt="" width="461" height="340" /></p>
<p>As you see in our formula we are basically doing a division of each Resource Count from Stage 2 by the Total Resource Count in Stage 1. HPCM will automatically multiply the resulting values of the driver to the CostInput measure (input data) thereby allocating.</p>
<p>Once we have defined the driver the next step is to assign the driver to both the stages. HPCM allows us to have multiple drivers for each stage. And even within a single dimension in a stage we can define exceptions so that multiple drivers can be assigned within the same dimension. This way we can have allocation logic based not only on Resource Count but also on say Clocked Time of a resource in certain cases. Driver assignment is done through the Driver Selection screen in HPCM.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10054" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic13.png" alt="" width="467" height="263" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10053" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic14.png" alt="" width="434" height="259" /></p>
<p>After the assignments, one other important feature of HPCM is its ability to assign allocations on a cell by cell basis. So, what we can do is, for each cell in the Source Stage we can assign the Destination cell(s) in the Destination Stage. That way we can clearly find out what intersections will get affected by what allocation logic. If you had to do them through say Essbase Calculation Scripts alone, it would have been such a laborious task not only while doing the allocations but also in maintaining them. In our example, lets assign the Data intersection of HRCosts in Stage 1 to the 3 Destination Projects in Stage 2 as shown below</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10052" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic15.png" alt="" width="489" height="226" /></p>
<p>Now lets run the Calculation &amp; then immediately transfer the data to the ASO cube from the Manage Calculation screen.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10051" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic16.png" alt="" width="483" height="263" /></p>
<p>If you now look at the data you can clearly see that each project now will have the corresponding costs allocated.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10050" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic17.png" alt="" width="478" height="283" /></p>
<p>To validate how the costs have flown through the stages, HPCM provides an option to do a stage balancing report. This will show us how the costs have moved from stage to stage. In addition one biggest advantage of HPCM is, if there are any unassigned costs in the source, those will automatically move into Idle Costs (or we can configure it throw an error to ensure all costs are always allocated).</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10049" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic18.png" alt="" width="491" height="153" /></p>
<p>In terms of reporting, the ASO cube that HPCM provides will be more than sufficient. But based on what i have seen, we will have a lot of un-necessary dimensions especially when we are not concerned about the inter-stage essbase dimensions. In such cases, we can build our own ASO cube and extract only the necessary intersections that we need. But for now, i will showcase how BI EE 11g can be used for reporting again the native HPCM ASO cube. I will quickly show the lineage breakup reports as well</p>
<p>We start off with importing the ASO cube into BI EE which is pretty straight-forward as shown below.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10048" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic19.png" alt="" width="265" height="294" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10047" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic20.png" alt="" width="231" height="374" /></p>
<p>Then lets start with building the report just for looking at our Stage 1 data. Remember Stage 1 input HRCosts data is loaded against NoMember intersections of the other dimensions. So we will have to explicitly filter to arrive at the right data.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10046" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic21.png" alt="" width="469" height="227" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10045" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic22.png" alt="" width="479" height="85" /></p>
<p>Similarly to get the final allocated data we will have to apply filters as shown below</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10044" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic23.png" alt="" width="487" height="208" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10043" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic24.png" alt="" width="461" height="149" /></p>
<p>In the same way we can get the driver values directly from the cube using a simple BI EE report. All of these are shown in the form of a dashboard &#8211; showing how the costs from stage to stage using the drivers.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-10042" src="http://www.rittmanmead.com/wp-content/uploads/2012/01/Pic25.png" alt="" width="468" height="171" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2012/01/hyperion-profitability-cost-management-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OBIEE Calculations, MDX Functions, Flattened Measures, and Essbase Sources</title>
		<link>http://www.rittmanmead.com/2011/06/obiee-calculations-mdx-functions-flattened-measures-and-essbase-sources/</link>
		<comments>http://www.rittmanmead.com/2011/06/obiee-calculations-mdx-functions-flattened-measures-and-essbase-sources/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 05:56:33 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8566</guid>
		<description><![CDATA[When you starting working with Essbase sources and OBIEE, how you create calculations quickly becomes one of the more interesting aspects of working with the two technologies. With Essbase, you&#8217;ve got a powerful multi-dimensional database that features many functions and calculation capabilities that you&#8217;d like to use with your analyses and dashboards, and the BI [...]]]></description>
			<content:encoded><![CDATA[<p>When you starting working with Essbase sources and OBIEE, how you create calculations quickly becomes one of the more interesting aspects of working with the two technologies. With Essbase, you&#8217;ve got a powerful multi-dimensional database that features many functions and calculation capabilities that you&#8217;d like to use with your analyses and dashboards, and the BI Server does an excellent job of hiding the complexity of working with sources such as these. But if you want to get the best out of Essbase, or at least understand how OBIEE and the BI Server interacts with the Essbase server, it&#8217;s worth taking a look under the covers to see how things work. If you know a bit of Essbase and MDX, the query language that OBIEE uses to communicate with Essbase, it&#8217;s also interesting to see how OBIEE&#8217;s MDX compares with the MDX you&#8217;d write using a tool such as Essbase Administration Services or the MAXL/MDX command-line tool, <strong>essmsh</strong>.</p>
<p>To illustrate what I&#8217;m talking about, take a simple analysis created against the <strong>Sample.Basic</strong> Essbase database, which I&#8217;ve imported into an OBIEE 11.1.1.5. repository using the default settings, and then created physical cube columns for the UDAs within the <strong>Market</strong> dimension, and the <strong>Default</strong> alias table within the <strong>Product</strong> dimension.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-3.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-39.png" border="0" alt="Sshot 3" width="400" height="510" /></p>
<p>Notice how, at this stage, the measure hierarchy has been brought in as-is, with the full hierarchy preserved and a single measure, in a physical cube column called <strong>Basic &#8211; measure</strong>. To get access to a particular measure (for example, <strong>Profit</strong>), you&#8217;ll need to include this measure in an analysis criteria and filter on the <strong>Gen2, Measures</strong>, <strong>Gen3, Measures </strong>or <strong>Gen4, Measures</strong> logical column; or alternatively, access the measure dimension via a hierarchical column, and drill-down or use selection steps until you get to the one you want.</p>
<p>So let&#8217;s start then by creating an analysis where I have the <strong>Marketing</strong> and <strong>Payroll </strong>measures along the columns, and the <strong>East</strong> and <strong>West</strong> regions on the rows, and the numbers are for the Budget scenario. In MDX terms, using the essmsh command-line tool this would look something like:</p>
<pre>MAXL> select {Measures.Marketing, Measures.Payroll} ON COLUMNS,
2>           {Market.East, Market.West, Market.South} ON ROWS
3> from Sample.Basic
4> where {Scenario.Budget};

Axis-1              (Marketing)         (Payroll)
+-------------------+-------------------+-------------------
(East)                            11210                7100
(West)                            16800               11660
(South)                            6120                5090</pre>
<p>In OBIEE 11g, an equivalent analysis would look like this, using a pivot table view:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage21.png" border="0" alt="NewImage" width="258" height="223" /></p>
<p>The criteria to create such an analysis would look like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-1.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-110.png" border="0" alt="Sshot 1" width="467" height="354" /></p>
<p>Now this criteria is relatively simple, as we&#8217;ve selected measures that are within the same generation (Marketing and Payroll, both within the third generation in the Measure hierarchy). In reality, your measures are likely to come from different measure hierarchy generations, which is the reason you&#8217;ll often flatten the measures in the OBIEE physical model, but I&#8217;ll come on to the why and wherefores of that in a moment. For now though, the criteria is fairly simple and results in the following MDX sent to the Essbase server.</p>
<pre>
With
set [_Market2]  as '{Distinct({[Market].[East], [Market].[South], [Market].[West]})}'
set [_Measures4]  as '{Distinct({[Measures].[Marketing], [Measures].[Payroll]})}'
select
{ [Attribute Calculations]
} on columns,
NON EMPTY {crossjoin({[_Market2]},{[_Measures4]})} properties GEN_NUMBER, [Measures].[MEMBER_UNIQUE_NAME], [Measures].[Memnor], [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
where ([Scenario].[Budget])
</pre>
<p>OK, not so bad. It&#8217;s a variation on what we coded by hand (using <strong>WITH</strong> blocks to define the set of rows and columns upfront, and a <strong>crossjoin</strong> to return the product of the two dimension member sets, but it&#8217;s recognizable as being more or less equivalent to our hand-coded MDX.</p>
<p>So what if we try a simple calculation? Let&#8217;s add the <strong>Marketing</strong> and <strong>Payroll</strong> measures together to create a new measure called <strong>Direct Costs</strong>. In MDX, I&#8217;d write this as:</p>
<pre>
MAXL> with member Measures.[Direct Costs] as
2>            'Measures.Marketing + Measures.Payroll'
3> select {Measures.Marketing, Measures.Payroll, Measures.[Direct Costs]} ON COLUMNS,
4>           {Market.East, Market.West, Market.South} ON ROWS
5> from Sample.Basic
6> where {Scenario.Budget};

Axis-1              (Marketing)         (Payroll)           (Direct Costs)
+-------------------+-------------------+-------------------+-------------------
(East)                            11210                7100               18310
(West)                            16800               11660               28460
(South)                            6120                5090               11210
</pre>
<p>So let&#8217;s try and create this now using OBIEE. Going back to the analysis criteria, I look for a way to add the two measures together.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-4.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-43.png" border="0" alt="Sshot 4" width="600" height="355" /></p>
<p>OK, so this is interesting. There&#8217;s no <strong>Marketing</strong> or <strong>Payroll</strong> measure to select and use as part of an expression, as the measure name is actually a dimension member and there&#8217;s only one measure as-such. This is the drawback with bringing your measure dimension into OBIEE &#8211; you don&#8217;t then have individual measures you can select from to include in an analysis, create or include in calculations, and so on.</p>
<p>Now one way around this is to use the new &#8220;selection steps&#8221; feature in OBIEE 11g to calculate this value post-aggregation, after the initial filtering has happened and using the resulting result set. I therefore create a new selection step, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-5.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-54.png" border="0" alt="Sshot 5" width="600" height="349" /></p>
<p>and Bob is indeed your uncle.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-6.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-63.png" border="0" alt="Sshot 6" width="461" height="433" /></p>
<p>So apart from figuring out the selection step move, this was actually quite straightforward. So how does the MDX look?</p>
<pre>
With
set [_Market2]  as '{Distinct({[Market].[East], [Market].[South], [Market].[West]})}'
set [_Measures4]  as '{Distinct({[Measures].[Marketing], [Measures].[Payroll]})}'
set [_Measures4FILTER1]  as '{Distinct({[Measures].[Payroll]})}'
set [_Measures4FILTER2]  as '{Distinct({[Measures].[Marketing]})}'
member [Attribute Calculations].[_MSCMFILTER1] as 'AGGREGATE(Intersect([_Measures4FILTER1], {[Measures].CurrentMember}))', SOLVE_ORDER = 102
member [Attribute Calculations].[_MSCMFILTER2] as 'AGGREGATE(Intersect([_Measures4FILTER2], {[Measures].CurrentMember}))', SOLVE_ORDER = 102
select
{ [Attribute Calculations],
[Attribute Calculations].[_MSCMFILTER1],
[Attribute Calculations].[_MSCMFILTER2]
} on columns,
NON EMPTY {crossjoin({[_Market2]},{[_Measures4]})} properties GEN_NUMBER, [Measures].[MEMBER_UNIQUE_NAME], [Measures].[Memnor], [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
where ([Scenario].[Budget])
</pre>
<p>OK, so what&#8217;s going on here is the situation <a href="http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-the-essbase-connectivity-part-1/">Venkat described back in some earlier blog posts</a>, where selection steps involves the BI Server generating MDX that calculates lots of additional values which it then combines back together to give you your result set. Running this MDX statement through the MAXL command shell gives us this output:</p>
<pre>
Axis-1              Axis-1.properties   (Attribute Calculat (_MSCMFILTER1)      (_MSCMFILTER2)
+-------------------+-------------------+-------------------+-------------------+-------------------
(East, Marketing)   (GEN_NUMBER = 2, ty               11210            #Missing               11210
(East, Payroll)     (GEN_NUMBER = 2, ty                7100                7100            #Missing
(South, Marketing)  (GEN_NUMBER = 2, ty                6120            #Missing                6120
(South, Payroll)    (GEN_NUMBER = 2, ty                5090                5090            #Missing
(West, Marketing)   (GEN_NUMBER = 2, ty               16800            #Missing               16800
(West, Payroll)     (GEN_NUMBER = 2, ty               11660               11660            #Missing
</pre>
<p>The BI Server takes this result set, plus some additional member information it gets via another MDX query, and adds the results together as per the selection step calculation to give you your direct costs calculation. So whilst it&#8217;s very easy for the end-user to create their calculation (and in the case of using selection steps, just as easy to select measures from different measure hierarchy generations), but it&#8217;s not actually Essbase that&#8217;s doing the calculation, its the BI Server (and in fact Essbase is doing a lot of extra work to return all these subtotals, at least compared to my hand-written MDX).</p>
<p>An alternative to using selection steps though, would be to flatten the measure hierarchy into a flat list of measures, the same way that OBIEE 10g did by default when importing Essbase outlines. How does this affect the MDX that&#8217;s generated for a calculation like this?</p>
<p>I start then by duplicating the Essbase database in the OBIEE repository physical layer, and then select the option to flatten the measure hierarchy, giving me a physical model looking like this:</p>
<p> </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-7.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-72.png" border="0" alt="Sshot 7" width="268" height="518" /></p>
<p>Now creating my calculation in the analysis criteria is really easy, as I&#8217;ve got individual measures for the <strong>Marketing</strong> and <strong>Payroll</strong> members, which I can just add together to create a new measure in the criteria.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-9.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-9.png" border="0" alt="Sshot 9" width="600" height="366" /></p>
<p>So how do the numbers look? One advantage of working with a flattened list of measures, is that you can use a regular table view to display the results, rather than having to use a pivot table view as you do with a measure hierarchy. Taking a first look, the figures look correct:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-10.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-102.png" border="0" alt="Sshot 10" width="393" height="196" /></p>
<p>What about the MDX? Well, it&#8217;s actually a lot closer to the MDX I wrote by hand; instead of adding the two measures together, it creates a set of the two (giving the same result, in this instance), but other than that, it looks pretty close to the MDX I wrote.</p>
<pre>
With
set [_Market2]  as '{Distinct({[Market].[East], [Market].[South], [Market].[West]})}'
select
{ [Measures].[Payroll],
[Measures].[Marketing]
} on columns,
NON EMPTY {{[_Market2]}} properties GEN_NUMBER, [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
where ([Scenario].[Budget])
</pre>
<p>Just as a quick check, I create another analysis that randomly adds up, divides and otherwise applies simple operators to some measures.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-12.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-123.png" border="0" alt="Sshot 12" width="571" height="116" /></p>
<p>Now if I were to write an MDX statement to retrieve numbers like this, I&#8217;d probably write something along the lines of:</p>
<pre>
MAXL> with member Measures.[Sales Divided by Marketing]
2> as 'Measures.Sales / Measures.Marketing'
3> member Measures.[Sales Plus Total Expenses]
4> as 'Measures.Sales + Measures.[Total Expenses]'
5> member Measures.[Sales times Margin]
6> as 'Measures.Sales * Measures.Margin'
7> select {Measures.Sales, Measures.Marketing, Measures.[Sales Divided by Marketing], Measures.[Sales Plus Total Expenses], Measures.[Sales times Margin]} ON COLUMNS,
8> {Market.children} ON ROWS
9> from [Sample.Basic]
10> ;

Axis-1              (Sales)             (Marketing)         (Sales Divided by M (Sales Plus Total E (Sales times Margin
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------
(East)                            87398               14721    5.93696080429319              112708          4323666458
(West)                           132931               23529    5.64966636916146              173096          9308626206
(South)                           50846                8281    6.14007970051926               66504          1469246016
(Central)                        129680               19706     6.5807368314219              164544          9482979680
</pre>
<p>Looking at the MDX generated by the BI Server though, using flattened measures, gives us a bit of a surprise:</p>
<pre>
With
set [_Market2]  as '[Market].Generations(2).members'
select
{ [Measures].[Marketing],
[Measures].[Sales],
[Measures].[Total Expenses],
[Measures].[Margin]
} on columns,
NON EMPTY {{[_Market2]}} properties GEN_NUMBER, [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
</pre>
<p>All the BI Server does, then, is just request the basic values for measures from Essbase. The BI Server then performs the calculations, and you&#8217;ll find this happens all over the place. Where you would have assumed that the BI Server would ship-down calculations to the Essbase server, instead it just requests the basic data and performs the calculation in-memory, in the BI Server.</p>
<p>But if you particularly want to make use of an Essbase MDX function, there is actually a way you can do this, and it&#8217;s through the <strong>EVALUATE</strong>, <strong>EVALUATE_AGGR</strong> and <strong>EVALUATE_PREDICATE</strong> functions within OBIEE. These functions provide a way to pass through a request to the underlying datasource for an analysis to use a particular function, and you can use this approach to make use of Oracle database functions that either don&#8217;t have an equivalent within OBIEE, or perhaps you&#8217;ve written yourself. But you can also use this approach for working with Essbase sources, and it even allows you to do things that would be tricky to do in the ROLAP-world of OBIEE but are easy to do within a multi-dimensional database such as Essbase.</p>
<p>Take, for example, a situation were we want to list out, in an analysis, a list of markets together with sales amount AND the average sale amount for the states within each of the regions. In this case, getting the average sale amount for each region&#8217;s constituent states would actually be quite tricky with a regular relational source, as the dimension members your calculating the average for are at a different level of granularity to the one used in the query, but for Essbase this is easy. Let&#8217;s take a look at how we&#8217;d write this in MDX first.</p>
<pre>
MAXL> with
2>   set regions  as 'Market.children'
3>   member Measures.Children_AVG as 'AVG(Market.currentmember.children,Measures.Sales)'
4> select
5>   { Measures.Sales,
6>     Measures.Children_AVG
7>   } on columns,
8>   NON EMPTY {regions} on rows
9> from [Sample.Basic];

Axis-1              (Sales)             (Children_AVG)
+-------------------+-------------------+-------------------
(East)                            87398             17479.6
(West)                           132931             26586.2
(South)                           50846             12711.5
(Central)                        129680    21613.3333333333
</pre>
<p>Now moving over to OBIEE, what we want to use now is an <strong>EVALUATE_AGGR</strong> function, to leverage the <strong>AVG</strong> MDX function. This function takes two arguments:</p>
<p>AVG(<strong>set</strong>, <strong>numeric_value</strong>)</p>
<p>In other words, you pass it a set of members (or &#8220;tuples&#8221; in Essbase-speak), and a number to perform the average over. So now, if we want to use this in OBIEE to return an aggregated value, we need to substitute a dimension member reference and a measure reference which in turn will be passed down, along with the call to the <strong>AVG</strong> MDX function, to Essbase.</p>
<p>To do this I create a new logical column in the business model holding my Essbase data (the one with flattened measures), and edit the logical table source expression list to reference this function.</p>
<p> </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-13.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-133.png" border="0" alt="Sshot 13" width="600" height="272" /></p>
<p>I also set the default aggregation type for this new column to <strong>AGGR_EXTERNAL</strong>, and then copy it across to the presentation layer subject area.</p>
<p>Now I can create an analysis that lists out the regions, their total sales, and then the average sale value for the states below each region, something that it&#8217;d actually be quite tricky to do with a relational source.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-14.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-143.png" border="0" alt="Sshot 14" width="323" height="213" /></p>
<p>Taking a look at the MDX generated by the BI Server, it looks along the same lines as the one we wrote by hand:</p>
<pre>
With
set [_Market2]  as '[Market].Generations(2).members'
member [Measures].[_MSCM1] as 'AVG(Market.currentmember.children,[Measures].[Sales])', SOLVE_ORDER = 101
select
{ [Measures].[Sales],
[Measures].[_MSCM1]
} on columns,
NON EMPTY {{[_Market2]}} properties GEN_NUMBER, [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
</pre>
<p>Now what we&#8217;ve seen there is an example of an MDX function that returns an aggregated value, hence our use of <strong>EVALUATE_AGGR</strong>. But we can also return values that can be used as attributes for a dimension member, for example the count of immediate &#8220;children&#8221; under a dimension member. In this example, if we were to write a query in MDX that returned total sales for a region and also the number of states underneath it, the query would look like this:</p>
<pre>
MAXL> WITH
2> member Measures.Num_Children AS
3>   'count(Market.currentmember.children)'
4> select {measures.sales, measures.num_children} on columns,
5> {market.children} on rows
6> from Sample.Basic;

Axis-1              (Sales)             (Num_Children)
+-------------------+-------------------+-------------------
(East)                            87398                   5
(West)                           132931                   5
(South)                           50846                   4
(Central)                        129680                   6
</pre>
<p>To make use of this dimension member count in OBIEE, we&#8217;d need to use the <strong>EVALUATE</strong> function, and pass to it a reference to the currently selected dimension members&#8217; children, and the name of the dimension that we&#8217;ll be calculating this for.</p>
</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-15.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-152.png" border="0" alt="Sshot 15" width="600" height="311" /></p>
<p>Taking a look at the MDX generated by the BI Server, it&#8217;s as you&#8217;d expect.</p>
<pre>
With
set [_Market2]  as '[Market].Generations(2).members'
member [Measures].[_MSCM1] as 'count([Market].Generations(1).dimension.currentmember.children)'
select
{ [Measures].[Sales],
[Measures].[_MSCM1]
} on columns,
NON EMPTY {{[_Market2]}} properties GEN_NUMBER, [Market].[MEMBER_UNIQUE_NAME], [Market].[Memnor] on rows
from [Sample.Basic]
</pre>
<p>So it&#8217;s a bit of a mixed picture with calculations with an Essbase source. On the one hand, OBIEE doesn&#8217;t really make much use at all of MDX functions, instead retrieving just the basic measure values from the Essbase database and performing the calculations itself, within the BI Server. In many cases this is fine, but it can trip you up if you&#8217;re expecting to offload processing to the Essbase server but instead, you find the BI Server is actually doing most of the work. In some cases there&#8217;s good reasons for the approach Oracle have taken &#8211; not all MDX functions work across all storage types, for example &#8211; but it&#8217;s worth being aware of this before you get too deep into working with Essbase.</p>
<p>The flip side of this though is being able to access MDX functions directly via the <strong>EVALUATE_AGGR</strong> and <strong>EVALUATE</strong> functions. These functions actually give you the ability to perform calculations, across levels and dimensions, that you would even be able to do with regular sources and OBIEE functions, and on most projects using Essbase sources you&#8217;re going to be using these functions alot, both to compensate for lack of push-down from the BI Server, but mostly to take advantage of the MDX functions and cross-hierarchy and level calculations that you can perform from Essbase.</p>
<p>There is one exception to all this though, and it&#8217;s an interesting one. The one type of OBIEE function that does get pushed down correctly to Essbase, is time-series functions. The <strong>AGO</strong>, <strong>TODATE</strong> and (new in 11g) <strong>PERIODROLLING</strong> do indeed get translated down to their equivalent MDX functions, which means that you can use the time-series calculations and wizard available in OBIEE to create all your time-based derived measures.</p>
<p>For example, consider a situation where you wish to calculate the value of sales for the previous quarter. In OBIEE, you&#8217;d create a time-series calculation looking like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-16.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-162.png" border="0" alt="Sshot 16" width="600" height="260" /></p>
<p>Then your analysis would look like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-17.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-172.png" border="0" alt="Sshot 17" width="304" height="213" /></p>
<p>Taking a look at the MDX generated by the BI Server, it does indeed use the <strong>PARALLELPERIOD</strong> MDX function.</p>
<pre>
With
set [_Year2]  as '[Year].Generations(2).members'
member [Measures].[_MSCM1] as '(ParallelPeriod([Year].[Quarter], 1,[Year].currentmember), [Measures].[Sales])'
select
{ [Measures].[Sales],
[Measures].[_MSCM1]
} on columns,
NON EMPTY {{[_Year2]}} properties GEN_NUMBER, [Year].[MEMBER_UNIQUE_NAME], [Year].[Memnor] on rows
from [Sample.Basic]
</pre>
<p>So, it&#8217;s been a long post, but what observations and rules-of-thumb can we draw therefore for Essbase sources and calculations?</p>
<ul>
<li>Measure hierarchies are great for end-users, particularly if they come from a traditional Essbase background. Coupled with selection steps, it&#8217;s easy to select measures from a hierarchy and perform calculations all from the Answers UI</li>
<li>But measure hierarchies can often generate quite complex and costly MDX queries, and it&#8217;s often easier, as a developer, to work with flattened lists of measures. You can create these in a separate physical database model, or combine a measure hierarchy with a flattened list of measures in the same business model</li>
<li>OBIEE out-of-the-box actually makes very little use of MDX functions in the Essbase database, instead choosing in most cases to just request measure values and then performing any calculations itself</li>
<li>The exception to this is time-series queries, which do get pushed-down to their equivalent MDX function</li>
<li>In some cases, you can compensate for this lack of push-down through the EVALUATE and EVALUATE_AGGR functions, but they don&#8217;t cover all situations and also limit you in terms of drill-down etc. EVALUATE and EVALUATE_AGGR also provide you with some extra functionality though, as they let you harness the ability of Essbase to calculate numbers across different hierarchy levels and dimensions.</li>
</ul>
<p>That&#8217;s it for Essbase for a while now; keep an eye on the blog for a bit more on OBIEE 11g and Oracle OLAP, plus possibly some content on OBIEE 11g and Microsoft Analysis Services, to see how well support for Microsoft&#8217;s OLAP server compares to Essbase.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/obiee-calculations-mdx-functions-flattened-measures-and-essbase-sources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Incremental Essbase Metadata Imports Now Possible with OBIEE 11g</title>
		<link>http://www.rittmanmead.com/2011/06/incremental-essbase-metadata-imports-now-possible-with-obiee-11g/</link>
		<comments>http://www.rittmanmead.com/2011/06/incremental-essbase-metadata-imports-now-possible-with-obiee-11g/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 19:14:26 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8528</guid>
		<description><![CDATA[If you were an early adopter of Essbase integration with OBIEE, the 10g release had a number of restrictions that made it hard to use in production. Chief amongst these was the lack of any ability to refresh the physical model of the Essbase database within the Oracle BI Repository, such that if you added [...]]]></description>
			<content:encoded><![CDATA[<p>If you were an early adopter of Essbase integration with OBIEE, the 10g release had a number of restrictions that made it hard to use in production. Chief amongst these was the lack of any ability to refresh the physical model of the Essbase database within the Oracle BI Repository, such that if you added a new dimension, or just a new UDA or generation to the Essbase outline, you more or less had to delete the existing model, re-import it from Essbase and re-work any integration you&#8217;d performed with any other data sources.</p>
<p>These two <a href="http://hekatonkheires.blogspot.com/2009/10/obiee-101341-essbase-931-udml-for-cube.html">blog</a> <a href="http://hekatonkheires.blogspot.com/2010/01/obiee-101341-essbase-931-udml-for-cube.html">posts</a> by Christian Berg back in 2010, based on OBIEE 10.1.3.4.1 and Essbase 9.3.1, describe the problem well and unless you were prepared to do some unsupported hacking with UDML and Notepad, working with an evolving Essbase outline was pretty much impossible with OBIEE 10g, and when 11g came out many customers re-defined their Essbase-derived physical model hierarchies as value-based to get around this problem.</p>
<p>But value-based hierarchies have their own issues, such as not being able to make use of UDAs or alias tables, or as outlined in this <a href="http://www.rittmanmead.com/2010/10/oracle-bi-ee-11g-vertical-fragmentation-on-parent-child-hierarchies-drills-from-essbase-to-oracle-database/">previous posting</a>, not being suitable for vertical federation (drill-to-detail) with relational and file sources. So, it was with interest that I noticed a new section in the Essbase metadata modeling section of the OBIEE 11g documentation (11.1.1.3 and 11.1.1.5) entitled<em><a href="http://download.oracle.com/docs/cd/E21764_01/bi.1111/e10540/physicallayer.htm#sthref744"> &#8220;About Incremental Import&#8221;</a>, </em>that says:</p>
<p><em>&#8220;You can choose to incrementally import Essbase metadata. In other words, you can perform an initial import, and then import again. You might want to import incrementally when information in the data source has changed, or when your first import only included a subset of the metadata. Note the following about incremental import:</em></p>
<ul>
<li><em>When you re-import metadata that already exists in the Physical layer, a message appears, warning you that your Physical objects will be overwritten.</em></li>
<li><em>If you delete data in the source, re-importing the metadata does not automatically perform the deletion in the Physical layer. Instead, you must manually delete the corresponding Physical objects.</em></li>
<li><em>If you rename an object in the source, the renamed object is imported as a new object. In this case, both the old object and the new (renamed) object are displayed in the Physical layer.</em></li>
<li><em>In general, customizations that you have performed on the Physical layer data, such as determining the alias column to use for display, are retained after an incremental import. If you want to revert to the default imported view, you must delete the existing Physical layer objects and then re-import the metadata.&#8221;</em></li>
</ul>
<p>So, how does this work, and how easy is it to implement? With this question in mind, I thought I&#8217;d give it a try.</p>
<p>To start off, I&#8217;ve imported a copy of the <strong>Sample.Basic</strong> Essbase database into the <strong>Physical</strong> layer of an Oracle BI Repository. Running this import creates a physical database named after the Essbase server (<strong>essdemo</strong>), a physical catalog named after the Essbase application (<strong>Sample</strong>), and a cube table named after the Essbase database (<strong>Basic</strong>). I performed the import using OBIEE 11.1.1.5 with all the import options left at their default value.</p>
<p>As you can see from the screenshot below, the <strong>Market</strong> physical dimension has three UDAs associated with it; <strong>Major Market</strong>, <strong>Small Market</strong> and <strong>New Market</strong>.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-1.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-16.png" border="0" alt="Sshot 1" width="374" height="300" /></p>
<p>So, as my first test, what if I use Essbase Administration Services to add a new UDA value to the <strong>West</strong> Member called <strong>Development Market,</strong> a UDA value that&#8217;s new to the outline and therefor wouldn&#8217;t have been imported into the OBIEE repository in the past?</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-3.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-33.png" border="0" alt="Sshot 3" width="488" height="247" /></p>
<p>I save the updated outline and then go and re-run the <strong>Import Metadata</strong> wizard in the Oracle BI Administration tool. Selecting the same Essbase database brings up a warning asking me to confirm I want to re-import.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-4.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-42.png" border="0" alt="Sshot 4" width="600" height="267" /></p>
<p>After running the re-import, I check the Market dimension, and yes, it contains the new UDA value.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-5.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-53.png" border="0" alt="Sshot 5" width="440" height="272" /></p>
<p>But what if what the Administration tool has done, is just overwrite the old cube table definition with the new one? This could cause me problems if I&#8217;d fine-tuned the physical model previously by, for example, setting the hierarchy type for the <strong>Market</strong> dimension to <strong>Fully Balanced</strong>, or I&#8217;d taken the Measure hierarchy and flattened it into a flat list of measures.</p>
<p>So let&#8217;s perform these customizations on the physical model, by firstly setting the <strong>Market</strong> hierarchy type to <strong>Fully Balanced </strong>(I would choose <strong>Value</strong>, but you can&#8217;t access UDAs if you set your hierarchy to <strong>Value</strong>):</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-10.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-101.png" border="0" alt="Sshot 10" width="425" height="272" /></p>
<p>I then right-click on the cube table and select the <strong>Convert measure dimension to flat measures</strong> option.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-7.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-71.png" border="0" alt="Sshot 7" width="414" height="208" /></p>
<p>So at this point, I&#8217;m looking to preserve the change I&#8217;ve made to the hierarchy type for the <strong>Market</strong> dimension, and also the new set of flattened measures in the cube table. Note that converting the measures to flat measures still leaves the <strong>Measure</strong> dimension in the cube table, and I would generally delete this from the business model after dragging and dropping the physical model into the <strong>Business Model and Mapping</strong> layer.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-11.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-112.png" border="0" alt="Sshot 11" width="260" height="385" /></p>
<p> </p>
<p>After saving the changed physical model, I then go back into Essbase Administration Services and add another UDA to one of the <strong>Market</strong> dimension members.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-8.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-8.png" border="0" alt="Sshot 8" width="309" height="363" /></p>
<p>I then use the I<strong>mport Metadata</strong> wizard in the Oracle BI Administration tool to bring in the updated outline. Checking the resulting updated cube table, the new UDA is there as expected.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-12.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-122.png" border="0" alt="Sshot 12" width="409" height="173" /></p>
<p>The flattened measures are still there, but unfortunately, the <strong>Hierarchy Type</strong> for the <strong>Market</strong> hierarchy has been set back to <strong>Unbalanced</strong>.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-13.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-132.png" border="0" alt="Sshot 13" width="425" height="271" /></p>
<p>So now, even thought I know that I can&#8217;t make use of UDAs when I set the <strong>Market</strong> hierarchy type to <strong>Value</strong>, I&#8217;ll set it to this anyway, and then go and add another UDA to the dimension, to see if it does preserve the <strong>Value</strong> hierarchy type setting after a re-import. I set the <strong>Hierarchy Type</strong> to <strong>Value:</strong></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-14.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-142.png" border="0" alt="Sshot 14" width="425" height="280" /></p>
<p>I then add another UDA to the outline, re-import it using the <strong>Import Metadata</strong> wizard, and interestingly find that the <strong>Value</strong> hierarchy-type setting has been preserved. If I then switch the Hierarchy Type back to <strong>Unbalanced</strong>, <strong>Fully Balanced</strong> or any other level-based hierarchy type, I can then also access the new UDA that was added to the outline.</p>
<p>So the rule here seems to be: if you&#8217;ve added UDAs to your outline, and you re-import the outline using OBIEE 11.1.1.5 (I&#8217;ve also checked this for 11.1.1.3, it&#8217;s the same behaviour), existing changes to the outline are preserved, except <strong>Hierarchy Type</strong> settings where all level-based hierarchy types are reset back to <strong>Unbalanced</strong>. Any changes you&#8217;ve made to flatten the measure hierarchy, for example, are preserved OK.</p>
<p>So what about aliases? If we add a new alias table to the Essbase outline, and use it to add a new alias value to, for example, the <strong>East</strong> member, what happens?</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-15.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-151.png" border="0" alt="Sshot 15" width="402" height="372" /></p>
<p>At the moment, if I view the list of Alias tables imported into the cube table definition, I can see the standard <strong>Member_Name</strong>, <strong>Default</strong> and <strong>Long Names</strong> aliases.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-16.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-161.png" border="0" alt="Sshot 16" width="424" height="219" /></p>
<p>Now again, as with UDAs, you can&#8217;t access alias tables when you set your Essbase-derived physical hierarchy type to <strong>Value</strong>, so I set it back to <strong>Fully Balanced</strong> and then import the updated outline.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-17.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-171.png" border="0" alt="Sshot 17" width="424" height="214" /></p>
<p>As with UDAs, the new alias table has been brought in with the re-import, the hierarchy type has been reset back to <strong>Unbalanced</strong>, but other that that, the rest of the cube table definition seems unchanged.</p>
<p>So what about something a bit more drastic? What if one of the hierarchies in your Essbase outline suddenly grew an extra generation (which would correspond to a new hierarchy level and set of cube columns in the OBIEE physical layer), which in 10g would mean you were pretty-much out-of-luck. To test this out, first I add a new generation to the <strong>Scenario</strong> hierarchy, adding I<strong>nitial Budget</strong> and <strong>Revised Budget</strong> members as children to the existing <strong>Budget</strong> member. I save the outline and restructure the cube, in preparation for importing into the OBIEE repository.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-18.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-181.png" border="0" alt="Sshot 18" width="498" height="229" /></p>
<p>At the moment, the Scenario dimension and hierarchy within the cube table has two levels, corresponding to the two generations in the Essbase hierarchy.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-19.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-19.png" border="0" alt="Sshot 19" width="298" height="194" /></p>
<p>I&#8217;ve also created a corresponding business mode, and subject area, off of this cube table, so that I can see how easy it&#8217;ll be to incorporate the additional levels into already-derived business models and subject areas.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-20.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-20.png" border="0" alt="Sshot 20" width="283" height="433" /></p>
<p>So, here we go. I use the Import Metadata wizard to re-import the database definition into the physical layer, and check out the updated physical model.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-21.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-21.png" border="0" alt="Sshot 21" width="319" height="258" /></p>
<p>And there we have it. The new child members in the Scenario dimension hierarchy have caused a new level to be created in the physical model, something that (unless i&#8217;m much mistaken) wasn&#8217;t possible in OBIEE 10g. And this is quite a big deal &#8211; for many of our customers, not being able to refresh their physical model off of a changed outline was a showstopper, and it&#8217;s been the major driver towards adoption of value-based hierarchies in OBIEE 11g. The fact that this is now possible is actually quite big news, and I&#8217;m surprised the dev team within Oracle responsible for OBIEE/Essbase integration hasn&#8217;t publicised this &#8211; I only came across it when trawling through the online docs whilst writing the Essbase chapter of the OBIEE 11g book.</p>
<p>So how easy it is to incorporate these changes into  your business model, which remember is automatically generated for you when you drag and drop your cube table into the business model and mapping layer of the Oracle BI Repository. To find out, I start by dragging three of the four cube columns that are contained within the new <strong>Gen3, Scenario</strong> physical level across to the correspondng business model logical table, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-22.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-221.png" border="0" alt="Sshot 22" width="241" height="178" /></p>
<p>Then I add this additional key column to the logical table key, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-29.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-291.png" border="0" alt="Sshot 29" width="444" height="301" /></p>
<p>Next, I add a new child level to the existing <strong>Scenario</strong> logical dimension, and add these three logical columns to the level.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-23.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-23.png" border="0" alt="Sshot 23" width="307" height="210" /></p>
<p>Now I add the logical level keys, copying how they are set up for the other levels.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-24.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-24.png" border="0" alt="Sshot 24" width="425" height="245" /></p>
<p>Then, to finish off the business model changes, I set the detail (content) level for the logical dimension and logical fact table sources, to reflect the additional level that&#8217;s in the <strong>Scenario</strong> dimension.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-25.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-25.png" border="0" alt="Sshot 25" width="461" height="258" /></p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-26.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-261.png" border="0" alt="Sshot 26" width="460" height="277" /></p>
<p>Finally, I update the subject area in the physical model, deleting the old presentation hierarchy within the Scenario presentation table and replacing it with the updated one from the business model and mapping layer.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-30.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-301.png" border="0" alt="Sshot 30" width="289" height="209" /></p>
<p>Now I can verify the updated repository, and then create a sample analysis. First off, I create an analysis that just includes the updated <strong>Scenario</strong> dimension, to check that the new measure comes through as expected.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-31.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-312.png" border="0" alt="Sshot 31" width="169" height="261" /></p>
<p>You can see the two new scenarios listed under the <strong>Budget</strong> member. Now I add a measure into the analysis, which should lead to these two new members being removed, as no data has been recorded against these scenarios.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-32.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-321.png" border="0" alt="Sshot 32" width="191" height="237" /></p>
<p>Very good. The hierarchical column indicates that there are members under the Budget member, but if you try and click on the &#8220;expand&#8221; icon, nothing happens.</p>
<p>So we&#8217;ve shown that we can import new generations into the repository, and then feed these through to the business model and presentation layers, so that users can make use of the new members at this new level. Interestingly, if you then remove these two new members so that the hierarchy goes back to the original number of generations, and then re-import the outline back into the repository, the Administration tool removes the additional generation from the physical model, so you&#8217;re back to two generations again (contrary to what the manual says, actually). You&#8217;ve then got to go back and adjust your business model and subject area to reflect the new number of generations, but at least it&#8217;s possible to delete generations this way, as well as add them.</p>
<p>But what about something bigger &#8211; say, adding a dimension to an Essbase database? Given what we&#8217;ve seen so far, it&#8217;s likely that the incremental import from the outline will pick up the new dimension, but is it then possible to model it in the business model and subject area?</p>
<p>To test this out, I create another copy of the <strong>Sample.Basic</strong> Essbase database, delete the Population attribute dimension, and then import it into the Oracle BI Repository using the BI Administration tool. For good measure, I change the <strong>Market</strong> dimension hierarchy type t<strong>o Fully Balanced</strong>, and convert the measure dimension to a flat list of measures.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-33.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-332.png" border="0" alt="Sshot 33" width="245" height="457" /></p>
<p>I also create a corresponding business model and subject area for the database.</p>
<p>Then, I restore the missing attribute dimension to the source Essbase database (by dropping it, and then re-copying it from <strong>Sample.Basic</strong> using Essbase Administration Services), and then use the Administration tool to re-import the outline again. How does it work out?</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-34.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-341.png" border="0" alt="Sshot 34" width="326" height="338" /></p>
<p>Well, as you can see, the <strong>Population</strong> attribute dimension has been imported incrementally, and the measure dimension is kept as a flat list. Interestingly, the <strong>Market</strong> dimension&#8217;s hierarchy has been reset back to <strong>Unbalanced</strong>, which indicates that the re-import process sets all the level-based hierarchies back to <strong>Unbalanced</strong> regardless of whether the hierarchy has any other changes. So how easy is it to introduce this new attribute dimension to the business model?</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage20.png" border="0" alt="NewImage" width="583" height="465" /></p>
<p>Dragging and dropping the new attribute dimension from the <strong>Physical</strong> into the <strong>Business Model and Mapping</strong> layer adds two items to the business model; a logical table for the cube columns, and a logical dimension, for the physical hierarchy and physical levels. Notice how the logical table has the &#8220;fact&#8217; indicator in it&#8217;s icon? To remove this, I create a logical join between this new logical table and the fact logical table, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-36.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-361.png" border="0" alt="Sshot 36" width="338" height="337" /></p>
<p>I also set the content level for the fact table logical table source, to reference the detail-level from the new <strong>Population</strong> logical dimension hierarchy.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-37.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-372.png" border="0" alt="Sshot 37" width="462" height="280" /></p>
<p>Finally, I copy the new logical table over to the <strong>Presentation</strong> layer of the repository and add it to the existing subject area, along with it&#8217;s logical dimension. Now, to try it out in an analysis.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-38.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-381.png" border="0" alt="Sshot 38" width="450" height="268" /></p>
<p>So there you go. It all appears to work fine. So to me, it looks like the limitation that we had with OBIEE 10g, where we couldn&#8217;t incrementally refresh a physical model in the repository based off of an Essbase database, is no longer the case. There&#8217;s a couple of gotchas &#8211; level-based hierarchies, even for those that haven&#8217;t been touched &#8211; get reset back to <strong>Unbalanced</strong> from any other level-based hierarchy setting, and the actual process of amending the business model and subject area are a bit tricky (at one point, I kept hitting a drilling error with the new scenario members and generation, but after a couple of restarts and re-imports it just started working).</p>
<p>But if your concern about working with OBIEE and Essbase is not being able to handle outline changes, and value-based hierarchies have other restrictions that you can&#8217;t otherwise work with, I&#8217;d say this is worth taking a look at. This was certainly an eye-opener for me, and I can&#8217;t help wondering why Oracle haven&#8217;t made more noise about this, apart from burying the news hidden away in the documentation. Strange, but good news nonetheless.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/incremental-essbase-metadata-imports-now-possible-with-obiee-11g/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What Skills Does an Oracle BI Developer Need in 2011?</title>
		<link>http://www.rittmanmead.com/2011/06/what-skills-does-an-oracle-bi-developer-need-in-2011/</link>
		<comments>http://www.rittmanmead.com/2011/06/what-skills-does-an-oracle-bi-developer-need-in-2011/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 13:02:38 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Apps]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8476</guid>
		<description><![CDATA[Back in 2009, I wrote a blog post entitled &#8220;What Skills Does an Oracle BI Developer Need in 2009&#8243;. At the time, OBIEE 11g was in the planning stage, Oracle had recently acquired Hyperion and so Essbase and Planning were coming into the picture, and the Oracle BI Applications were becoming mainstream. At the time [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2009, I wrote a blog post entitled <a href="http://www.rittmanmead.com/2009/03/what-skills-does-an-oracle-bi-developer-need-in-2009/">&#8220;What Skills Does an Oracle BI Developer Need in 2009&#8243;</a>. At the time, OBIEE 11g was in the planning stage, Oracle had recently acquired Hyperion and so Essbase and Planning were coming into the picture, and the Oracle BI Applications were becoming mainstream.</p>
<p>At the time I said:</p>
<p>&#8220;<em>Fast forward to 2009, and if I was recruiting an Oracle Business Intelligence developer now, what would I be looking for? Ideally, most if not all of the following product skills:</em></p>
<ul>
<li><em>Oracle Business Intelligence Enterprise Edition, usually with a specialization in either the back-end (the BI Server) or front-end (Answers, Delivers, BI Publisher), would be mandatory</em></li>
<li><em>Essbase skills would be very desirable, and would be required far more than Oracle OLAP skills in the past.</em></li>
<li><em>Oracle BI Application experience is a definite bonus, with the real skill in being able to apply customizations to the ETL and RPD layers</em></li>
<li><em>Another very desirable skill is being able to implement at least Hyperion Planning, and ideally some more of the Hyperion financial applications. It’s rare though to find people with both good OBIEE and Hyperion skills, those that do can virtually write their own salary cheque.</em></li>
<li><em>In terms of ETL, OWB is now “mainstream” and is a mandatory skill. ODI is rising in importance, but I don’t see many “classic BI” projects that use it, at least at the moment.</em></li>
</ul>
<p><em>Compared to five years ago, skills in the Oracle database, and in particular with the Oracle Application Server, are less of a priority, as security for example is usually handled now by the OBIEE BI Server, and fast access to data is typically done through Essbase. Also, now that Oracle’s BI tools (and Fusion Middleware) are designed to work across heterogeneous platforms, its more useful now for developers to have experience with Active Directory, for example, compared to Oracle Internet Directory, and it’s also useful to have knowledge of other database platforms such as Microsoft SQL Server, Microsoft Analysis Services and the like as Oracle’s BI tools are increasingly being sold to non-Oracle database customers.&#8221;</em></p>
<p>So how have things changed, now it&#8217;s 2011? Well, some things are much the same; OBIEE, if you&#8217;re an Oracle BI developer, is a mandatory skill, and as back in 2009, you tend to specialize in the backend (RPD development, possibly Informatica if you&#8217;re an Oracle BI Applications developer), or the frontend, creating the analyses and dashboards that are most visible to the end users. Take away all of the stuff about WebLogic, Enterprise Manager and Fusion Middleware, and the core of OBIEE hasn&#8217;t changed much since the days of Siebel Analytics, and we typically see the same old problems, misunderstandings and so on with RPD development that we&#8217;ve seen since first transitioning to the technology back in 2005. Expect things to change fairly rapidly in the next couple of years though, with a new Administration tool, possibly a new (or alternative) XML or database-based repository, and a lot of work going on within Oracle to make the whole process of developing and deploying repositories a lot more automated.</p>
<p>One skill that an Oracle BI developer will need, and that wasn&#8217;t such a requirement back in 2009 (even, in my view at the time, becoming a less relevant skill), is application server skills, specifically Oracle WebLogic Server. For the time being at least, if you&#8217;re deploying OBIEE 11g, you&#8217;re deploying WebLogic Server, and having skills in such areas as WebLogic security, WebLogic Scripting Tool, the WebLogic Admin Console, and technologies such as admin and managed servers, node managers and OPMN is pretty much a requirement if you&#8217;re going to be an end-to-end OBIEE 11g developer. You could pretty-much install OBIEE 10g and forget about it, but nowadays you need to have some systems administration skills if only to get the product installed and running.</p>
<p>Another skill I downplayed in 2009 but is increasingly relevant now, is security. OBIEE 10g took care of security and connectivity to LDAP servers from within the Administration tool, but now you need to know Oracle Platform Security Services, application roles and policies, and all the associated technologies around WebLogic&#8217;s implementation of security. In fact, one major skill you need now is the ability to read and digest reams of documentation, made all the worse by OBIEE&#8217;s content being folded in with the rest of the Fusion Middleware product line, making it tricky to pick out how, for example, you can connect OBIEE to third-party LDAP servers, or how to perform upgrades between releases of 11g. It&#8217;s all a lot more complicated now, and you can&#8217;t just charge in, ignore the documentation and not do your homework.</p>
<p>Essbase was something I highlighted back in 2009, and at the time, it seemed fairly imminent that all Essbase projects would use Oracle BI technology, and all Oracle BI projects would include an element of Essbase. Now, i&#8217;m not so sure; Essbase is going gangbusters and if you&#8217;re an Essbase specialist, you can more or less name your price, but for OBIEE projects, we see a bit of Essbase, but it&#8217;s not gone mainstream yet. Realistically, whllst OBIEE 11g solved a number of 10g-era problems with OBIEE/Essbase integration, it&#8217;s just introduced another set of new ones, and I don&#8217;t see many WebAnalysis, Financial Management or Interactive Reporting customers moving to OBIEE unless their application was pretty-much relational in form, in the first place. If you&#8217;ve got Essbase skills, it&#8217;s certainly a bonus, but unless you&#8217;re prepared to get to expert level, you&#8217;ll probably find most Essbase projects are handled by specialist Hyperion consultants, and your job is probably more likely to be raising SRs and working with the client to try and fix the OBIEE to Essbase connectivity issues.</p>
<p>I smile to myself when I look back at the comment on OWB. Certainly, in terms of new projects, OWB is dead now and every customers is moving towards ODI. Maybe it&#8217;s because it&#8217;s all that Oracle will sell on new projects, maybe it&#8217;s because customers don&#8217;t want to invest in products that have been sunsetted, or maybe it&#8217;s because ODI is better, but nowadays, you need to know ODI if you&#8217;re an OBIEE developer. This means knowing things like how to create knowledge modules, how to migrate projects from environment to environment, and how to use new features such as ODI OBIEE data lineage. But if you&#8217;re an OBIEE developer and you&#8217;ve got time to learn one more skill, make it ODI.</p>
<p>And so finally on to the Oracle BI Applications. My experience has been that most BI Applications projects have been handled by the big ERP integrators, occasionally calling on specialists if the OBIEE element goes wrong. Either you&#8217;re an RPD, DAC and Informatica developer, or you&#8217;re an OBIEE, RPD and OWB/ODI developer, and if you&#8217;re the former you&#8217;re probably a contractor or working for a large SI. The major bonus skill that you&#8217;d have as a BI Apps developer is knowledge of either Siebel or Oracle E-Business Suite as a data source, but all of this is going to change in the next couple of years as Oracle transition to the Fusion Applications, with the 11g release of the BI Apps focusing on the Fusion Applications first and then only with support for Apps Unlimited (basically, all the legacy ERP suites Oracle developed or acquired) coming later on. The big question though, at least in my mind, is whether you can still be a BI Apps developer in the future without also being a Fusion Apps developer, and a Fusion Development (ADF, JDeveloper, SOA Suite) developer; the 11g BI Apps will be embedded in the Fusion Apps, and whilst it&#8217;s possible to develop for the 7.9.x release of BI Apps as a standalone piece of technology, I wonder how much you&#8217;ll be able to achieve in isolation from the Fusion Apps.</p>
<p>So, to summarize, and to update my 2009 comments about what skills an Oracle BI developer needs, in 2011 I think you need:</p>
<ul>
<li>OBIEE 11g skills, both in terms of new functionality (mapping, analyses, KPIs and Scorecards etc) and new infrastructure (WebLogic, EM, OPSS etc)</li>
<li>A smattering of Essbase skills, focused mainly on the integration with OBIEE and Essbase (and the many workarounds and gotchas)</li>
<li>Good ODI skills, both in terms of the basics, but also being able to write knowledge modules, integrate with OBIEE, deployment and migration</li>
<li>Solid database skills &#8211; OBIEE gave the illusion through aggregates etc that database tuning was redundant, but time has shown it&#8217;s by far the biggest success factor in a project &#8211; get the database design and optimisation wrong, and your project is toast. You need to know partitioning, materialized views, index types, and increasingly, you need to get yourself on an Exadata project as customers are buying the technology but you can&#8217;t teach it to yourself at home</li>
<li>BI Apps skills, but watch out for everything changing when BI Apps 11g comes out, and be prepared to learn the Fusion Apps and JDeveloper if you want to stay in the game</li>
<li>Looking to the future, keep an eye on technologies such as in-memory (TimesTen), mid-tier caching (Coherence), plus technologies such as Business Activity Monitoring (BAM), &#8220;big data&#8221; (Hadoop, large data sets, NoSQL), complex event processing and maybe products such as Qlikview, just in case Oracle buys them, or at least to know what the competition are up to, or more importantly pitching to your boss</li>
</ul>
<p>The other thing to bear in mind of course, if you&#8217;re an Oracle BI developer, is that you need to have great business, communication and data modeling skills. But that&#8217;s another topic in itself, and maybe one of my colleagues will have some views on that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/what-skills-does-an-oracle-bi-developer-need-in-2011/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Rittman Mead at the UKOUG EPM Conference, July 2011</title>
		<link>http://www.rittmanmead.com/2011/06/rittman-mead-at-the-ukoug-epm-conference-july-2011/</link>
		<comments>http://www.rittmanmead.com/2011/06/rittman-mead-at-the-ukoug-epm-conference-july-2011/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 07:00:07 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8459</guid>
		<description><![CDATA[Over the past few days the UKOUG has been running it&#8217;s UKOUG Conference Series: EPM &#038; Hyperion 2011 event in Weybridge, near London, and Jon Mead and I went along yesterday to take part. Thank you to everyone who came to my session on &#8220;OBIEE 11g for Hyperion Users &#8211; Are We There Yet?&#8221;, and [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few days the UKOUG has been running it&#8217;s <a href="http://hyperion.ukoug.org/">UKOUG Conference Series: EPM &#038; Hyperion 2011</a> event in Weybridge, near London, and Jon Mead and I went along yesterday to take part. Thank you to everyone who came to my session on &#8220;OBIEE 11g for Hyperion Users &#8211; Are We There Yet?&#8221;, and hopefully it was a useful session for any Hyperion or Essbase user looking to adopt the OBIEE 11g platform.</p>
<p>As promised, I&#8217;ve uploaded the slides from the session <a href="http://www.rittmanmead.com/files/rittman_oug_epm_2011.pdf">here</a>, and you can also read the blog post behind the session, <a href="http://www.rittmanmead.com/2011/06/obiee-11g-for-hyperion-users-are-we-there-yet/">here</a>.  I&#8217;ve also uploaded the slides to SlideShare, and you can browse through them here (just refresh the page if the area below is blank):</p>
<p align="center"><iframe src="http://www.slideshare.net/slideshow/embed_code/8317317" width="600"  height="450" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center"></iframe></p>
<p>Keep an eye out on the blog soon for a follow-up posting, where we go into how you can leverage the OBIEE 11g Action Framework to perform write-back to an Essbase cube, and to trigger the execution of an Essbase calc script.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/rittman-mead-at-the-ukoug-epm-conference-july-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Last Two Days for the ODTUG Kscope11 $250 Discount!</title>
		<link>http://www.rittmanmead.com/2011/06/last-two-days-for-the-odtug-kscope11-250-discount/</link>
		<comments>http://www.rittmanmead.com/2011/06/last-two-days-for-the-odtug-kscope11-250-discount/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 14:53:35 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8406</guid>
		<description><![CDATA[Just a quick note to remind any who&#8217;s not yet registered, that the cut-off date for registering for ODTUG KScope&#8217;11 with the $250 discount is June 9th, just two days away. If you&#8217;re planning on coming and want to save as much money as possible, register now whilst the discount still stands. If your interest [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note to remind any who&#8217;s not yet registered, that the <a href="http://odtug.wordpress.com/2011/06/07/the-time-is-now/">cu</a><a href="http://odtug.wordpress.com/2011/06/07/the-time-is-now/">t-off date for registering for ODTUG KScope&#8217;11 with the $250 discount</a> is June 9th, just two days away. If you&#8217;re planning on coming and want to save as much money as possible, <a href="http://www.kscope11.com/registration">register now</a> whilst the discount still stands.</p>
<p>If your interest is with BI &amp; DW topics, there&#8217;s tons of great content at this event. On the Sunday, there&#8217;s a special Oracle-led BI Symposium with content from Adam Bloom (security, and the action framework), Jacques Vigeant (Scorecard &amp; Strategy Management)  and Nicky Sanger (Answers new features), plus a development keynote from Balaji Yelamanchili, Oracle&#8217;s Senior VP in charge of all OBIEE development. If you <a href="http://www.rittmanmead.com/2011/04/rittman-mead-at-collaborate11-orlando-roundup-and-presentations/">read my posting</a> following Balaji&#8217;s presentation on the OBIEE technical roadmap at Collaborate&#8217;11, you&#8217;d certainly want to come to his session. For my part, I&#8217;ll be in there at 9am and there right through to the end, none of these sessions are to be missed.</p>
<p>During the rest of the week, there&#8217;s other great content including <a href="http://www.kscope11.com/component/seminar/seminarslist#Pushing the Envelope with ODIEE (Abstract ID:237747)">the return of the one-and-only David Allen</a>, this time talking about ODI(EE), Mike Durran with a must-see presentation on <a href="http://www.kscope11.com/component/seminar/seminarslist#Scripting the Management of Your Oracle BI System (Abstract ID:247)">OBIEE scripting and internals</a>, Holger Freidrich on <a href="http://www.kscope11.com/component/seminar/seminarslist#BI Server vs. Database: Data Aggregation Where, When, and How? (Abstract ID:271)">BI Server vs. Database aggregation</a>, Kevin McGinley, winner of the US BI Forum Best Speaker prize on <a href="http://www.kscope11.com/component/seminar/seminarslist#Mobility and OBIEE: iPhones, iPads, Android, Oh My!  (Abstract ID:236283)">OBIEE and Mobile BI</a>, plus a couple of sessions by myself and Stewart Bryson. In addition, if you&#8217;re interested in seeing what goes on in the world of Hyperion and Essbase, there&#8217;s a massive conference-within-a-conference going on led by such Essbase luminaries as Edward Roske and Tim Tow, with the combined EPM + OBIEE content area being led by Natalie Delamar.</p>
<p>I&#8217;ll be over in Long Beach from the Friday and then taking part in the conference from Sunday onwards. This is the last major BI event Stateside until Open World, so if you&#8217;re looking to dig deep into the OBIEE 1g platform, make sure you <a href="http://www.kscope11.com/registration">register now</a> before the last discount ends on Thursday!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/last-two-days-for-the-odtug-kscope11-250-discount/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OBIEE 11g for Hyperion Users &#8211; Are We There Yet?</title>
		<link>http://www.rittmanmead.com/2011/06/obiee-11g-for-hyperion-users-are-we-there-yet/</link>
		<comments>http://www.rittmanmead.com/2011/06/obiee-11g-for-hyperion-users-are-we-there-yet/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 16:55:20 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Oracle EPM]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8399</guid>
		<description><![CDATA[In a couple of weeks time it&#8217;s the OUG Conference Series EPM &#38; Hyperion 2011 Conference in the UK (now there&#8217;s a mouthful), and along with such Hyperion luminaries and Oracle ACE Directors as Edward Roske and Eric Helmer, I&#8217;m presenting a session entitled &#8220;OBIEE 11g for Hyperion Customers / Developers &#8211; Are We There [...]]]></description>
			<content:encoded><![CDATA[<p>In a couple of weeks time it&#8217;s the <a href="http://hyperion.ukoug.org/default.asp">OUG Conference Series EPM &amp; Hyperion 2011 Conference</a> in the UK (now there&#8217;s a mouthful), and along with such Hyperion luminaries and Oracle ACE Directors as Edward Roske and Eric Helmer, I&#8217;m presenting a session entitled <a href="http://hyperion.ukoug.org/default.asp?p=8481&amp;dlgact=shwprs&amp;prs_prsid=6191&amp;day_dayid=50">&#8220;OBIEE 11g for Hyperion Customers / Developers &#8211; Are We There Yet?&#8221;</a>. The idea behind this session is to take a look at OBIEE 11g, and see whether it finally provides an integrated BI/EPM platform that users of tools such as SmartView, Financial Reporting, Web Analysis and Interactive Reporting can migrate to. Now I&#8217;ve got an extended 90 minute session to present my thoughts on this, but at a high level, here&#8217;s where I am now.</p>
<p>OBIEE 10g offered a lot of promise for Hyperion customers, in that you could connect Essbase to the Oracle BI Repository and create rich, interactive dashboards and analyses using Essbase data, relational data, or a combination of the two. The BI Server translated the incoming &#8220;logical SQL&#8221; queries from the Presentation Server into MDX queries that Essbase understood, allowing you to create reports, graphs and other visualizations that worked the same way whether your source data came from an Oracle Database, an Essbase cube, or any other sort of supported data source. You could also integrate the OBIEE dashboard with Hyperion Workspace, so that users signed on once through Shared Services and could then log in to OBIEE using the same credentials, inside a unified query environment, <a href="http://www.rittmanmead.com/2009/01/epm-workspace-111-and-obiee-10134-updated/">as detailed in this blog post from 2009</a>.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage1.png" border="0" alt="NewImage" width="502" height="366" /></p>
<p>But this integration came with limitations. The 10g version of OBIEE didn&#8217;t really have a proper OLAP-style query tool, such that when you drilled-down from one hierarchy level to another, it kept adding columns to the report and placing filters on the column you&#8217;ve drilled on, and there was no proper hierarchical selection tool, meaning that Essbase users moving from tools such as SmartView or WebAnalysis found OBIEE 10g to be a very &#8220;relational&#8221; query environment. In addition, only level-based hierarchies were supported within the Oracle BI Repository, and whilst OBIEE did a good job in &#8220;unraveling&#8221; the parent-child hierarchies in Essbase into corresponding level-based hierarchy when you imported an Essbase outline into the repository, changes to the hierarchy &#8211; particularly adding new levels or generations into the Essbase hierarchy &#8211; usually meant that you had to re-import the whole Essbase cube back into the repository, losing any integration work that you&#8217;d done beforehand.</p>
<p>So OBIEE 11g offered a bunch of improvements that were particularly aimed at Essbase, and other OLAP server, customers; the new <em>hierarchical columns</em> feature brought proper OLAP analysis to OBIEE, and coupled with OLAP-oriented features such as <em>hierarchical prompts</em> and <em>selection steps</em>, made OBIEE 11g a much more conducive environment for Essbase users.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage2.png" border="0" alt="NewImage" width="600" height="348" /></p>
<p>There&#8217;s much better support for Essbase-native features such as value-based hierarchies, alternate hierarchies, multiple alias tables, UDAs and other Essbase artifacts, and the value-based hierarchy feature in particular is very welcome as it can avoid the need to completely re-import your Essbase database if your outline gains additional hierarchy levels.</p>
<p>So coupled with the new and improved visualization capabilities in OBIEE 11g, including maps, scorecards, improved dashboard controls, the whole new UI, improved BI Publisher and so on, there&#8217;s a lot to recommend OBIEE 11g to users of the &#8220;legacy&#8221; Hyperion tools looking for a bit of a refresh of their BI environment.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage3.png" border="0" alt="NewImage" width="600" height="360" /></p>
<p>Some of the new capabilities in OBIEE 11g, such as the <em>action framework</em>, may not immediately obvious to Hyperion users as useful to them, but they actually bring the ability to create additional integration between the platforms. One thing that&#8217;s still lacking, for example, is the ability to write-back from the dashboard to Essbase (you can write back to relational sources, but not Essbase, yet), and you can also use it to call actions that, for example, run a calc script or perform an allocation routine. If you take a look at the new 11.1.1.5 version of the SampleApp (due out in a couple of weeks), there&#8217;s some working examples &#8220;from the field&#8221; that perform this function, and there&#8217;s <a href="http://www.rittmanmead.com/2010/09/oracle-bi-ee-11g-integration-with-epm-11-1-2-hfr-action-framework/">a posting on our blog</a> from last year that show how you can use the Action Framework, and the Credential Store within Oracle Fusion Middleware, to provide integration between the OBIEE toolset and the Hyperion toolset.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage5.png" border="0" alt="NewImage" width="600" height="276" /></p>
<p>As you&#8217;ll also be on the OBIEE platform, Oracle&#8217;s &#8220;strategic&#8221; BI direction, you&#8217;ll also be able to take advantage of features such as Oracle Enterprise Manager, Oracle Platform Security Services, and all the other middleware features that come with 11g. And you&#8217;ll be able to also integrate with the Oracle Business Intelligence Applications, giving you the ability to reach through to an integrated data warehouse sourcing data from Oracle E-Business Suite, SAP, Siebel and Peoplesoft.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage11.png" border="0" alt="NewImage" width="600" height="247" /></p>
<p>But with every new feature, you&#8217;re going to expect to hit some new issues. Some things haven&#8217;t changed in this release compared to 10g; if you do need to make changes to the Essbase database metadata in your Oracle BI Repository and you can&#8217;t get around it by switching to value-based hierarchies, you still need to re-import the whole outline as there&#8217;s no &#8220;sync&#8221; or &#8220;incremental import&#8221; feature in OBIEE 11g. The Oracle BI Server still function-ships very few OBIEE functions down to MDX functions, so you&#8217;ll either have to have the BI Server perform analytic-style functions for you, or you&#8217;ll need to use the EVALUATE function to pass them down yourself. And we&#8217;ve actually lost the integration between Hyperion Workspace and the OBIEE dashboard, so if you want both OBIEE and the Hyperion tools to use the same directory, you&#8217;ll need to connect them both to an external LDAP server, and use some other SSO solution over both products rather than the &#8220;point-to-point&#8221; solution that worked with OBIEE 10g.</p>
<p>Some new features, such as value-based hierarchies, come with one or more &#8220;gotchas&#8221; that may well catch you out by causing one problem when you&#8217;ve just fixed another. If, for example, you&#8217;ve moved your Essbase hierarchies in the Oracle BI Repository physical layer to value-based ones, your users benefit from more efficient searches across the hierarchy and you won&#8217;t need to re-import the outline if you add a new level or generation. But where you&#8217;ll come unstuck now is if you&#8217;re planning on setting up drill-to-detail reports, where Essbase provides the aggregated data but the detail comes from a relational database, such as Oracle. In this case, you&#8217;ll find it hard to set up the &#8220;vertical federation&#8221; that&#8217;s required as there are no &#8220;levels&#8221; to designate the granularity of the Essbase and relational sources. There are a number of workarounds (we covered two approaches, <a href="http://www.rittmanmead.com/2010/10/oracle-bi-ee-11g-vertical-fragmentation-on-parent-child-hierarchies-drills-from-essbase-to-oracle-database/">here</a> and <a href="http://www.rittmanmead.com/2010/10/oracle-bi-ee-11g-navigation-passing-parameters-using-hierarchical-columns/">here</a>, towards the end of 2010), but neither of them are pretty and you&#8217;ll have a &#8220;facepalm&#8221;-type moment when you realise this limitation of value-based hierarchies.</p>
<p>Other, possibly more serious issue, is around the way that OBIEE generates the logical SQL, and physical MDX, for pivot-table style queries involving hierarchical columns. Take for example the following simple pivot-table report with a single product hierarchy and revenue measure, where the user has drilled-down into the data to produce some totals and sub-totals.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage6.png" border="0" alt="NewImage" width="426" height="290" /></p>
<p>Now if this analysis was being generated against a relational source, the BI Server would generate three or four logical SQL requests for each measure &#8220;grouping&#8221;, which in turn would normally be pushed-down into a single SQL statement that used sub-query factoring (the WITH clause). Again, not pretty, but databases such as Oracle 10gR2 onwards can handle this pretty well.</p>
<p>Where it gets tricky though is when you&#8217;ve got an equivalent Essbase source under the covers. In this case, these logical SQLs all get translated into one or more physical MDX statements, each one of which is returning the aggregated values for these sets of grouped measures. If we were using an &#8220;MDX-native&#8221; tool such as SmartView or WebAnalysis, we&#8217;d only need the one MDX query, but in this case our query has generated five of them.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage7.png" border="0" alt="NewImage" width="600" height="223" /></p>
<p>Now where it gets really interesting is if we add a second, or third hierarchical column to the report, and in particular, when we pivot the dimensions around so that one of them runs along the columns, rather than just the rows, of the pivot table, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage8.png" border="0" alt="NewImage" width="600" height="201" /></p>
<p>In this case, what would appear to be a simple pivot table query with a couple of dimensions drilled-in to asymmetrically, ends up generating around fifty-eight separate MDX queries, each of which is relatively simple, but multiply that by a number of concurrent users, and you&#8217;ve got a seriously big load on your Essbase server.</p>
<p>Now in practice, there are workarounds, and the new subquery-caching feature in OBIEE 11g means that these MDX sub-queries are often retrieved from cache rather than sent on a round-trip to the Essbase server. You can also limit the effect by keeping all of the dimensions on the rows, rather than rows and columns, of your pivot table, and in practice most Essbase systems aren&#8217;t all that heavily loaded, so you may well get away with it &#8211; but it&#8217;s something to bear in mind.</p>
<p>Another new feature that can also add to this problem is <em>selection steps</em>. Selection steps are very interesting to Essbase customers as they allow you to build up queries that use just certain members from the dimension, combine them together, use them to filter data and do other &#8220;OLAP&#8221;-style filtering and selections. To take the example below, we&#8217;ve used the Sample.Basic cube to initially return the grand total figure, then used selection steps to keep just the Q1 and Q2 figures, add a calculated member for H1, then do something simular for the regions.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage9.png" border="0" alt="NewImage" width="600" height="242" /></p>
<p>All good so far, and light-years ahead of what we could do with OBIEE 10g. The problem comes though with the way that the selection step sub-queries are translated from the logical SQL that the BI Server uses down to the physical MDX queries that Essbase uses. From the <a href="http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-2/">tests that Venkat has carried out</a>, the number of logical SQLs that selection steps generates comes to the product of all the individual selection steps, so if you have three dimensions that contain 2, 3 and 3 selection steps each, you&#8217;re going to end up with 2 x 3 x 3 = 12 logical SQLs, each one of which translates into 1 or 2 physical MDX queries. Once you add in the usual grand total at the top that brings back the entire cube, and any hierarchical column drills you might add in, you can see how you might end up with a very large number of MDX statements being sent to the Essbase server for what appears to be a very straightforward report.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage10.png" border="0" alt="NewImage" width="600" height="217" /></p>
<p>Now in practice you tend to have workarounds for these issues; we tend to suggest keeping the number of hierarchical columns to a minimum in an analysis, and when you do use them, limit how far down you drill into them. If you use selection steps, try and keep them to one or two per dimension maximum, and overall, size your system to expect large numbers of relatively simple MDX statements.</p>
<p>Another aspect to consider is where your users current make use of the Excel Add-in, or SmartView, to do their analysis. Typically, they&#8217;ll use Excel and the &#8220;query-by-example&#8221; feature of the Excel Add-in to write-in the names of the dimension members they want in the X and Y axis, and then do a retrieval based on the selected members. Using this approach, end-users can create pretty complex analyses where there&#8217;s very little limitation on the combination of dimension members they use (selecting budget profit for this year, alongside the same figure for last year, together with actual inventory and forecast margin, for example). Creating analyses using these sorts of member selections is certainly possible using OBIEE 11g, but you&#8217;ll need to learn a new set of skills to do it properly.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/NewImage12.png" border="0" alt="NewImage" width="600" height="167" /></p>
<p>For example, if you want to create a dynamic time-series reference such as the value of a measure as at this time last year, or over the past three months, or year-to-date, you can use one of the OBIEE time-series functions (AGO, PERIODROLLING, TODATE) to provide an offset value for a measure.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-30.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-30.png" border="0" alt="Sshot 30" width="445" height="167" /></p>
<p>Similarly, OBIEE 11g now by default creates a single measure within your logical fact table which is then dimensioned by the measure (accounts) and scenario dimension, if present. If you want to display on the screen your &#8220;budget profit&#8221; figure using this approach, you can use the FILTER function in OBIEE to filter the measure by these two dimension member names, an approach you can use to display any arbitrary measure and scenario combination in an analysis.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-31.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-31.png" border="0" alt="Sshot 31" width="600" height="244" /></p>
<p>Another technique that&#8217;s useful is being able to make use of native MDX function names through EVALUATE and EVALUATE_AGGR. As I mentioned earlier, one limitation with this current release is that very few OBIEE functions are function-shipped down to MDX, but if there&#8217;s an MDX function you want to use, you can easily access it through EVALUATE (for scalar functions, such as TOPCOUNT) or EVALUATE_AGGR (for functions that return an aggregated value, such as STDDEV).</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-29.png" src="http://www.rittmanmead.com/wp-content/uploads/2011/06/sshot-29.png" border="0" alt="Sshot 29" width="557" height="114" /></p>
<p>So there&#8217;s two things to take away from this last point; firstly, don&#8217;t think of OBIEE 11g as a like-for-like replacement for Excel and the Excel-Addin, think of it instead as a complementary tool that covers, say, 60% of its functionality but then provides a whole raft of features that Excel alone can&#8217;t provide. Also, be prepared to roll your sleeves up and learn how OBIEE analyses are created, and expect your non-trivial reports to require a bit of Essbase knowledge an understanding of the more exotic features of Answers and OBIEE.</p>
<p>There&#8217;s more to the story that I&#8217;ll go into in the session, including what&#8217;s now possible for Hyperion Planning and Hyperion Financial Management users, and I&#8217;ll also run through some detail on how the actions integration works between the OBIEE dashboard and Essbase writeback and calc scripts, and I&#8217;ll also go into more detail on how you set up vertical and horizonal federation between Essbase and relational sources, and why you might want to use the new LOOKUP function to do some of this instead. So without jumping the gun too much, it&#8217;s a bit of a &#8220;qualified Yes&#8221;, but I&#8217;ll go into more detail on the day.</p>
<p>My session at the <a href="http://hyperion.ukoug.org/">OUG Conference Series EPM &amp; Hyperion 2011</a> is at 9.40am &#8211; 11.10am on Day 2 (15th June 2011), and full details on the event, including how UKOUG members can get in free, are on the event website. I&#8217;ll also post the slides on our <a href="http://www.rittmanmead.com/articles/">Articles</a> page once the event is over. Hopefully I&#8217;ll see you there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/06/obiee-11g-for-hyperion-users-are-we-there-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle BI EE 11g &#8211; Decoding Essbase Connectivity &#8211; Part 5 &#8211; Security</title>
		<link>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-5-security/</link>
		<comments>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-5-security/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 11:18:52 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8072</guid>
		<description><![CDATA[I was actually compiling all my findings of the last 4 posts as a summary post but then realized i haven&#8217;t actually covered another important part of the Essbase Connectivity i.e. Essbase Security. In today&#8217;s post let&#8217;s look at how Essbase Security is handled in BI EE 11g. I will follow this one with the [...]]]></description>
			<content:encoded><![CDATA[<p>I was actually compiling all my findings of the last 4 posts as a summary post but then realized i haven&#8217;t actually covered another important part of the Essbase Connectivity i.e. Essbase Security. In today&#8217;s post let&#8217;s look at how Essbase Security is handled in BI EE 11g. I will follow this one with the summary posting. Essbase provides 2 types of data level security. They are</p>
<p>1. Data Level Filters</p>
<p>2. Meta Read Filters</p>
<p>Data Level filters hide the data values of the members. But the members themselves are visible. On the other hand Meta Read Filters provide data and member level security.</p>
<p><strong>Data Level Filters:</strong></p>
<p>To test this we start off with creating a user in shared services called as <strong>secuser</strong>. This user is provisioned to access the Demo &gt; Basic cube. Also, a filter is created to provide access only to the IDescendants of the <strong>West</strong> Market member.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage123.png" border="0" alt="NewImage" width="505" height="286" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage124.png" border="0" alt="NewImage" width="490" height="241" /></p>
<p><del>I believe there is a bug in the Admin Console UI of Essbase 11.1.2</del>. <del>It does not allow the admin user to assign filters to other users</del>. <em>Thanks to Glenn, just realized that the filter assignments have moved over to SS</em>. So, lets assign the created filter to the user through MaxL instead.</p>
<p><strong>grant filter &#8216;Demo&#8217;.'Basic&#8217;,'MarkFilt&#8217; to user secuser;</strong></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage125.png" border="0" alt="NewImage" width="387" height="317" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage126.png" border="0" alt="NewImage" width="380" height="404" /></p>
<p>Let&#8217;s now update the connection pool settings of the repository to connect to Essbase using the above created user.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage128.png" border="0" alt="NewImage" width="466" height="319" /></p>
<p>Let&#8217;s now create a report containing the hierarchical Market column and a measure as shown below.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage129.png" border="0" alt="NewImage" width="309" height="336" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage130.png" border="0" alt="NewImage" width="479" height="300" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage131.png" border="0" alt="NewImage" width="474" height="333" /></p>
<p>This works as expected. Typically EAS will generate #No Access values for all the cells for which the user does not have access.</p>
<p><strong>Meta Read Filters:</strong></p>
<p>Now that we have tested the data level filters, lets test the metaread filters. To test this, let&#8217;s create one more user called <strong>metareaduser</strong> who will have access to all members under the West member of the Market dimension. Very similar to the data level filter use case above but this one will provide dimension member level filtering capability.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage132.png" border="0" alt="NewImage" width="486" height="192" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage133.png" border="0" alt="NewImage" width="484" height="261" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage134.png" border="0" alt="NewImage" width="385" height="320" /></p>
<p>Let&#8217;s now update the connection pool of the RPD with the new user and then test whether the above security works.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage135.png" border="0" alt="NewImage" width="457" height="320" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage136.png" border="0" alt="NewImage" width="300" height="243" /></p>
<p>Again this works as expected. Let&#8217;s now find out what happens during the drill if we assign a metaread filter to the lowermost level i.e. on the <strong>Seattle</strong> member instead of <strong>West</strong>.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage137.png" border="0" alt="NewImage" width="455" height="170" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage138.png" border="0" alt="NewImage" width="282" height="270" /></p>
<p>This is very good. As you see whenever we assign a metaread filter to the lowermost level, we still see the branch from root leading up to that member (with data level security applied). That way we can have security applied at any level in a hierarchy and we still will have a seamless drill experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-5-security/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Oracle BI EE 11g &#8211; Decoding Essbase Connectivity &#8211; Part 4 &#8211; Logical SQL Generation</title>
		<link>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-4-logical-sql-generation/</link>
		<comments>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-4-logical-sql-generation/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 10:59:44 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8041</guid>
		<description><![CDATA[In the last 3 posts we saw how BI EE generates the MDX and what major factors influence the MDX generated. As a recap, there are 4 main things that we noticed. 1. BI EE generates the most optimal MDX as long as we have all the attribute or Hierarchical columns in the Row-Edge of [...]]]></description>
			<content:encoded><![CDATA[<p>In the last 3 posts we saw how BI EE generates the MDX and what major factors influence the MDX generated. As a recap, there are 4 main things that we noticed.</p>
<p>1. BI EE generates the most optimal MDX as long as we have all the attribute or Hierarchical columns in the Row-Edge of a Pivot.</p>
<p>2. While using Selection Steps, the number of MDX generated can increase proportional to N^M where N is the number of dimensions and M is the average number of selection steps in each dimension.</p>
<p>3. While moving hierarchical columns to the Pivot Column edge and while drilling on the column edge, the number of MDX generated can increase quite a lot</p>
<p>4. Every MDX generated will have a corresponding Sub-Logical SQL combined to the main Logical SQL through UNION ALL</p>
<p>The last point above is very important as the performance of a given BI EE report going against Essbase is determined by that. We start off with decoding how and why BI EE generates so many Sub-Logical SQLs (for the same Case 2 we discussed in the last post)</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage100.png" border="0" alt="NewImage" width="248" height="85" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage101.png" border="0" alt="NewImage" width="495" height="294" /></p>
<p>This generates a single Logical SQL with only one Sub-Logical SQL. Now let&#8217;s move the Market Dimension to the Column Edge of the Pivot and then look at the SQL generated.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage102.png" border="0" alt="NewImage" width="204" height="144" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage103.png" border="0" alt="NewImage" width="448" height="600" /></p>
<p>Interestingly this generates a logical SQL with 3 Sub-Logical SQLs. Let&#8217;s look at the Logical SQL&#8217;s closely. In the first Logical SQL above, we had a statement like this</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage104.png" border="0" alt="NewImage" width="492" height="64" /></p>
<p>But after we moved one of the columns to the column edge, we notice 3 logical SQLs with the following filters</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage105.png" border="0" alt="NewImage" width="492" height="122" /></p>
<p>As you see, the Pivot Operation introduces more SQLs. Let&#8217;s try to understand why this is needed. So, to make it simple we apply a selection step on both the dimensions to basically start with predefined members as shown below.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage106.png" border="0" alt="NewImage" width="272" height="242" /></p>
<p>This will also produce 3 Sub-Logical SQLs (as we are applying only one selection step per dimension i.e. 1^1 = 1 &#8211; no extra logical SQL because of selection Step). If we now look at each Sub-Logical SQL you can notice the following</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage108.png" border="0" alt="NewImage" width="386" height="159" /></p>
<p>&nbsp;</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage107.png" border="0" alt="NewImage" width="471" height="312" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage109.png" border="0" alt="NewImage" width="495" height="353" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage110.png" border="0" alt="NewImage" width="485" height="485" /></p>
<p>The last SQL alone would have been sufficient to generate our report. But BI EE generates 2 additional Logical SQLs which are not necessary, atleast for this report. Why does BI EE generate these 2 additional queries. The 2 additional queries look like total queries on the row-edge and column-edge. Maybe these are for the totals. To validate this, let&#8217;s try adding a row-wise and column-wise total in the pivot report.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage111.png" border="0" alt="NewImage" width="482" height="170" /></p>
<p>The total numbers exactly match with the numbers that we got from the first 2 logical SQLs shown above. But again, if we look at the logical SQL, there will be a total of 6 Sub-Logical SQLs. The 3 additional ones are shown below (for the totals)</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage112.png" border="0" alt="NewImage" width="486" height="303" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage113.png" border="0" alt="NewImage" width="485" height="329" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage114.png" border="0" alt="NewImage" width="483" height="458" /></p>
<p>One interesting thing to note here is, each total fires a separate query which is a new feature in BI EE 11g for making sure that the totals generated are correct and as expected. But still we are getting new queries generated for totals. And We haven&#8217;t accounted still for the need of the first 2 sub-logical sqls. Let&#8217;s investigate further by removing the sub-totals and then drilling down on the East member. You will notice 5 sub-logical SQLs fired to generate this query.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage115.png" border="0" alt="NewImage" width="494" height="137" /></p>
<p>Rather than taking each and every sub-logical sql, let&#8217;s take the actual logical sql and fire it.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage116.png" border="0" alt="NewImage" width="479" height="433" /></p>
<p>As you notice, the Queries 4 and 5 are the only ones needed for generating the actual report. But the first 3 queries seem to be doing something in addition to what was actually asked for in the report. If you notice closely, the first 3 queries seem to have an integer which controls the sort order. Now, is it possible that these three additional queries are there just to enable the outline sort order.  To test this, lets move the Market dimension back to the Row-edge with the East member exploded to its children as shown below</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage117.png" border="0" alt="NewImage" width="234" height="414" /></p>
<p>Let&#8217;s now take the complete Logical SQL and fire that against the BI Server.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage118.png" border="0" alt="NewImage" width="478" height="376" /></p>
<p>Very interesting. We now have the SORTKEY pushed into the grain of the query itself. So, what essentially is happening is, if we have the hierarchical columns in the row-edge, there is no-need for BI EE to fire another logical sql to get the sort order as that can be obtained as part of the query grain itself. But in the case of hierarchical columns on the column edge and row-edge, there will be additional queries fired. Now to find out how many such queries will get fired, lets move all the columns to the column edge as shown below.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage119.png" border="0" alt="NewImage" width="474" height="73" /></p>
<p>If we now look at the Logical SQL, there will be only one that too with the SortKey pushed to the grain of the query itself as shown below.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage120.png" border="0" alt="NewImage" width="476" height="271" /></p>
<p>So, only when we have hierarchical columns in both the row-edge and the column edge, we have separate queries fired to extract the sort order. So, given below is a matrix that shows the number of additional Sub-Logical SQLs</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage121.png" border="0" alt="NewImage" width="485" height="385" /></p>
<p>In the next &amp; the last post of this series, i will summarise the findings so far and perhaps try to come out with a set of high-level pointers that should hopefully help people trying to implement BI EE 11g on Essbase.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-4-logical-sql-generation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle BI EE 11g &#8211; Decoding Essbase Connectivity &#8211; Part 3</title>
		<link>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-3/</link>
		<comments>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-3/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 14:48:20 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=8004</guid>
		<description><![CDATA[Continuing along with our Essbase series, today lets look at how the various Pivoting operations that are done at the BI EE layer affect the MDX generated. We noticed that whenever we brought in an attribute column from the row-edge to the column edge, the MDX generated by BI EE had become completely in-efficient. Let&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing along with our Essbase series, today lets look at how the various Pivoting operations that are done at the BI EE layer affect the MDX generated. We noticed that whenever we brought in an attribute column from the row-edge to the column edge, the MDX generated by BI EE had become completely in-efficient. Let&#8217;s analyze that more in detail today. We start off with first creating a new report containing 2 attribute columns (we are still in Case 2) as shown below</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage82.png" border="0" alt="NewImage" width="403" height="161" /></p>
<p>Basically this is a pivot report where one of the attribute columns (Accounts dimension Generation 3) has been moved to the column edge. Let&#8217;s start with looking at the MDX generated.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage83.png" border="0" alt="NewImage" width="455" height="464" /></p>
<p>Interestingly, this is a very efficient MDX and this is what other tools would generate as well. Now, why did we see a completely different MDX in the last blog post. To understand that let&#8217;s try to bring a new hierarchical column (with Unbalanced Hierarchy) Market. And drill to the second generation and then look at the MDX generated.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage88.png" border="0" alt="NewImage" width="453" height="343" /></p>
<p>Interestingly there are 3 MDX that are generated. They are given below</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage85.png" border="0" alt="NewImage" width="455" height="464" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage86.png" border="0" alt="NewImage" width="463" height="513" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage87.png" border="0" alt="NewImage" width="495" height="493" /></p>
<p>We can clearly see that the last 2 queries are very efficient and are actually needed to produce the right results. But what i am not sure of is the need for the first MDX query. To understand why there are 3 MDX queries, lets take a look at the Logical SQL.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage89.png" border="0" alt="NewImage" width="458" height="558" /></p>
<p>If you notice, there are 2 UNION ALL clauses combining 3 separate Logical SQLs. The first logical SQL and the second one are different only in the filters (i.e a check where the hierarchical column is not null). Lets take each one of these Logical SQLs and fire them separately.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage92.png" border="0" alt="NewImage" width="489" height="347" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage93.png" border="0" alt="NewImage" width="478" height="342" /></p>
<p>As you see there is no difference at all between these 2 queries apart from the <strong>Market</strong> member appearing in the 2nd query. Somehow first query seems to be an unwanted query as the 2nd one more or less achieves the same result. Not sure whether this can be classified as a bug but this definitely will add increased overhead on Essbase Servers to fire an extra query. Let&#8217;s now start making the pivot report a bit more complex. First let&#8217;s move the Market dimension from the Row edge to the column edge above the Accounts. Then lets add the Product Value hierarchy in the row edge.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage94.png" border="0" alt="NewImage" width="498" height="141" /></p>
<p>A very simple report. This generates in total 6 Logical SQLs combined through UNION ALL. Out of this 6, 4 are expected as seen in the first part (if both the hierarchical columns are in the row-edge we will get only 4 Logical SQLs and in turn 4 MDX). The 4 logical sqls are represented below</p>
<p>a. Generation 1 of Product with Generation 1 of Market<br /> b. Generation 1 of Product with Generation 2 of Market<br /> c. Generation 2 of Product with Generation 1 of Market<br /> d. Generation 2 of Product with Generation 2 of Market</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage95.png" border="0" alt="NewImage" width="600" height="205" /></p>
<p>In addition to these 4, the above pivot table generates 2 extra Logical SQLs which to me is somewhat un-necessary. Let&#8217;s look at the corresponding MDX statements of the additional Logical SQLs</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage96.png" border="0" alt="NewImage" width="510" height="567" /></p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage97.png" border="0" alt="NewImage" width="512" height="565" /></p>
<p>The above 2 MDXs produce results for the same cells already covered by the other 4 MDX statements. This is totally un-necessary and this happens when we include a Value-Based hierarchy. Let&#8217;s see what happens when we include 2 level based hierarchies instead of value based ones.</p>
<p style="text-align: center"><img style="margin-left: auto;margin-right: auto" src="http://www.rittmanmead.com/wp-content/uploads/2011/04/NewImage98.png" border="0" alt="NewImage" width="494" height="132" /></p>
<p>Again another massive Logical SQL with 8 sub-logical SQLs this time, each producing its own MDX. There are a couple of things that we can infer from this.</p>
<p>1. BI EE 11g MDX generation is basically an extension of BI EE 10g MDX generation when broken down into individual sub-logical SQLs.</p>
<p>2. The BI Server itself hasn&#8217;t changed much apart from some additional functions. The core that has changed is the presentation service which translates every interaction into a corresponding logical SQL(each combined through UNION ALLs).</p>
<p>3. The biggest change when it comes to BI EE 11g is the dynamic logical SQL for every drill. The more you drill bigger will be the logical SQL and in turn larger will be the number of MDX fired. There is pure mathematics into this and in the next post let&#8217;s look at how we can arrive at the number of Logical SQLs generated by a report and also the potential number of MDX generated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/04/oracle-bi-ee-11g-decoding-essbase-connectivity-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

