<?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</title>
	<atom:link href="http://www.rittmanmead.com/category/hyperion/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>Oracle BI EE 11g &#8211; Hyperion Financial Management Analytics (HFM Analytics)</title>
		<link>http://www.rittmanmead.com/2011/10/oracle-bi-ee-11g-hyperion-financial-management-analytics-hfm-analytics/</link>
		<comments>http://www.rittmanmead.com/2011/10/oracle-bi-ee-11g-hyperion-financial-management-analytics-hfm-analytics/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 09:24:21 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Oracle BI Apps]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=9006</guid>
		<description><![CDATA[If you had watched the announcements in Open World this year, one of the products that got silently released was HFM Analytics. Basically this is an Analytics Suite under the umbrella of BI Applications but without any ETL. This suite provides comprehensive set of pre-built reports/dashboards for customers who have Hyperion Financial Management (and Close [...]]]></description>
			<content:encoded><![CDATA[<p>If you had watched the announcements in Open World this year, one of the products that got silently released was <a href="http://blogs.oracle.com/emeapartnerbiepm/entry/financial_management_analytics_for_hyperion">HFM Analytics</a>. Basically this is an Analytics Suite under the umbrella of BI Applications but without any ETL. This suite provides comprehensive set of pre-built reports/dashboards for customers who have Hyperion Financial Management (and Close Management) and Oracle Business Intelligence 11g. This is a very interesting analytics application in many ways.</p>
<p>1. This does not have a ETL layer &#8211; Basically this is the second time i am seeing a BI Apps suite without a ETL layer (last time being the <a href="http://oraclebizint.wordpress.com/2008/06/23/oracle-bi-ee-1013332-cpm-analytics-and-epf-handling-ragged-hierarchies-in-relational-data-sources-action-links/">CPM Analytics</a> which is no more available). So the reports/dashboards directly go against HFM &amp; Close Management. Interestingly there is also a Single Sign-on support. So essentially we can start using this as an alternative to Hyperion Financial Reporting (functionality is still behind when compared with HFR &#8211; but at least to some extent wherever possible) that has been the standard &amp; only reporting tool available so far on HFM.</p>
<p>2. This has support not only for data but also for HFM Process Management. Essentially we can not only report on the data but to an extent on the process management. This has been the sore point in HFM considering there are no built in tools outside of HFR that can leverage this (but of course there is always the API). Even ODI or HyperionDIM(based on Informatica) cannot extract Process Management related details out of HFM. So, we always had to rely on external adapters or direct API calls to do this. That is not the case anymore.</p>
<p>3. This has support for the newly released Close Management suite. Considering the fact that HFM &amp; Close Management go together, it makes sense to have these 2 together supported out of the box.</p>
<p>4. The entire integration is based on the connector that i had blogged about earlier <a href="http://www.rittmanmead.com/2011/06/oracle-bi-ee-11g-reporting-on-hyperion-financial-management-hfm-part-1/">here</a>. So, no extra configuration/setup (in terms of binaries &#8211; though there is a install process which just sets up the reports/dashboards) is required for this to work.</p>
<p>The architecture of this suite is given below</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9007" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.40.31.png" alt="" width="466" height="294" /></p>
<p>As mentioned in the earlier linked post, this suite uses the ADM driver to connect and extract data out of HFM. So, there are 2 things to keep in mind</p>
<p>1. This suite requires you to be 11.1.2.1.102 version of EPM(earlier releases are supported though &#8211; 9.3.3 and 11.1.1.3) &#8211; That is you need to apply one more patch on the HFM side to basically add a new feature to the HFM driver (for process management).</p>
<p>2. You need to be on BI EE 11.1.1.5.1 MLR patch set for this to work without any issues. More than the above EPM certification, 11.1.1.5.1 patch is very critical for the connectivity to work. But interestingly this MLR patch is not recommended for all customers. I am not sure why it is this way but looking at the Readme of this patch, it looks like 11.1.1.5.1 patch is meant only for customers who require HFM connectivity and Fusion integration. But for other customers who don&#8217;t need this, the patch recommends not to upgrade at all which is interesting as you would expect any latest patch set to be valid for all customer environments.</p>
<p>Once you have both the above, download the HFM Analytics suite from Edelivery. The install itself is straight forward.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9008" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.42.35.png" alt="" width="463" height="358" /></p>
<p style="text-align: left">Ensure that you are using a Custom install. Looks like there is a bug in the installer. If you do a full install, the installer does not seem to install the web catalog.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9009" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.44.41.png" alt="" width="465" height="355" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9010" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.45.35.png" alt="" width="472" height="357" /></p>
<p style="text-align: left">The installer basically installs a RPD, Web Catalog and a configuration utility. One of the advantages of using HFM is, we will always have a constant set of dimensions (8 system dimensions + 4 custom dimensions). So, oracle has basically fixed the RPD but the web catalog structure will vary based on the number of custom dimensions used. That is where the configuration utility comes into play. The default password of the repository is welcome1. Let&#8217;s open this RPD and take a look at the contents</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9011" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.47.22.png" alt="" width="236" height="393" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9012" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.46.53.png" alt="" width="218" height="408" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9013" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.46.45.png" alt="" width="226" height="392" /></p>
<p style="text-align: left">Basically FCM is modelled using the relational metadata directly. But the HFM one uses the ADM Driver. To complete the configuration, we need to run the configuration utility which gets installed along with the software.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9014" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.49.33.png" alt="" width="466" height="327" /></p>
<p style="text-align: left">We start with specifying the connection details of both the BI instance and HFM instance. In addition we need to provide the RPD and Web Catalog location details that comes along with the software. Interestingly the configuration utility injects new content into the web catalog dynamically based on our selection. We start with selecting the Entity values that we are interested in for reporting.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9016" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.50.271.png" alt="" width="477" height="338" /></p>
<p style="text-align: left">Then we need to provide the following account grouping details</p>
<p>1. Balance Sheet Accounts</p>
<p>2. P &amp; L Accounts</p>
<p>3. Cash Flow Accounts</p>
<p>4. Performance Indicator Accounts</p>
<p>Actually there are more groupings but at a high level the above are the basic classifications required.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9017" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.52.46.png" alt="" width="475" height="335" /></p>
<p style="text-align: left">If we have any Custom dimensions configured then those values need to be configured as well. Basically the values chosen for custom dimensions (along with default values) will be used for the web catalog prompts and filters. Initially it might be a bit confusing but once we have web catalog, it sort of makes sense how the grouping actually works.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9018" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.53.32.png" alt="" width="481" height="308" /></p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-9019" src="http://www.rittmanmead.com/wp-content/uploads/2011/10/Screen-Shot-2011-10-19-at-14.53.41.png" alt="" width="479" height="284" /></p>
<p style="text-align: left"><strong>Issues</strong>:</p>
<p>Though it works and does give a high level complete picture of the HFM financials, there still are certain grey areas in this suite (atleast for me). I will list them below. If anyone has any other insights in this, i will be interested in hearing them.</p>
<p>1. License &#8211; This is one area of the product that i am not able to understand. Based on what i heard in Open World, this requires an extra license. But again if you look at the underpinnings of how this works, there is nothing that stops a customer to build the same set of reports and dashboards with just a HFM and BI EE 11g license. In fact, to make this work (on my demo data sets), i myself had to understand the reports and make the requisite changes to the filters. So, anyone can build the same set of reports and dashboards all by themselves without having to license this(i.e. just use the BI EE 11g-HFM connector). Or i am hoping i am just wrong in this case.</p>
<p>2. Journal Entries &#8211; As far as i see ADM driver is pretty limited in its functionality. There is no way to just create a report with just the journal entries. For that we still have to rely on Hyperion Financial Reports.</p>
<p>3. Active/Inactive Entities &#8211; IC Transactions etc &#8211; Same comment as above. The connectivity does not support reporting for Active/Inactive entities of a period, or for just creating a report containing just the Inter Company transactions etc.</p>
<p>5. Custom Dimension names &#8211; Somehow the connector is sort of hard-coded to use Custom1, Custom2 etc dimension names. If we had used a different name in the Aliases field then the connector throws an error. This looks more to be a bug in the connector. So, if you have a custom named dimensions then revert them to Custom1, Custom2 etc until this is fixed.</p>
<p>6. BI EE 11.1.1.5 &#8211; If you are using this without the MLR patch, the reports will work. But none of the custom attribute columns will work. I guess that is due to the ADM client driver that is bundled as part of the BI EE 11.1.1.5. But hopefully once you upgrade this issue should go away.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2011/10/oracle-bi-ee-11g-hyperion-financial-management-analytics-hfm-analytics/feed/</wfw:commentRss>
		<slash:comments>5</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>Oracle BI EE 11g &#8211; Integration with EPM 11.1.2 &#8211; HFR &amp; Action Framework</title>
		<link>http://www.rittmanmead.com/2010/09/oracle-bi-ee-11g-integration-with-epm-11-1-2-hfr-action-framework/</link>
		<comments>http://www.rittmanmead.com/2010/09/oracle-bi-ee-11g-integration-with-epm-11-1-2-hfr-action-framework/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 07:20:08 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Oracle EPM]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=5966</guid>
		<description><![CDATA[As mentioned in the blog post here, one other significant improvement in 11g Action Framework is the ability to browse the Oracle EPM 11.1.2 catalog and then pass the parameters from BI EE to the target EPM reports. Unlike 10g, now there is no more a limitation of only one instance of BI EE being [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">As mentioned in the blog post <a href="http://www.rittmanmead.com/2010/09/13/oracle-bi-ee-11g-action-framework-integration-with-external-applications/" target="_blank">here</a>, one other significant improvement in 11g Action Framework is the ability to browse the Oracle EPM 11.1.2 catalog and then pass the parameters from BI EE to the target EPM reports. Unlike 10g, now there is no more a limitation of only one instance of BI EE being able to communicate only one other instance of EPM. In this blog post, we shall see how this integration works.</p>
<p style="clear: both">The example that we will be using here involves 2 reports. One report created in BI EE and another report created in Hyperion Financial Report. The idea is to use the Action Framework of BI EE 11g to pass the parameters from the BI EE report to the Hyperion Financial Report.</p>
<p style="clear: both">The BI EE report is shown below. This is a very simple report containing the Yearly sales data from the Demo &gt; Basic Essbase cube. The idea is to navigate to a HFR report by clicking on any Sales number and at the same time passing the context to the HFR report.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_134-thumb2.png" alt="" width="297" height="279" />The target FR report is given below. This report also goes against the Demo Basic Essbase cube with Year dimension acting as a User POV.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_135-thumb2.png" alt="" width="469" height="234" />To enable the integration, we need to first setup the ability in BI EE to navigate the EPM catalog. This is done by adding a registry entry in the ActionFrameworkConfig.xml file. This file can be found under {Middleware_Home}\user_projects\domains\bifoundation_domain\config\fmwconfig\biinstances\coreapplication. Open this file in a text editor and add the following XML registry tags</p>
<pre style="clear: both">&lt;registry&gt;
&lt;id&gt;HDPreg&lt;/id&gt;
 &lt;name&gt;Hyperion Directory Provider&lt;/name&gt;
 &lt;content-type&gt;epm&lt;/content-type&gt;
 &lt;provider-class&gt;oracle.bi.action.registry.epm.HDPRegistry&lt;/provider-class&gt;
 &lt;description&gt;Hyperion Financial Reports Registry&lt;/description&gt;
 &lt;location&gt; &lt;path&gt;http://venkatepm:19000/raframework/browse/listxml&lt;/path&gt; &lt;/location&gt;
 &lt;service-access&gt;
 &lt;account&gt;EPM&lt;/account&gt;
 &lt;propagateIdentity&gt;false&lt;/propagateIdentity&gt;
 &lt;/service-access&gt;
 &lt;/registry&gt;</pre>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_136-thumb2.png" alt="" width="500" height="334" />Remember the PropagateIdentity statement determines how the authentication/authorization is done. This is a must and without this tag, the EPM navigation will not work. Also note down the path of the EPM catalog listxml. In EPM 11.1.2, the listxml url has changed to point to the RA Framework. Ensure that while installing EPM, RA Framework is also chosen.</p>
<p style="clear: both">In the above registry XML entry, you will notice that we are using an account called EPM. This is nothing but a pointer to an actual account in the Weblogic Credential framework. So, we need to navigate to the Credentials page in the BI EE FMW Control (http://localhost:7001/em) and setup the EPM account.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_137-thumb2.png" alt="" width="500" height="458" />In the Credentials page, create a new Credential Map called oracle.bi.actions (if it does not exist already).</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_138-thumb2.png" alt="" width="400" height="180" />Within this Credential Map, create a new key called EPM. In the username and password section of the EPM key, enter the admin username and password that will be used to connect to the EPM catalog(in my case hyperion/welcome123). This username and password will be used only for the catalog navigation.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_139-thumb2.png" alt="" width="400" height="265" /></p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_140-thumb2.png" alt="" width="413" height="282" />Now restart the entire managed server so that BI EE can pick up the changes. As you see, the entire process of integration between EPM and BI EE (from BI EE) has been made simpler and also now we can add as many registry entries as we want, depending on the number of EPM targets that we want to navigate to.</p>
<p style="clear: both">After the restart, create a new BI EE report as shown below</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_141-thumb2.png" alt="" width="121" height="141" />Go to the column properties of the Sales measure and add an Action Link navigation.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_142-thumb2.png" alt="" width="459" height="363" />Create a new Action Link and choose Navigate to EPM content as the target.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_143-thumb2.png" alt="" width="500" height="250" />This will basically open up the EPM catalog. Lets choose our target FR report.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_144-thumb1.png" alt="" width="457" height="407" />This will automatically open up a parameter screen where most of the workspace specific parameters will be filled in automatically</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_145-thumb.png" alt="" width="500" height="295" />Add a new Parameter called Year which is what we will be passing from BI EE to HFR. Make the Year value to be passed from the Year column</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_146-thumb.png" alt="" width="493" height="190" />In the URL field, enter the URL given below</p>
<pre style="clear: both">http://venkatepm:19000/workspace/index.jsp?module=@{module}&amp;repository_path=@{repository_path}&amp;elementType=@{elementType}&amp;repository_name=@{repository_name}&amp;repository_format_id=@{repository_format_id}&amp;run=@{run}&amp;attribute=Year.id.@{Year}&amp;attribute=Product.id.Product&amp;attribute=Accounts.id.Accounts&amp;attribute=Scenario.id.Scenario&amp;attribute=Market.id.Market&amp;mimetype=@{mimetype}</pre>
<p style="clear: both">Basically the CONTEXT values can be made to be passed automatically from BI EE to HFR by setting up the dimension mapping in the FR.properties file(we shall see how this works in a future blog entry). But in our case above, we are passing the parameters manually.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_147-thumb.png" alt="" width="447" height="165" />Now we should have the action link enabled on the Sales column. By clicking on the FR Report link, the parameters will get passed from BI EE to HFR automatically. With the above approach, there is no SSO between BI EE and EPM. So, the username and passwords will have to be entered again.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_148-thumb.png" alt="" width="200" height="142" /></p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_149-thumb.png" alt="" width="323" height="321" />If the SSO is enabled, SSO_TOKEN can be passed across BI EE and EPM so that the navigation is seamless.</p>
<p style="clear: both"><img style=" text-align: center; display: block; margin: 0 auto 10px;" src="http://www.rittmanmead.com/wp-content/uploads/2010/09/Picture_2-thumb.png" alt="" width="469" height="234" />As you see, the Qtr1 value that was passed from BI EE has now set the context in FR. The same can be done for Planning forms, Web Analysis reports etc. I will cover the Planning forms integration with BI EE in a future post.</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/09/oracle-bi-ee-11g-integration-with-epm-11-1-2-hfr-action-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle Magazine Article on Essbase 11.1.2</title>
		<link>http://www.rittmanmead.com/2010/09/oracle-magazine-article-on-essbase-11-1-2/</link>
		<comments>http://www.rittmanmead.com/2010/09/oracle-magazine-article-on-essbase-11-1-2/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 12:33:56 +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=5647</guid>
		<description><![CDATA[My latest article for Oracle Magazine is now available online, and this month it&#8217;s a joint effort between myself and Venkat. &#8220;Using Oracle Essbase Release 11.1.2 Aggregate Storage Option Databases&#8221; takes a look at the new calculation capabilities in Essbase 11.1.2, in particular looking at how data can be aggregated, derived and allocated within 11.1.2 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oracle.com/technetwork/oramag/2010/10-sep/o50bi-165473.html"><img src="http://www.rittmanmead.com/wp-content/uploads/2010/09/oramagoct.png" alt="oramagoct" title="oramagoct" width="139" height="161" class="alignleft size-full wp-image-5648" /></a>My latest article for <a href="http://www.oracle.com/oramag">Oracle Magazine</a> is now available online, and this month it&#8217;s a joint effort between myself and Venkat.</p>
<p><a href="http://www.oracle.com/technetwork/oramag/2010/10-sep/o50bi-165473.html">&#8220;Using Oracle Essbase Release 11.1.2 Aggregate Storage Option Databases&#8221;</a> takes a look at the new calculation capabilities in Essbase 11.1.2, in particular looking at how data can be aggregated, derived and allocated within 11.1.2 Essbase cubes and persisted in the database, opening up ASO databases to the kind of planning and budgeting applications previously restricted to BSO databases. If you&#8217;ve heard that aggregate storage is the strategic direction for Essbase but wondered how it could handle the sorts of calculations provided by block storage, you may well find this article interesting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/09/oracle-magazine-article-on-essbase-11-1-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Oracle EPM 11.1.2 &#8211; Allocations in Essbase ASO Cubes &#8211; Using MaxL scripts</title>
		<link>http://www.rittmanmead.com/2010/05/oracle-epm-11-1-2-allocations-in-essbase-aso-cubes-using-maxl-scripts/</link>
		<comments>http://www.rittmanmead.com/2010/05/oracle-epm-11-1-2-allocations-in-essbase-aso-cubes-using-maxl-scripts/#comments</comments>
		<pubDate>Wed, 05 May 2010 11:55:10 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
				<category><![CDATA[Hyperion]]></category>
		<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle EPM]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=4787</guid>
		<description><![CDATA[In the last 2 blog entries, i showed how the calculations in ASO work. Today lets look at another new feature in ASO cubes i.e the ability to run allocations directly. In a BSO cube, Allocations and Calculations are all driven through a set of calculation commands. Some Allocation features in BSO can actually be [...]]]></description>
			<content:encoded><![CDATA[<p>In the last 2 blog entries, i showed how the calculations in ASO work. Today lets look at another new feature in ASO cubes i.e the ability to run allocations directly. In a BSO cube, Allocations and Calculations are all driven through a set of calculation commands. Some Allocation features in BSO can actually be implemented using normal calculation commands (without using ALLOCATE and MDALLOCATE functions). But in the case of ASO, calculations and allocations are treated separately. So, there are 2 important aspects that we need to remember while running calculations/allocations in a ASO cube</p>
<p>1. Dynamic References using CurrentMember, CurrentTupule etc are not supported currently (necessary if we want to run multiple allocations within the same dimension)<br />
2. Hierarchical references like PARENT etc are not allowed in both calculations &amp; allocations. These references are allowed for the parameters but not for the assignment scripts/allocation amounts.</p>
<p>The above 2 are significant drawbacks which i hope will be supported in future releases. Lets now look at a very simple example for allocation. I will be using the ASO version of the Demo-&gt;Basic cube for demonstrating this. The screenshot below shows the data that has been loaded into the cube.</p>
<p align="center"><img class="aligncenter size-full wp-image-4786" title="Picture 1" src="http://www.rittmanmead.com/wp-content/uploads/2010/05/Picture-1.png" alt="Picture 1" width="500" height="306" /></p>
<p>If you notice, we have data for the Sales measure for all Regions except South. The idea is to allocate data into the South Region (both Sales &amp; Cogs equally) based on the Total Expense values of the East Region. This is a very simple allocation example where our input data is at Level-0 but we are allocating from non Level-0. One good thing about this example is the fact that this shows that though ASO does not support input to non level-0 members, it supports allocation from them.</p>
<p>An Allocation in a ASO cube does not require a separate calculation script. All allocations are done through MaxLs directly. An allocation MaxL contains four main parts (in addition to other parameters which i shall not cover here).</p>
<p>1. POV &#8211; POV or a Point of View provides execution context to an allocation. A POV allows only reference to level-0 members. For every combination in the POV, the allocation will be executed once. POV is specified in the form of a MDX-Set.</p>
<p>2. Amount &#8211; This can contain a static member, Tupule or a constant. This does not support MDX expressions. In our example above, the amount will the (Total Expenses,East) Tupule. Ideally, Amount &amp; POV should have all the dimensions in the cube.</p>
<p>3. Target &#8211; Target is specified in the form of a MDX Tupule. Basically it represents the region that will act as a target for the allocation. In our case, this will be empty.</p>
<p>4. Region &#8211; Region is a MDX set expression. This represents the target region where the data will be allocated. The dimensions specified in POV, Target and Region should be mutually exclusive as they all combine to form the target region. In the example above, Children(Total Expenses) &amp; the Children (South) will form the Region.</p>
<p>5. Basis &#8211; This is commonly used when we are doing member based allocations. In our case, since we are using dividing the values equally (Spread allocation), this is optional.</p>
<p>So the final formula that i shall be using for achieving this is given below</p>
<pre>execute allocation process on database DemoASO.Basic with
pov "Crossjoin(Descendants([Year],[Year].levels(0)),
Crossjoin(Descendants([Product],[Product].levels(0)),
Descendants([Scenario],[Scenario].levels(0))))"
amount    "([East],[Total_Expenses])"
target    ""
range        "CrossJoin({[Sales],[Cost_of_Goods_Sold]},
Descendants([South],[Market].levels(0)))"
spread;</pre>
<p align="center"><img class="aligncenter size-full wp-image-4785" title="Picture 2" src="http://www.rittmanmead.com/wp-content/uploads/2010/05/Picture-2.png" alt="Picture 2" width="500" height="198" /></p>
<p>As you see, Essbase has generated the necessary cells to accomplish this. As i mentioned last time in the Calculation blog post, the allocations/calculations are done separately and then the updated cells are pushed through external data load buffers. So, you would start noticing cells being loaded into incremental slices.</p>
<p align="center"><img class="aligncenter size-full wp-image-4784" title="Picture 3" src="http://www.rittmanmead.com/wp-content/uploads/2010/05/Picture-3.png" alt="Picture 3" width="365" height="348" /></p>
<p>And if you look at the data, the South region would now have data with the values uniformly distributed.</p>
<p align="center"><img class="aligncenter size-full wp-image-4783" title="Picture 4" src="http://www.rittmanmead.com/wp-content/uploads/2010/05/Picture-4.png" alt="Picture 4" width="451" height="305" /></p>
<p>Though this does work there are some inherent drawbacks. As ASO does not accept data at non level-0 members, the way allocation maxL&#8217;s are designed it makes it very tough(though possible) to do hierarchical allocations within the same dimension. Hopefully the introduction of dynamic member references and member functions should enable that in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2010/05/oracle-epm-11-1-2-allocations-in-essbase-aso-cubes-using-maxl-scripts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

