<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Rittman Mead Consulting</title>
	<link>http://www.rittmanmead.com</link>
	<description>Delivered Intelligence</description>
	<pubDate>Fri, 03 Jul 2009 20:58:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Hyperion Essbase 11.1.1.2 &#8211; XOLAP &#8211; Reporting on Relational and Essbase sources together &#8211; Transparent Partitions</title>
		<link>http://www.rittmanmead.com/2009/07/01/hyperion-essbase-11112-xolap-reporting-on-relational-and-essbase-sources-together-transparent-partitions/</link>
		<comments>http://www.rittmanmead.com/2009/07/01/hyperion-essbase-11112-xolap-reporting-on-relational-and-essbase-sources-together-transparent-partitions/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 12:02:34 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
		
		<category><![CDATA[Hyperion Essbase]]></category>

		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/07/01/hyperion-essbase-11112-xolap-reporting-on-relational-and-essbase-sources-together-transparent-partitions/</guid>
		<description><![CDATA[In the last 2 blog entries, i had covered 2 new features of EPM 11 Essbase. They were Format Strings and Varying Attributes. In today’s blog entry we shall see another good feature that was introduced in the EPM 11 release called as XOLAP. Though I have covered this before here, i  thought it would [...]]]></description>
			<content:encoded><![CDATA[<p>In the last 2 blog entries, i had covered 2 new features of EPM 11 Essbase. They were <a target="_blank" href="http://www.rittmanmead.com/2009/06/26/hyperion-essbase-11112-altering-measure-formats-format-strings-and-text-measures/">Format Strings</a> and <a target="_blank" href="http://www.rittmanmead.com/2009/06/29/hyperion-essbase-11112-varying-attributes/">Varying Attributes</a>. In today’s blog entry we shall see another good feature that was introduced in the EPM 11 release called as XOLAP. Though I have covered this before <a href="http://oraclebizint.wordpress.com/2008/07/18/epm-1110-essbase-studio-xolap-first-impressions/">here</a>, i  thought it would make sense if i introduce this again in the context of the BI EE – Essbase connectivity.</p>
<p>Prior to XOLAP, Essbase supported HOLAP (still does) wherein one can drill from an Essbase cube to a relational source(only on BSO cubes) thereby providing a drill-through. It also supported something called as LRO’s in BSO cubes wherein one can attach an artifact to a database cell. What was not possible though was visualizing relational and Essbase data together. For example, we might have Actuals loaded inside Essbase but Budget might be obtained directly from a relational source. In such cases HOLAP cannot be used directly(though some workarounds are possible). With the advent of BI EE – Essbase connectivity in the 10.1.3.3.2 release, such complex integration cases have been made possible within BI EE framework using conforming dimensions. For details on how this is done, check out the ODTUG <a href="http://www.rittmanmead.com/files/odtug_essbase_paper.pdf">white paper here</a> that Mark and myself had created. But what if we want this kind of reporting in Excel-addin or smart view or any other downstream tools that use Essbase. This is where XOLAP can be very helpful.</p>
<p>For the sake of demonstration, i would use the Global schema here. Lets first start with building a XOLAP cube using the Essbase studio. Start with importing the data source and then creating the model.</p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp57.png" alt="tmp57" height="343" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp57" /></p>
<p>Then build your hierarchies and deploy the cube as a XOLAP cube. Remember whenever a XOLAP cube is created, it is an ASO cube. Also, it gets created with “Duplicate Members” turned on.</p>
<p align="center"><img border="0" width="246" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp58.png" alt="tmp58" height="286" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp58" /></p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp59.png" alt="tmp59" height="224" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp59" /></p>
<p>Deploy this cube. Once the deployment is done, you can login to Excel-add in and view the data.</p>
<p align="center"><img border="0" width="365" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp61.png" alt="tmp61" height="274" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp61" /></p>
<p align="center"><img border="0" width="491" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp60.png" alt="tmp60" height="125" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp60" /> </p>
<p>We now can report directly on a relational source through Essbase from Excel-add in. Our idea is to have a similar reporting structure but also have one more measure called Price which would be coming in directly from Essbase itself. In order to achieve this, create another ASO cube directly in EAS or in the Studio with a similar dimensional structure. It is not necessary that the ASO cube should have an exact dimensional structure as the XOLAP cube. But in our case for demonstration, we would create an exact similar structure. There would be another measure in the ASO cube called as Price.</p>
<p align="center"><img border="0" width="363" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp76.png" alt="tmp76" height="249" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp76" /></p>
<p>Now load some data into Price measure alone and aggregate it.</p>
<p align="center"><img border="0" width="493" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp77.png" alt="tmp77" height="120" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp77" /></p>
<p>Basically we have 2 cubes, one reporting on relational data using XOLAP and the other is a normal Essbase ASO cube. Now, in order to have a report with both Units and Price measure together, we need to create an additional ASO cube called GlobTarg which will be fed by the XOLAP and the ASO cube through transparent partition. So, lets first create the outline of GlobTarg first. Ensure that it has both Price and Units measures.</p>
<p align="center"><img border="0" width="357" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp78.png" alt="tmp78" height="258" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp78" /></p>
<p>Now create 2 transparent Partitions,one with the XOLAP cube as the source and GlobTarg as the target and the other with the Price ASO cube as the source and GlobTarg as the target.</p>
<p align="center"><img border="0" width="358" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp79.png" alt="tmp79" height="396" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp79" /></p>
<p>While creating the partition, map the corresponding source measures to the target measure. Once this is done, you can report directly on GlobTarg ASO cube. And you should be able to report both on the ASO as well as the relational source together.</p>
<p align="center"><img border="0" width="488" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/07/tmp7a.png" alt="tmp7A" height="181" style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px" title="tmp7A" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/07/01/hyperion-essbase-11112-xolap-reporting-on-relational-and-essbase-sources-together-transparent-partitions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hyperion Essbase 11.1.1.2 &#8211; Varying Attributes</title>
		<link>http://www.rittmanmead.com/2009/06/29/hyperion-essbase-11112-varying-attributes/</link>
		<comments>http://www.rittmanmead.com/2009/06/29/hyperion-essbase-11112-varying-attributes/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 15:33:53 +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/2009/06/29/hyperion-essbase-11112-varying-attributes/</guid>
		<description><![CDATA[Another excellent feature that was introduced as part of the EPM 11 release was the support for varying attributes. Varying attributes help in providing different perspectives of multiple attributes of a dimension over time. One can visualize this as SCD 2 in a relational world. For example, lets take the Sample –&#62; Basic cube and [...]]]></description>
			<content:encoded><![CDATA[<p>Another excellent feature that was introduced as part of the EPM 11 release was the support for varying attributes. Varying attributes help in providing different perspectives of multiple attributes of a dimension over time. One can visualize this as SCD 2 in a relational world. For example, lets take the Sample –&gt; Basic cube and look at the various attributes that have been defined.</p>
<p><a href="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image13.png"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb13.png" alt="image" height="196" style="display: inline; border: 0px" title="image" /></a></p>
<p>As you see, this cube has 5 different attributes defined on Product and Market dimensions. As of 9.3.1 release of Essbase one can have only static attributes defined. If varying attributes had to be defined, they had to be modeled as separate individual dimensions. Static attributes are those attributes that remain constant for a specific member. For example, lets assume that a product X has a static weight of Y ounces when it was introduced. If the manufacturing company decides to repackage the product X with a weight of Z ounces, then as of 9.3.1 release all the sales data mapped to Y ounces would switch over to Z ounces(similar to SCD-1 in a relational DW world). But in most cases, we want to see the sales data corresponding to their weights so that one can analyze the sales drop or increase due to the new product packaging. This is called as varying attributes over time. Sometimes, the same product X can be packaged with Y and Z ounces depending on Market. In this case, the weight varies over Time as well as Market.</p>
<p>With the advent of EPM 11.1.1.0, one can enable tracking of metrics over varying attributes as well. In the above outline, lets take the example of Pkg Type attribute. This has 2 values</p>
<p>1. Bottle<br />
2. Can</p>
<p>This packaging can vary for products across multiple Markets. Also the packaging can vary for a product in a specific market over time. To enable varying attributes, one would have to first enable this feature while creating an outline or later.</p>
<p><a href="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image14.png"><img border="0" width="381" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb14.png" alt="image" height="134" style="display: inline; border: 0px" title="image" /></a></p>
<p>In order enable the attribute Pkg Type on the product dimension, one would have to choose the attribute and the set of independent dimensions. Independent dimensions are those dimensions over which the attribute varies like Market and Time.</p>
<p><a href="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image15.png"><img border="0" width="497" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb15.png" alt="image" height="271" style="display: inline; border: 0px" title="image" /></a></p>
<p>Continuous dimensions(in the screenshot above) are typically those dimensions like Time where there is a chronological order and where we can specify a range. After this has been enabled, while setting the attribute for each product, the Market and Time would have to be chosen as well. For continuous attributes, one can specify a range.</p>
<p><a href="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image16.png"><img border="0" width="404" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb16.png" alt="image" height="481" style="display: inline; border: 0px" title="image" /></a></p>
<p><a href="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image17.png"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb17.png" alt="image" height="185" style="display: inline; border: 0px" title="image" /></a></p>
<p>For each product set the Time range over which it is planned to be sold and also the market. In the above example, the product 100-10 is sold in New York Market from Jan till Dec in Bottle Type and in the Massachusetts Market from Jan to Dec in Can type. The same kind of association would have to be done for each and every Market for the corresponding Pkg Type.</p>
<p>The above basically provides a relational visualization in a multi-dimensional cube. This also provides analysis of data in multiple perspectives. For example, we might be needing a report wherein we would like to analyze the sales for the list of products that were sold as Bottles in New York from Jan-Dec with a perspective of the attribute setting that we had in July. These kind of queries can be answered pretty easily by Varying attributes. In a future blog entry we shall see how these varying attributes can be leveraged from BI EE. As of the current release in BI EE, one can only use the default query context/perspective. One cannot alter the perspectives due to the limitation of modifying certain parts of the MDX query in BI EE. Having said that, it is possible to leverage the varying attributes using the default perspective. I will cover this in the coming weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/29/hyperion-essbase-11112-varying-attributes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memories of Monterey</title>
		<link>http://www.rittmanmead.com/2009/06/28/memories-of-monterey/</link>
		<comments>http://www.rittmanmead.com/2009/06/28/memories-of-monterey/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 13:43:47 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
		
		<category><![CDATA[User Groups &amp; Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/28/memories-of-monterey/</guid>
		<description><![CDATA[Well we&#8217;re back now from two weeks in the States, the first week of which was vacation in San Francisco and Yosemite, the last was at ODTUG Kaleidoscope 2009 in Monterey. Well done to the ODTUG team and to the Oracle ACE program for an exceptionally-well organized conference, as I&#8217;ve said in the past ODTUG [...]]]></description>
			<content:encoded><![CDATA[<p>Well we&#8217;re back now from two weeks in the States, the first week of which was vacation in San Francisco and Yosemite, the last was at <a href="http://www.odtugkaleidoscope.com">ODTUG Kaleidoscope 2009</a> in Monterey. Well done to the ODTUG team and to the Oracle ACE program for an exceptionally-well organized conference, as I&#8217;ve said in the past ODTUG Kaleidoscope is big enough to draw in the best speakers but small enough to get to meet everyone, and Mike, Kathleen, Crystal and the rest of the team make us all feel very welcome. Thanks again for the invite over.</p>
<p>As I had the family with me I spent a bit less time at actual sessions this time, but still made it to the key events. Tim Tow and Edward Roske did an excellent job of organizing the Hyperion stream and gave me a few ideas for the BI stream for next year; on reflection, although we had some good BI speakers this year the BI stream itself was a bit disjointed and didn&#8217;t really have the coherence that the Hyperion stream did. Next year our plan is to take a much more proactive approach to the BI content and try and organize it in a similar way to the Hyperion sessions, with streams dedicated to ETL + DW, OBIEE and so on. If anyone reading this is likely to go next year and wants to help shape next year&#8217;s agenda, drop me a line and we&#8217;ll make a start soon.</p>
<p>Rittman Mead had a great turnout at the conference, with our names on the lanyards and Stewart Bryson kicking off the sessions with a deep look into the functonality of Oracle Warehouse Builder. Stewarts&#8217; presentation is on our <a href="http://www.rittmanmead.com/articles">Articles</a> page and here&#8217;s a quick video clip of him presenting:</p>
<p align="center"><object width="480" height="295">
<param name="movie" value="http://www.youtube.com/v/E-Ts0Y-rcf0&#038;hl=en&#038;fs=1&#038;"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/E-Ts0Y-rcf0&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p>In case you&#8217;re wondering, that&#8217;s Joe Leva (our US MD) and Lewis Cunningham (Oracle ACE Director) that I pan to towards the the middle of the video.</p>
<p>My two sessions were on Optimizing Oracle BI Enterprise Edition, and a joint paper I wrote with Venkat on Creating Hybrid Relational/Multi-Dimensional Data Models using OBIEE and Essbase. Both papers are on are <a href="http://www.rittmanmead.com/articles">articles page</a>, including a white paper that accompanied the Essbase paper that goes into a number of different integration use-cases. Now that Venkat has joined us you can expect him and I to be authoring a bunch of other papers together, and to start things off we&#8217;ve had an updated version of the Essbase and OBIEE paper accepted for Open World 2009 in San Francisco.</p>
<p>Unfortunately as Venkat has only just left Oracle and joined us he couldn&#8217;t make it in person to Monterey, however I had a good stand-in as my six year-old son Scott was able to introduce me instead &#8230; we&#8217;d talked about this the evening before and he was up for doing a short introduction, and here he is introducing me at the start of the talk:</p>
<p align="center"><object width="480" height="295">
<param name="movie" value="http://www.youtube.com/v/p3eHl-zi_so&#038;hl=en&#038;fs=1&#038;"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/p3eHl-zi_so&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p>Well done to Scott! I&#8217;ll have him doing the demos next time&#8230;</p>
<p>Well for now it&#8217;s a quick turnaround and repack, as I&#8217;m off to Istanbul tomorrow to deliver a two-day Oracle 11g Data Warehousing seminar for Oracle University. After that it&#8217;s back up to London for a couple of days of client work, and starting to write the presentations and papers for Open World 2009.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/28/memories-of-monterey/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hyperion Essbase 11.1.1.2 &#8211; Altering Measure Formats &#8211; Format Strings and Text Measures</title>
		<link>http://www.rittmanmead.com/2009/06/26/hyperion-essbase-11112-altering-measure-formats-format-strings-and-text-measures/</link>
		<comments>http://www.rittmanmead.com/2009/06/26/hyperion-essbase-11112-altering-measure-formats-format-strings-and-text-measures/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 19:00:33 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
		
		<category><![CDATA[Hyperion]]></category>

		<category><![CDATA[Hyperion Essbase]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/26/hyperion-essbase-11112-altering-measure-formats-format-strings-and-text-measures/</guid>
		<description><![CDATA[If you had read my blog entry here, i would have shown how to go about creating textual measures in Essbase. Though that was a new feature introduced as part of the EPM 11 release, one related feature that i did not cover was the introduction of Format Strings. This probably is one of the [...]]]></description>
			<content:encoded><![CDATA[<p>If you had read my blog entry <a target="_blank" href="http://oraclebizint.wordpress.com/2008/12/10/hyperion-essbase-1111-handling-textual-facts-text-list-manager-and-text-measures/">here</a>, i would have shown how to go about creating textual measures in Essbase. Though that was a new feature introduced as part of the EPM 11 release, one related feature that i did not cover was the introduction of Format Strings. This probably is one of the very important features from an end user reporting standpoint. In a couple of implementations that i was involved in on 9.3.1, i faced a situation wherein we had to control the format of the data within Essbase itself. Unfortunately, since that was not possible in 9.3 release, custom formatting had to be applied in each and every downstream tools like Excel Add-in, HFR, BI EE etc.</p>
<p>Format strings help in controlling the output format of the measure values. For example, if we have an Expense account and a revenue account, the normal reporting requirement is to show the variance of the current quarter Actuals with the last quarter Actuals for both the type of accounts. For Revenue accounts, when current quarter is more than last quarter, then the variance would be positive else it would be negative. For Expense accounts, when the current quarter is less that last quarter, then the variance would be positive else it would be negative. Also, all negative values would have to be shown within braces and not as negative values.</p>
<p>Normally to implement the above requirement, we would have to write a custom formula to change the variance formula based on the Expense/Revenue UDA in an ASO cube(BSO cube has Expense/Revenue based reporting properties. But it is very limited in its usage). Also, adding braces to negative values would have to be done in the front end. Lets see how Format Strings can help us in achieving this requirement. Lets take the example of the Sample – Basic BSO cube. The strange aspect to the Format Strings is the fact that the implementation is done using MDX even in a BSO cube (should give a hint about the strategic direction :-)).</p>
<p>Lets first look at the outline. There are 2 measures Sales and COGS. Sales is a revenue measure and COGS is an expense measure.</p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb7.png" alt="image" height="239" style="display: inline; border-width: 0px" title="image" /></p>
<p>Now lets create another member called Variance as shown below in the Scenario dimension.</p>
<p align="center"><img border="0" width="444" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb8.png" alt="image" height="271" style="display: inline; border-width: 0px" title="image" /></p>
<p>This variance member is actually updated through a calculation script shown below (Format strings would not work on members having a member formula in BSO cubes)</p>
<pre>SET CACHE HIGH;SET LOCKBLOCK HIGH;

CLEARDATA "Variance";

CALC DIM ("Year");

"Variance" = "Actual"-&gt;&amp;CurrQtr - "Actual"-&gt;&amp;LastQtr;

CALC DIM ("Market","Product");</pre>
<p>Run the calc script after the data load. Following would be the variance values in Excel add-in.</p>
<p align="center"><img border="0" width="286" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb9.png" alt="image" height="165" style="display: inline; border-width: 0px" title="image" /></p>
<p>As you see, since there was no formatting applied on the Variance values, both COGS and Sales are getting treated the same way i.e shown as positive numbers. Now, in order to apply format strings on this, lets first convert the outline into Text measure compatible outline.</p>
<p align="center"><img border="0" width="393" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb10.png" alt="image" height="271" style="display: inline; border-width: 0px" title="image" /></p>
<p>After that, go to the member properties of the Variance member and add the MDX shown below</p>
<pre>MdxFormat(IIF(Is([Measures].dimension.CurrentMember, [COGS]),

    CASE WHEN cellvalue() &gt; 0 then Concat(Concat("(", numtostr(CellValue())), ")" ) else numtostr(-cellvalue()) end,

    CASE WHEN cellvalue() &lt; 0 then Concat(Concat("(", numtostr(-CellValue())), ")" ) else numtostr(cellvalue()) end

))</pre>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb11.png" alt="image" height="193" style="display: inline; border: 0px" title="image" /></p>
<p>Now if you go to Excel add-in, and retrieve the same data, you would notice that the accounting format would have got applied automatically.</p>
<p align="center"><img border="0" width="348" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb12.png" alt="image" height="167" style="display: inline; border: 0px" title="image" /></p>
<p>This is an excellent feature. In fact using this alone, one can mimic textual measures that i explained before. In a future blog entry i would show how this can be leveraged from other downstream tools like HFR, BI EE etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/26/hyperion-essbase-11112-altering-measure-formats-format-strings-and-text-measures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>UKOUG Conference Series Hyperion &#038; BI 2009</title>
		<link>http://www.rittmanmead.com/2009/06/25/ukoug-conference-series-hyperion-bi-2009/</link>
		<comments>http://www.rittmanmead.com/2009/06/25/ukoug-conference-series-hyperion-bi-2009/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 05:25:03 +0000</pubDate>
		<dc:creator>Jon Mead</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/25/ukoug-conference-series-hyperion-bi-2009/</guid>
		<description><![CDATA[Whilst Mark, Stewart are Joe are enjoying Monterery, I am on the train going up to London to meet Borkur to do a joint presentation entitled High Availability in Oracle BI EE in the BI Enterprise stream of the UKOUG Conference Series Hyperion &#38; BI 2009 event. The paper is a fairly technical one, going through the steps [...]]]></description>
			<content:encoded><![CDATA[<p>Whilst Mark, Stewart are Joe are enjoying Monterery, I am on the train going up to London to meet Borkur to do a joint presentation entitled <a href="http://hyperion.ukoug.org/default.asp?p=3078&amp;dlgact=shwprs&amp;prs_prsid=3464&amp;day_dayid=28" target="_blank">High Availability in Oracle BI EE</a> in the BI Enterprise stream of the <a href="http://www.ukoug.org/calendar/show_event.jsp?id=4024" target="_blank">UKOUG Conference Series Hyperion &amp; BI 2009 event</a>. The paper is a fairly technical one, going through the steps you need to perform to cluster OBIEE and discussing some of the pros, cons and pitfalls. If you are in the area please come along. I will post the slides after the event.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/25/ukoug-conference-series-hyperion-bi-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Visualizing relational data as Essbase/OLAP cubes &#8211; Partition Outer Joins and MODEL Clauses &#8211; Part 3</title>
		<link>http://www.rittmanmead.com/2009/06/24/visualizing-relational-data-as-essbaseolap-cubes-partition-outer-joins-and-model-clauses-part-3/</link>
		<comments>http://www.rittmanmead.com/2009/06/24/visualizing-relational-data-as-essbaseolap-cubes-partition-outer-joins-and-model-clauses-part-3/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 19:57:41 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
		
		<category><![CDATA[BI (General)]]></category>

		<category><![CDATA[Data Warehousing]]></category>

		<category><![CDATA[Dimensional Modelling]]></category>

		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/24/visualizing-relational-data-as-essbaseolap-cubes-partition-outer-joins-and-model-clauses-part-3/</guid>
		<description><![CDATA[In a prior blog entry here, i had shown the advantages of using the MODEL clause. I also showed how the MODEL clause can be used to visualize the relational data in a multi-dimensional format. In most cases, using the MODEL clause alone can be sufficient. Just to recap, the MODEL clause divides your resultant [...]]]></description>
			<content:encoded><![CDATA[<p>In a prior blog entry <a target="_blank" href="http://oraclebizint.wordpress.com/2009/05/16/oracle-bi-ee-10-1-3-4-1-%e2%80%93-report-sum-and-pivot-calculations-%e2%80%93-an-alternative-sql-on-oracle-10g-and-above-%e2%80%93-equivalence-to-mdx-%e2%80%93-model-clause-%e2%80%93-part-2/">here</a>, i had shown the advantages of using the MODEL clause. I also showed how the MODEL clause can be used to visualize the relational data in a multi-dimensional format. In most cases, using the MODEL clause alone can be sufficient. Just to recap, the MODEL clause divides your resultant data into 3 parts</p>
<p>1. Partition By set of Dimensions – Similar to Index entries in Essbase (sparse dimensions)<br />
2. Dimension By set of Dimensions – Similar to Blocks of Essbase (dense dimensions)<br />
3. Measure Dimension</p>
<p>So, whenever you use MODEL, Oracle constructs a multidimensional array for each partition by the dimension(s) combination value. The multi-dimensional array would be dimensioned by the dimensions specified in the DIMENSION BY clause. Though a multi-dimensional array is created, the created array contains only the valid intersections present in the fact table and not every intersections that are possible. For example, consider the sql query below</p>
<pre>SELECT FISCAL_YEAR_DSC,CHANNEL_DSC,

UNITS

FROM

(

select sum(T10976.UNITS) as UNITS, T10939.FISCAL_YEAR_DSC as FISCAL_YEAR_DSC, T10881.CHANNEL_DSC as CHANNEL_DSC

from

CHANNEL_DIM T10881,

TIME_DIM T10939,

UNITS_FACT T10976

where

( T10881.CHANNEL_ID = T10976.CHANNEL_ID and T10939.MONTH_ID = T10976.MONTH_ID )

group by T10881.CHANNEL_DSC, T10939.FISCAL_YEAR_DSC)

MODEL

PARTITION BY (FISCAL_YEAR_DSC)

DIMENSION BY (CHANNEL_DSC)

MEASURES (UNITS) RULES (UNITS['Total'] = SUM(UNITS)[ANY])

ORDER BY 1,2</pre>
<p align="center"><img border="0" width="321" src="http://oraclebizint.files.wordpress.com/2009/06/image46.png" alt="image" height="322" style="display: inline; border-width: 0px" /></p>
<p>As you see, the above query produces Sub-Totals for every Fiscal Year. But if you notice in the output of the query, we would be missing the year FY-06 which has no transactions in the fact table. Similarly even the Channel Television is missing in the output since it does not have any fact level transactions. In some cases, though there are no transactions we need the capability to show the non-existent (in fact tables) dimension values in the output(data densification). This is where Partition Outer Joins come in very handy. One can visualize partition outer join as a Cartesian product of dimensions. The major difference between a Cartesian product and the partition outer join is, one can have a control on Cartesian product using Partition Outer Join. Stewart has already covered Partition Outer Joins in a prior blog entry <a target="_blank" href="http://www.rittmanmead.com/2009/04/22/using-a-partition-by-join-to-fill-in-the-gaps/">here</a>.</p>
<p>For example, lets say we have a requirement to show all the dimension values of Channel and only the transaction values of Fiscal year in our above report i.e. we need to bring in the Television Channel as well into our above report for Year.</p>
<p align="center"><img border="0" width="369" src="http://oraclebizint.files.wordpress.com/2009/06/image47.png" alt="image" height="103" style="display: inline; border-width: 0px" title="image" /></p>
<p>Usually we would approach this using a normal outer join with the Channel Dimension as shown below.</p>
<pre>SELECTA.FISCAL_YEAR_DSC FISCAL_YEAR_DSC,B.CHANNEL_DSC CHANNEL_DSC,NVL(A.UNITS,0) UNITS

FROM

( select sum(T10976.UNITS) as UNITS, T10939.FISCAL_YEAR_DSC as FISCAL_YEAR_DSC, T10881.CHANNEL_DSC as CHANNEL_DSC

from

CHANNEL_DIM T10881,

TIME_DIM T10939,

UNITS_FACT T10976

where ( T10881.CHANNEL_ID = T10976.CHANNEL_ID and T10939.MONTH_ID = T10976.MONTH_ID )

group by T10881.CHANNEL_DSC, T10939.FISCAL_YEAR_DSC) A

RIGHT OUTER JOIN

(SELECT DISTINCT CHANNEL_DSC FROM CHANNEL_DIM) B ON (A.CHANNEL_DSC = B.CHANNEL_DSC)</pre>
<p align="center"><img border="0" width="331" src="http://oraclebizint.files.wordpress.com/2009/06/image48.png" alt="image" height="311" style="display: inline; border-width: 0px" title="image" /></p>
<p>But again the above outer join only provides a single row for Television channel. But our requirement is to have the same Television Channel for every Fiscal Year that has transactions. This is where Partition Outer Join would be of great help. Lets modify the above query to the one shown below</p>
<pre>SELECTA.FISCAL_YEAR_DSC FISCAL_YEAR_DSC,B.CHANNEL_DSC CHANNEL_DSC,NVL(A.UNITS,0) UNITS

FROM

(

select

sum(T10976.UNITS) as UNITS,

T10939.FISCAL_YEAR_DSC as FISCAL_YEAR_DSC,

T10881.CHANNEL_DSC as CHANNEL_DSC

from

CHANNEL_DIM T10881,

TIME_DIM T10939,

UNITS_FACT T10976 where

( T10881.CHANNEL_ID = T10976.CHANNEL_ID and T10939.MONTH_ID = T10976.MONTH_ID )

group by T10881.CHANNEL_DSC, T10939.FISCAL_YEAR_DSC) A

PARTITION BY (A.FISCAL_YEAR_DSC)

RIGHT OUTER JOIN

(SELECT DISTINCT CHANNEL_DSC FROM CHANNEL_DIM) B

ON (A.CHANNEL_DSC = B.CHANNEL_DSC)</pre>
<p align="center"><img border="0" width="330" src="http://oraclebizint.files.wordpress.com/2009/06/image49.png" alt="image" height="311" style="display: inline; border-width: 0px" title="image" /></p>
<p>Now, if you notice we now have non-existent(in the fact table) all channel dimension values for every transactional Year. We can extend the same concept to show both non-existent year (FY-06) as well as channel dimension values using the query below.</p>
<pre>SELECTA.FISCAL_YEAR_DSC,B.CHANNEL_DSC,NVL(A.UNITS,0)

FROM

(

SELECT B.FISCAL_YEAR_DSC FISCAL_YEAR_DSC, A.CHANNEL_DSC CHANNEL_DSC, NVL(A.UNITS,0) UNITS

FROM

(

select sum(T10976.UNITS) as UNITS, T10939.FISCAL_YEAR_DSC as FISCAL_YEAR_DSC, T10881.CHANNEL_DSC as CHANNEL_DSC

from

CHANNEL_DIM T10881,

TIME_DIM T10939,

UNITS_FACT T10976

where ( T10881.CHANNEL_ID = T10976.CHANNEL_ID and T10939.MONTH_ID = T10976.MONTH_ID )

group by T10881.CHANNEL_DSC, T10939.FISCAL_YEAR_DSC) A

PARTITION BY (A.CHANNEL_DSC)

RIGHT OUTER JOIN

(SELECT DISTINCT FISCAL_YEAR_DSC FROM TIME_DIM) B

ON (A.FISCAL_YEAR_DSC = B.FISCAL_YEAR_DSC)) A

PARTITION BY (A.FISCAL_YEAR_DSC)

RIGHT OUTER JOIN (SELECT DISTINCT CHANNEL_DSC FROM CHANNEL_DIM) B

ON (A.CHANNEL_DSC = B.CHANNEL_DSC)</pre>
<p align="center"><img border="0" width="390" src="http://oraclebizint.files.wordpress.com/2009/06/image50.png" alt="image" height="321" style="display: inline; border-width: 0px" title="image" /></p>
<p>This can further be modified to include the sub-totals using the MODEL clause.</p>
<pre>SELECTFISCAL_YEAR_DSC,CHANNELS,NVL(UNITS,0)

FROM

(SELECT B.FISCAL_YEAR_DSC FISCAL_YEAR_DSC, A.CHANNEL_DSC CHANNEL_DSC, NVL(A.UNITS,0) UNITS

FROM

(

select

sum(T10976.UNITS) as UNITS, T10939.FISCAL_YEAR_DSC as FISCAL_YEAR_DSC, T10881.CHANNEL_DSC as CHANNEL_DSC

from

CHANNEL_DIM T10881, TIME_DIM T10939, UNITS_FACT T10976

where

( T10881.CHANNEL_ID = T10976.CHANNEL_ID and T10939.MONTH_ID = T10976.MONTH_ID )

group by T10881.CHANNEL_DSC, T10939.FISCAL_YEAR_DSC) A

PARTITION BY (A.CHANNEL_DSC)

RIGHT OUTER JOIN

(SELECT DISTINCT FISCAL_YEAR_DSC FROM TIME_DIM) B

ON (A.FISCAL_YEAR_DSC = B.FISCAL_YEAR_DSC)) A

PARTITION BY (A.FISCAL_YEAR_DSC)

RIGHT OUTER JOIN (SELECT DISTINCT CHANNEL_DSC FROM CHANNEL_DIM) B

ON (A.CHANNEL_DSC = B.CHANNEL_DSC)

MODEL

PARTITION BY (FISCAL_YEAR_DSC)

DIMENSION BY (B.CHANNEL_DSC CHANNELS)

MEASURES (UNITS) RULES (UNITS['Total'] = SUM(UNITS)[ANY])

ORDER BY 1,2</pre>
<p align="center"><img border="0" width="348" src="http://oraclebizint.files.wordpress.com/2009/06/image51.png" alt="image" height="365" style="display: inline; border-width: 0px" title="image" /></p>
<p>The primary advantage of using the Partition By Outer Join and MODEL clause together is the fact that one can now do custom member based allocations, calculations etc directly on a relational data source. If you do not have Essbase/Oracle OLAP and would still like to do the complex data manipulation on a relational source, MODEL and Partition By Outer Joins can come in very handy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/24/visualizing-relational-data-as-essbaseolap-cubes-partition-outer-joins-and-model-clauses-part-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ODTUG Kaleidoscope, Venkat and Stanley</title>
		<link>http://www.rittmanmead.com/2009/06/24/odtug-kaleidoscope-venkat-and-stanley/</link>
		<comments>http://www.rittmanmead.com/2009/06/24/odtug-kaleidoscope-venkat-and-stanley/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 08:13:55 +0000</pubDate>
		<dc:creator>Joe Leva</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/24/odtug-kaleidoscope-venkat-and-stanley/</guid>
		<description><![CDATA[Stewart wrote and posted his last blog posting while on the plane to Monterey via gogo. Frankly, spending as much time on planes as we do, I am jealous and need to start flying with a better class of airline. Actual live internet at 35,000 feet? Now that is first class.
Speaking of first class, ODTUG [...]]]></description>
			<content:encoded><![CDATA[<p>Stewart wrote and posted his <a href="http://www.rittmanmead.com/2009/06/21/gearing-up-for-odtug/">last</a> blog posting while on the plane to Monterey via <a href="http://gogoinflight.com">gogo</a>. Frankly, spending as much time on planes as we do, I am jealous and need to start flying with a better class of airline. Actual live internet at 35,000 feet? Now that is first class.</p>
<p>Speaking of first class, <a href="http://www.odtugkaleidoscope.com/">ODTUG Kaleidoscope</a> never disappoints, the level of the sessions is consistently excellent. People tend to vote with their feet and the word is that attendance is up this year as well. This certainly fits with what we&#8217;ve been seeing at the presentations. This is the first conference I&#8217;ve gone to in the last 9 or 10 month that I haven&#8217;t presented at and it is nice to be able to attend more sessions. This is actually my first trip to Monterey and variation in landscapes in California continues to impress.</p>
<p align="center"><img height="337" alt="Hyatt Monterey" hspace="0" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/dsc01445-1.jpg" width="450" border="0" /></p>
<p>Stewart delivered an impressive presentation on considerations for selecting OWB. There were some particularly interesting points regarding the advantages and trade offs of the cube and dimension accelerators. The question and answer session afterward suggests that the new packaging of OWB with ODI has helped to reduce if not eliminate customer concern regarding which tool to use for new development.</p>
<p align="center"><img height="337" alt="Mark Rittman Moderates ODTUG BI Panel" hspace="0" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/dsc01437.jpg" width="450" border="0" /></p>
<p>Mark moderated the BI/DW panel with Mike Durran, Dan Vlamis, Jean-Pierre Dijcks and Michael Armstrong-Smith (Left to Right). There were some provocative opinions expressed regarding possible future paths for the essbase engine and how it might or might not integrate with the Oracle technology stack. Perhaps I&#8217;ll kick that bees nest in some future post. It is a topic that I think would generate a lot of discussion. Mark also presented our OBIEE optimization methodology. This approach focuses on specifically on measuring and managing the performance of the Oracle BI server. It joins our methodology for improving the performance of the Oracle BI applications. If you are reading this before today&#8217;s sessions, you will also want to stop by Mark&#8217;s presentation &#8220;Creating Hybrid Essbase/Relational OBIEE Logical Models&#8221;.</p>
<p>I&#8217;d like to welcome Venkat to the team. One of the reasons that Stewart and I were drawn to working with Mark and Jon and forming <a href="http://www.rittmanmeadamerica.com">Rittman Mead America</a> was their ability to identify and recruit world class talent. Venkat is a great example of such talent and we are very happy to have him on board.</p>
<p align="center"><img height="168" alt="Joe Leva and Stanley Ace" hspace="0" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/dsc01440.jpg" width="225" border="0" /></p>
<p>A highlight of this conference for me was finally meeting Stanley. We may have been roommates at Collaborate, I really can&#8217;t say, I was pretty jet lagged at the time because I had flown there directly from Singapore. But this time we got to meet and he was good enough to pose for a picture with me, no autograph though. Stanley is Dan Norris&#8217; Oracle Ace vest, he has his own twitter tag #stanleyace and his own blog (<a href="http://www.wtfistheacevest.com/">http://www.wtfistheacevest.com/</a>). Apparently, he had gone diving with Dan in Monterey Bay over the weekend, and frankly he did not smell like he had showered since. This is why I only half have my arm over his sholder. Happy travels Stanley.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/24/odtug-kaleidoscope-venkat-and-stanley/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle BI EE &#8211; Bulk Write backs to Essbase &#8211; Using JAPI, Global Temporary Tables and UTL_HTTP &#8211; Part 2</title>
		<link>http://www.rittmanmead.com/2009/06/23/oracle-bi-ee-bulk-write-backs-to-essbase-using-japi-global-temporary-tables-and-utl_http-part-2/</link>
		<comments>http://www.rittmanmead.com/2009/06/23/oracle-bi-ee-bulk-write-backs-to-essbase-using-japi-global-temporary-tables-and-utl_http-part-2/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 07:07:13 +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/2009/06/23/oracle-bi-ee-bulk-write-backs-to-essbase-using-japi-global-temporary-tables-and-utl_http-part-2/</guid>
		<description><![CDATA[I had covered an approach here to do write backs into Essbase from BI EE. In some cases that approach would be sufficient. But in most of the cases, end users would want the capability to do a bulk write back similar to the default write back option provided by BI EE(like in relational sources). [...]]]></description>
			<content:encoded><![CDATA[<p>I had covered an approach <a target="_blank" href="http://oraclebizint.wordpress.com/2009/05/25/oracle-bi-ee-10-1-3-4-1-writebacks-to-essbase-using-japi-and-custom-html-part-1/">here</a> to do write backs into Essbase from BI EE. In some cases that approach would be sufficient. But in most of the cases, end users would want the capability to do a bulk write back similar to the default write back option provided by BI EE(like in relational sources). For example, if you look at the screenshot below, we have an Essbase report containing Q1, Eastern Market sales.</p>
<p align="center"><img border="0" width="379" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb.png" alt="image" height="228" style="display: inline; border-width: 0px" title="image" /></p>
<p>If you use the last blog entry’s approach you can write back to Essbase one row at a time. But what if our requirement is to write all the modified rows in a single shot to Essbase. In order to achieve that, the architecture for write back would be slightly different from what we saw before. The high level architecture is given below</p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb1.png" alt="image" height="271" style="display: inline; border-width: 0px" title="image" /></p>
<p>As you see, in order to achieve the writebacks we would be using the usual Write back template provided by BI EE. The main difference between this and the relational write back is the fact that we would be writing into a global temporary table. We are using a Global Temporary table as it has the feature of truncating itself at the end of a transaction or a session. This Global Temporary table is used just for dummy purpose. During the insert into the temporary table, we would be calling a function which would in turn pass down the parameters to the UTL_HTTP function to call the custom JSP that we created last time. So let us first start with the JSP page that we had created before. For the sake of completeness, i am pasting the code again here.</p>
<pre>&lt;%@ page contentType="text/html;charset=windows-1252"%&gt;&lt;%@ page import="java.io.*" %&gt;&lt;%@ page import="java.util.Map" %&gt;&lt;%@ page import="java.util.Map.Entry" %&gt;&lt;%@ page import="java.util.jar.Attributes" %&gt;&lt;%@ page import="java.util.Iterator" %&gt;&lt;%@ page import="com.essbase.api.base.*" %&gt;&lt;%@ page import="com.essbase.api.dataquery.*" %&gt;   

&lt;%@ page import="com.essbase.api.session.*" %&gt;   

&lt;%@ page import="com.essbase.api.datasource.*" %&gt;   

&lt;%@ page import="com.essbase.api.domain.*" %&gt;   

&lt;%@ page import="com.essbase.api.metadata.*" %&gt; &lt;%="WriteBack Started" %&gt;&lt;%   

String s_userName = "admin";   

        String s_password = "password";   

        String s_olapSvrName = "localhost";   

        String s_provider = "http://localhost:13080/aps/JAPI";   

try   

        {   

        IEssbase ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);   

        IEssDomain dom = ess.signOn(s_userName, s_password, false, null, s_provider);   

        IEssOlapServer olapSvr = (IEssOlapServer)dom.getOlapServer(s_olapSvrName);   

        olapSvr.connect();   

        IEssCubeView cv = dom.openCubeView("Data Update Example",s_olapSvrName, "Demo", "Basic");   

String v_Market = request.getParameter("p_Market");   

        String v_Product = request.getParameter("p_Product");   

        String v_Accounts = request.getParameter("p_Accounts");   

        String v_Scenario = request.getParameter("p_Scenario");   

        String v_Year = request.getParameter("p_Year");   

        String v_Value = request.getParameter("p_Value");   

IEssGridView grid = cv.getGridView();   

        grid.setSize(2, 5);   

        grid.setValue(0, 1, v_Market);   

        grid.setValue(0, 2, v_Product);   

        grid.setValue(0, 3, v_Accounts); ;   

        grid.setValue(0, 4, v_Scenario);   

        grid.setValue(1, 0, v_Year);   

cv.performOperation(cv.createIEssOpRetrieve());   

        System.out.println("\nData Cell at 2nd-row, 2nd-column: " + grid.getValue(1,1).toString());   

        System.out.println ("Market: "+v_Market+" Product: "+v_Product+" Accounts: "+v_Accounts+" Scenario: "+v_Scenario+" Year: "+v_Year+" Value: "+v_Value);   

int row = 1, col = 1;   

        if (grid.getCellContentType(row, col) ==   

                IEssGridView.CELL_CONTENT_TYPE_DOUBLE) {   

            IEssValueAny val = grid.getValue(row, col);   

            double dblVal = val.getDouble();   

grid.setValue(row, col, Double.valueOf(v_Value).doubleValue());   

        } else if (grid.getCellContentType(row, col) ==   

                IEssGridView.CELL_CONTENT_TYPE_MISSING) {   

            grid.setValue(row, col, Double.valueOf(v_Value).doubleValue());   

        }   

IEssOpUpdate opUpd = cv.createIEssOpUpdate();   

        cv.performOperation(opUpd);   

}catch (EssException x){   

            System.out.println("ERROR: " + x.getMessage());   

        }   

%&gt;   

&lt;%="WriteBack Ended" %&gt;   

 	&lt;%="WriteBack Ended" %&gt;   

&lt;%   

    //response.sendRedirect("http://localhost:9704/analytics");   

%&gt;</pre>
<p>After compiling the above jsp, deploy this to any Java Application server as an EAR file. The main reason for doing this is to have a URL that we can call using the UTL_HTTP database package. If more security is needed, one can code them directly into the JSP so that no one else is able to access the jsp outside of the UTL_HTTP package.</p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb2.png" alt="image" height="174" style="display: inline; border-width: 0px" title="image" /></p>
<p>The next step is to create the Global Temporary Table. The structure of the Global temporary table can contain any number of columns. But we would need a column which we would be inserting into through the template via a function. In my case the Global Temporary table contains all the write back columns as well as an extra column that indicates whether the write back was successful or not.</p>
<pre>create global temporary table EssbaseWriteBack_GTT(Year varchar2(100),Market varchar2(100),Product varchar2(100),   

Scenario varchar2(100),   

Sales Number,   

WriteBackStatus Number   

) ON COMMIT DELETE ROWS;</pre>
<p>Once the global temporary table has been created, we need to create a function which will basically pass the input parameters to the JSP. The JSP is basically called through the UTL_HTTP package and the parameters are passed using the GET method. If you need more security, POST method can also be used.The idea is for every row insert, the row attributes are passed into this function which would basically write back into Essbase.</p>
<pre>create or replaceFUNCTION WriteBack_GTT(p_Year varchar2,p_Market varchar2,p_Product varchar2,p_Scenario varchar2,   

p_value NUMBER   

) RETURN NUMBER IS   

  req Utl_Http.Req;   

  resp Utl_Http.Resp;  v_msg varchar2(80);   

  v_url varchar2(32767) := 'http://localhost:9704/AllocEssbase-AllocEssbase-context-root/EssbaseWriteback.jsp?';   

begin   

  v_url := 'http://localhost:9704/AllocEssbase-AllocEssbase-context-root/EssbaseWriteback.jsp?';   

  v_url := v_url||'p_Market='||p_Market||'&amp;p_Year='||p_Year||'&amp;p_Accounts=Sales&amp;p_Scenario='||p_Scenario||'&amp;p_Product='||p_Product||'&amp;p_Value='||to_char(p_Value);   

  Utl_Http.Set_Response_Error_Check ( enable =&gt; true );   

  Utl_Http.Set_Detailed_Excp_Support ( enable =&gt; true );   

  req := Utl_Http.Begin_Request (   

    url =&gt; v_url,   

    method =&gt; 'GET' );   

  Utl_Http.Set_Header (   

    r =&gt; req,   

    name =&gt; 'User-Agent',   

    value =&gt; 'Mozilla/4.0' );   

 resp := Utl_Http.Get_Response ( r =&gt; req );   

 Dbms_Output.Put_Line ( 'Status code: ' || resp.status_code );   

 Dbms_Output.Put_Line ( 'Reason phrase: ' || resp.reason_phrase );   

    Utl_Http.End_Response ( r =&gt; resp );   

RETURN 1;   

exception   

when Utl_Http.Request_Failed then   

    Dbms_Output.Put_Line ( 'Request_Failed: ' || Utl_Http.Get_Detailed_Sqlerrm );   

    RETURN 0;   

when Utl_Http.Http_Server_Error then   

    Dbms_Output.Put_Line ( 'Http_Server_Error: ' || Utl_Http.Get_Detailed_Sqlerrm );   

    RETURN 0;   

when Utl_Http.Http_Client_Error then   

    Dbms_Output.Put_Line ( 'Http_Client_Error: ' || Utl_Http.Get_Detailed_Sqlerrm );   

    RETURN 0;   

when others then   

    Dbms_Output.Put_Line (SQLERRM);   

    RETURN 0;   

end;</pre>
<p>The next step is to create the Write back template as shown below.</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8" ?&gt;&lt;WebMessageTables xmlns:sawm="com.siebel.analytics.web/message/v1"&gt;&lt;WebMessageTable lang="en-us" system="WriteBack" table="Messages"&gt;&lt;WebMessage name="WriteBack"&gt;&lt;XML&gt;   

&lt;writeBack connectionPool="SH"&gt;   

&lt;insert&gt; &lt;/insert&gt;   

&lt;update&gt;INSERT INTO EssbaseWriteBack_GTT(YEAR,MARKET,PRODUCT,SCENARIO,Sales,WRITEBACKSTATUS)   

VALUES ('@{c0}','@{c1}','@{c2}','@{c3}', @{c4}, WriteBack_GTT('@{c0}','@{c1}','@{c2}','@{c3}', @{c4})) &lt;/update&gt;   

&lt;/writeBack&gt;   

&lt;/XML&gt;   

&lt;/WebMessage&gt;   

&lt;/WebMessageTable&gt;   

&lt;/WebMessageTables&gt;</pre>
<p align="center"><img border="0" width="500" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb3.png" alt="image" height="209" style="display: inline; border-width: 0px" title="image" /></p>
<p>Place the write back template in the {OracleBI}\web\msgdb\customMessages folder. Restart the presentation services. Now navigate to the report and enable write back on the Sales column.</p>
<p align="center"><img border="0" width="504" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb4.png" alt="image" height="228" style="display: inline; border-width: 0px" title="image" /></p>
<p>Once the write back is enabled, you should be able to update multiple rows back to Essbase simultaneously.</p>
<p align="center"><img border="0" width="386" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb5.png" alt="image" height="206" style="display: inline; border-width: 0px" title="image" /></p>
<p align="center"><img border="0" width="353" src="http://www.rittmanmead.com/wp2/wp-content/uploads/2009/06/image-thumb6.png" alt="image" height="233" style="display: inline; border-width: 0px" title="image" /></p>
<p>The above will work if you are on a Block storage cube(BSO). If you are on an Aggregate Storage(ASO) cube, you need to ensure that you are writing back only to level-0 intersections. Else the write back will fail. The other option for ASO cubes is to setup the write back partition with a BSO cube. The above architecture can even be expanded further to update cell comments, dimension members etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/23/oracle-bi-ee-bulk-write-backs-to-essbase-using-japi-global-temporary-tables-and-utl_http-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My First Post here - Joining Rittman Mead</title>
		<link>http://www.rittmanmead.com/2009/06/22/my-first-post-here-joining-rittman-mead/</link>
		<comments>http://www.rittmanmead.com/2009/06/22/my-first-post-here-joining-rittman-mead/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:28:25 +0000</pubDate>
		<dc:creator>Venkatakrishnan J</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/22/my-first-post-here-joining-rittman-mead/</guid>
		<description><![CDATA[As you might have read from Mark’s post here, i now have officially joined Rittman Mead. And this is the big news that i had alluded to in my blog post last week here. This is pretty exciting from a personal standpoint as RM has an excellent team of end to end Oracle BI experts.
I [...]]]></description>
			<content:encoded><![CDATA[<p>As you might have read from <a href="http://www.rittmanmead.com/2009/06/22/breaking-news-venkat-joining-rittman-mead/">Mark’s post here</a>, i now have officially joined Rittman Mead. And this is the big news that i had alluded to in my blog post last week <a target="_blank" href="http://oraclebizint.wordpress.com/2009/06/15/time-for-a-change-upcoming-announcements-millionth-hit/">here</a>. This is pretty exciting from a personal standpoint as RM has an excellent team of end to end Oracle BI experts.</p>
<p>I had resigned from Oracle a month back after the BI Forum. My role in Oracle and my role here in Rittman Mead would more or less be the same. But the big question is what happens to my older blog. Well, i still have not thought about it completely to be honest. I am still in discussions with Mark to see whether we can move the contents over here. Moving 300 odd posts would not be an easy task. So, till the posts are moved or a decision has been arrived at, you can still access them there. But if you feel that the older site should remain as is, please leave a comment here.</p>
<p>Moving away from Oracle was probably one of the toughest decisions that i had to take after nearly a 5 year long association. Oracle is probably one of the most well organized companies out there and i am proud to have been part of that big organization. Sometimes you get amazed by the openness that exists there. I do really cherish all the nice little moments that i had over at Oracle. I would miss responding to the internal mailing list questions (which i had actually stopped 6 months back). I would miss the 2 hour long drive from my home to the Oracle office everyday. But sometimes these decisions would have to be taken and i am pretty sure whatever i have taken is correct.</p>
<p>The transition to RM should not be tough as it is managed by excellent professionals like Mark and Jon. I have been interacting with Mark for the last 5 months over email and i met him personally in the BI Forum. Its pretty sad that i have not been able to present with him in the <a target="_blank" href="http://www.odtugkaleidoscope.com/abstracts.html#Rittman">ODTUG Kaleidoscope conference</a> this year due to some last minute changes. But i am looking forward to the Open World as that gives me another opportunity to present with him.</p>
<p>One of the good things about me being part of RM is the fact that i am more reachable. So, if you want to involve me in any aspect of an Oracle BI implementation just send an email to me at  <a href="mailto:venkat@rittmanmead.com">venkat@rittmanmead.com</a> or send it over to Mark/Jon at <a href="mailto:info@rittmanmead.com">info@rittmanmead.com</a>. We would be glad to take the conversation to the next stage.</p>
<p>And yes watch out for more blog entries in my new location here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/22/my-first-post-here-joining-rittman-mead/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Breaking News - Venkat Joining Rittman Mead</title>
		<link>http://www.rittmanmead.com/2009/06/22/breaking-news-venkat-joining-rittman-mead/</link>
		<comments>http://www.rittmanmead.com/2009/06/22/breaking-news-venkat-joining-rittman-mead/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:07:23 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
		
		<category><![CDATA[Rittman Mead]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/2009/06/22/breaking-news-venkat-joining-rittman-mead/</guid>
		<description><![CDATA[Well this year has certainly seen some interesting and exciting developments for Rittman Mead. Earlier in the year we launched Rittman Mead in America, along with our colleagues Joe Leva and Stewart Bryson; shortly after that Adrian Ward and the team from Majendi joined us to further expand our OBIEE coverage in the UK. Now [...]]]></description>
			<content:encoded><![CDATA[<p>Well this year has certainly seen some interesting and exciting developments for Rittman Mead. Earlier in the year we launched <a href="http://www.rittmanmead.com/america/">Rittman Mead in America</a>, along with our colleagues Joe Leva and Stewart Bryson; shortly after that <a href="http://www.rittmanmead.com/2009/04/06/rittman-mead-and-majendi-join-forces/">Adrian Ward and the team from Majendi joined us</a> to further expand our OBIEE coverage in the UK. Now I have great pleasure in announcing that Venkatakrishnan J, who I&#8217;m sure you&#8217;ll all know through his excellent <a href="http://oraclebizint.wordpress.com">OBIEE and Essbase blog</a>, has kindly agreed to join us at Rittman Mead.</p>
<p>We&#8217;ve known Venkat now for a couple of years, firstly through our mutual interest in Oracle&#8217;s BI, DW and Performance Management technologies, and recently through his attendance at our <a href="http://www.rittmanmead.com/2009/05/17/the-rittman-mead-bi-forum-2009-brighton/">BI Forum in Brighton</a>. We&#8217;d spoken informally about Venkat joining us before the event and when we all met up, it was clear we all shared a similar passion for Oracle technology. Venkat joins us from Oracle India where he provided consulting support and assistance on some high-profile projects, and brings his unsurpassed knowledge of OBIEE, Hyperion and DW integration and development to our team. At Rittman Mead, our approach since Jon and I started the company was to try and work with the best people in the Oracle BI&amp;DW industry, bringing out join skills and project approach to customer engagements to ensure the success of their projects. Venkat joining us really adds significant weight to our project abilities and we&#8217;re all super-excited about his joining us, and in future contributing to the Rittman Mead blog.</p>
<p>I&#8217;m sure you&#8217;ll all join us in welcoming Venkat to the team, and keep an eye out on this site for news of the second of our <a href="http://www.rittmanmead.com/oracle-bi-training-days-october-22nd-24th-london-uk/">Training Days events in London</a> for later in the year, where Venkat, myself and Christian Berg will be running three days of advanced-level training on OBIEE and the Hyperion EPM stack.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2009/06/22/breaking-news-venkat-joining-rittman-mead/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
