<?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</title>
	<atom:link href="http://www.rittmanmead.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rittmanmead.com</link>
	<description>Delivering Oracle Business Intelligence</description>
	<lastBuildDate>Tue, 18 Jun 2013 08:26:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Embedding a D3 Visualisation in OBIEE</title>
		<link>http://www.rittmanmead.com/2013/06/embedding-a-d3-visualisation-in-obiee/</link>
		<comments>http://www.rittmanmead.com/2013/06/embedding-a-d3-visualisation-in-obiee/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 07:34:13 +0000</pubDate>
		<dc:creator>Tom Underhill</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[D3]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15316</guid>
		<description><![CDATA[In this blog entry, my first since joining the company as a consultant a little over a month ago, I will be taking you through the process of embedding a D3 visualisation into OBIEE. In my first few weeks in this new role I&#8217;ve had the pleasure or working with the forward thinking people at Nominet and [...]]]></description>
				<content:encoded><![CDATA[<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></p>
<p style="font-family: Arial"><span style="font-family: Arial">In this blog entry, my first since joining the company as a consultant a little over a month ago, I will be taking you through the process of embedding a D3 visualisation into OBIEE. In my first few weeks in this new role I&#8217;ve had the pleasure or working with the forward thinking people at <a href="http://www.nominet.org.uk/">Nominet</a> and one of the technologies they&#8217;ve exploited in their BI solution is D3. They are using it to display daily domain name registrations&#8217; by postcode on a map of the UK within OBIEE- very cool stuff indeed and after seeing it I was sufficiently inspired to have a go myself. We&#8217;ll start with an overview of D3 itself and then move onto a worked example where we will look at why you may want to use D3 in OBIEE and the best way to go about it. This blog entry is not intended to be a D3 tutorial, there are plenty of very good tutorials out there already, this is more targeted at OBIEE developers who may have heard of D3 but haven&#8217;t yet had a &#8220;play&#8221; ( yes, it&#8217;s great fun ! ) with it yet in the context of OBIEE. So without further delay let&#8217;s begin…..</span></p>
<p style="font-family: Arial"><strong><span style="font-family: Arial">What is D3 ?</span></strong></p>
<p style="font-family: Arial"><span style="font-family: Arial">To answer this question I will first tell you what D3 isn&#8217;t &#8211; D3 is not a charting library, you will find no predefined bar charts, no line graphs, no scatter plots, not even a single pie chart. &#8220;What no pie charts ?!&#8221; I here you say, don&#8217;t despair though, you can create all these types of visuals in D3 and a whole lot more. D3 which is short for &#8220;Data-Driven Documents&#8221; is a visualisation framework written entirely in JavaScript by <a href="http://bost.ocks.org/mike/" rel="author">Michael Bostock</a>. The term framework is the key word here, D3 is generic in nature which allows it to tackle almost limitless visualisation challenges. The downside though is that you have to tell D3 exactly what you want it to do with the data you throw at it and that means rolling up your sleeves and writing some code. Fear not though, D3 has a great API that will enable you to get a fairly basic visual up and running in a short space of time. You&#8217;ll need a basic understanding of HTML, CSS and SVG and of course some JavaScript but with the help of the online tutorials and the D3 API reference you&#8217;ll be up and running in no time.</span></p>
<p style="font-family: Arial"><span style="font-family: Arial"><strong>How does it work ?</strong></span></p>
<p style="font-family: Arial"><span style="font-family: Arial">D3&#8242;s API allows you to bind data to place holders in the browser&#8217;s DOM. You can then create SVG or HTML elements in these place holders and manipulate their attributes using the dataset you pass to it. Below is the code to display a very simple D3 visualisation to give you a basic idea of how it works.</span></p>
<pre><span style="font-family: 'Courier New'">
var dataset = [ 10, 15, 20 ];                    

var svg = d3.select("body")               
               .append("svg")                                    
               .attr("width", 200) 
               .attr("height", 200); 

svg.selectAll("circle") 
               .data(dataset) 
               .enter() 
               .append("circle") 
               .attr("fill","none") 
               .attr("stroke", "green") 
               .attr("r",function(d){  
                    return d ; 
               }) 
               .attr("cy",100)
               .attr("cx",function(d){ 
                    return d * 8; 
               });</span></pre>
<p>This code produces the following visual, admittedly this is not very impressive to look at but for the purpose of this example it will do just fine.</p>
<p style="text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_circles.png" width="182" height="95" border="0" /></p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></p>
<p style="font-family: Arial">Let&#8217;s break this down and see what&#8217;s going on.</p>
<div style="font-family: Arial"></div>
<pre style="font-family: Arial"><span style="font-family: 'Courier New'">var dataset = [ 10, 15, 20 ];</span><span style="font-family: 'Courier New'"> </span></pre>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Above is our data in a JavaScript array, no D3 here. We&#8217;ll look at how to generate this from OBIEE a bit later on.</p>
<div style="font-family: Arial"></div>
<pre><span style="font-family: 'Courier New'">var svg = d3.select("body") 
               .append("svg")                                    </span>
<span style="font-family: 'Courier New'">               .attr("width", 200) </span>
<span style="font-family: 'Courier New'">               .attr("height", 200); </span></pre>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Here we are seeing D3 for the first time. This is a single line of code split over several lines so it&#8217;s easier to read. Anyone familiar with jQuery will notice the chaining of methods with the &#8220;.&#8221; notation. The first line selects the html body tag and then appends an SVG element to it. The two &#8220;.attr()&#8221; methods then set the width and the height of the SVG.</p>
<pre> <span style="font-family: 'Courier New'">svg.selectAll("circle") </span>
<span style="font-family: 'Courier New'">               .data(dataset) </span>
<span style="font-family: 'Courier New'">               .enter() </span>
<span style="font-family: 'Courier New'">               .append("circle") </span>
<span style="font-family: 'Courier New'">               .attr("fill","none") </span>
<span style="font-family: 'Courier New'">               .attr("stroke", "green") </span>
<span style="font-family: 'Courier New'">               .attr("r",function(d){  </span>
<span style="font-family: 'Courier New'">                    return d ; 
               }) </span>
<span style="font-family: 'Courier New'">               .attr("cy",100)</span>
<span style="font-family: 'Courier New'">               .attr("cx",function(d){ </span>
<span style="font-family: 'Courier New'">                    return d * 8; </span>
<span style="font-family: 'Courier New'">               }); </span></pre>
<p style="font-family: Arial">Here&#8217;s where it gets interesting. The first line selects all circles within the SVG, but wait, we haven&#8217;t created any circles yet ! this is where the the place holders come into play that I mentioned earlier. These place holders exist in memory only and are waiting to have data bound to them and then finally an actual circle element. The next line binds the data to the place holders, 10 to the first one, 15 to the next and 20 to the last. The magic .enter() method will then execute all the remaining statements once for each of our data elements, in this case 3 times. The .append(&#8220;circle&#8221;) will therefore be called 3 times and create 3 circle elements within the SVG.</p>
<p style="font-family: Arial">The remaining statements will change attributes associated with the circles and this is where you can use the data to &#8220;drive&#8221; the document. Notice the attr(&#8220;r&#8221;… and the attr(&#8220;cx&#8221;… method calls, The &#8220;r&#8221; attribute defines the circle radius and the &#8220;cx&#8221; attribute sets the centre &#8220;x&#8221; coordinate of the circle. Both these methods have functions passed as arguments, the &#8220;d&#8221; variable in each function represents the current data element  (or datum) in the array, 10 the first time, 15 the next and 20 on the last. These functions then return a value to the attr() methods. In this case the radius of each circle is being set to 10,15 and 20 respectively and the x coordinate of each is being set to 80, 120, 160 respectively.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Right, that&#8217;s a basic overview of D3 and how it works, let&#8217;s now have a look at an example where you might want to use D3 in OBIEE.</p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial"><strong>A Worked Example</strong></p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Let&#8217;s say we have some customers and each month, with a bit of luck ( and with the help of a Rittmanmead implemented BI system ! ) we sell to those customers. Based on the sales total for each customer each month we then place these customers into a scoring group. Group 1 for customers for which revenue exceeded £10,000, Group 2 for revenue greater than £5,000, Group 3 for revenue greater than £2,000 and Group 4 for revenue greater £0. At the end of each month we want to compare each customers current scoring group with the scoring group they occupied the previous month. It&#8217;s the movement of customers between groups each month that we are interested in analysing.</p>
<p style="font-family: Arial">Here&#8217;s the criteria we have in OBIEE Answers.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_criteria.png" width="483" height="64" border="0" /></p>
<p style="font-family: Arial">And here are the results.</p>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_results.png" width="338" height="405" border="0" /></p>
<div style="font-family: Arial"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></div>
<p style="font-family: Arial"><br class="Apple-interchange-newline" />As you can see the Movement column is  calculated as  (<em> Group Last Month</em> &#8211; <em>Group This Month</em> ).</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Now at this point you might say &#8220;Job done, nothing more to do&#8221;, we can clearly see this months and last months scoring group and the movement between the two, we have successfully conveyed the information to the user with minimal fuss and you&#8217;d be right. We could even develop the results further by conditionally formatting the colour of each row to reflect the current group and maybe we could add an additional column that contains an up arrow, down arrow or equals sign image to indicate the direction of movement. This is where it gets subjective, some users love visuals, some prefer the raw data and some the combination of the two. For this example we are going to try and visualise the data and you can make up your mind which you prefer at the end.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Lets see what we can produce using some standard OBIEE visuals.</p>
<p style="font-family: Arial">First up the Vertical Bar Chart</p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_graph1.png" width="600" height="366" border="0" /></p>
<p style="font-family: Arial">That&#8217;s not bad, we can see by how many groups a customer has shifted since last month with some customers clearly staying put. What we can&#8217;t see is from which groups they moved to and from, if we were to add in the <em>Group Last Month</em> and <em>Group This Month</em> measures to the chart it would look a complete mess.</p>
<div style="font-family: Arial">
<p style="font-family: Arial">Lets try something else, let&#8217;s try a line graph only this time we&#8217;ll include all three measures to make sure we&#8217;ve got all the information the user requires.</p>
</div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_graph2.png" width="600" height="311" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></div>
<p style="font-family: Arial">Mmmm, again not bad but to my mind it&#8217;s not particularly intuitive, you have to study the graph to get the information you&#8217;re after by which time most users will have switched off completely and may be better off a simple table view.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Lets have try again with a combined line and bar chart</p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_graph.png" width="600" height="339" border="0" /></p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">A slight improvement on the previous attempt but still not great. An issue I have with the last 2 examples is that to my mind customers in Group 1 ( the best group ) should be at the top of the chart while customers in Group 4 should be at the bottom of the chart &#8211; the cream rises to the top, right ?! We have no way of inverting the Y axis values so we are stuck with this rather counterintuitive view of the data. We could ask the users if they could would kindly change their grouping system but it&#8217;s unlikely they&#8217;ll agree and anyway that would be cheating !</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Here&#8217;s one last attempt just for fun !</p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/NewImage21.png" width="600" height="318" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></div>
<p style="font-family: Arial">Nope, we&#8217;re not making much progress here, this is just making me feel nauseous and believe me when I tell you I came up with several more ridiculous solutions than this, pie chart anyone ? So far the table view has been the clear winner over the visualisations in terms of ease of interpretation and this isn&#8217;t a dig at OBIEE&#8217;s visuals, OBIEE&#8217;s visual&#8217;s are great at doing what they are designed to do and they do it quickly. A D3 solution will take time and planning ( and debugging ) but you will have total control over the output and you&#8217;ll be able to express your data in a way that no OBIEE visualisation will ever be able to do. So with that in mind let&#8217;s have a look at <em>one</em> possible solution written in D3.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial"><strong>Developing a D3 Solution</strong></p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">In order to embed a D3 visualisation in OBIEE you&#8217;ll need to use a Narrative view. The Narrative view will enable you to gain access to the data that we need to drive our visualisation using the @n substitution variables where n equals the column position in the criteria. We&#8217;ll use this technique to generate some JavaScript from our analysis results that we can then use in our D3 script. Let&#8217;s look at doing that now.</p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/d3_narrative1.png" width="600" height="433" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">In the Prefix section at the top we are declaring a JavaScript array variable called &#8220;data&#8221; that will contain the data from the analysis. The Narrative section contains the following code</p>
<div style="font-family: Arial">
<div style="font-family: Arial"></div>
<pre style="font-family: Arial"><span style="font-family: 'Courier New';font-size: 12px">data.push({customer:"@1",prev_group:@2,cur_group:@3,delta:@4});</span></pre>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Because this line of code is in the narrative section it will be output once for each row in the result set, each time substituting @1, @2, @3 and @4 for <em>Customer</em>, <em>Group Last Month</em>, <em>Group This Month</em> and <em>Movement</em> respectively and will dynamically generate the JavaScript to populate our array.  <span style="font-family: Arial">Notice that within the parentheses we have this format </span></p>
<pre style="font-family: Arial"><span style="font-family: Arial">{ key:value, key:value, key:value } </span></pre>
<p style="font-family: Arial"><span style="font-family: Arial">This will in fact create a JavaScript object for us in each array element so we can then reference our data in our D3 script by using <em>data.customer</em>, <em>data.prev_group</em> and data.delta to get at the values. </span>As you can see below the postfix section we now have a load of JavaScript code ready to be used in our D3 script for testing and development purposes.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">At this point I would strongly recommend leaving OBIEE and opening up your favourite development IDE, you will soon get frustrated writing JavaScript code directly into OBIEE. Personally I like <a href="https://netbeans.org/">NetBeans</a> but there are several other free alternatives out there.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">To get started in your favourite IDE you can either download a copy of the D3 library from <a href="http://d3js.org/">http://d3js.org/</a> or reference the online version from within your script. I&#8217;d recommend uploading a copy to the OBIEE server once you&#8217;ve finished developing and are ready to go into production. If you want to reference the online version you will need to include the following snippet between the &lt;head&gt;&lt;/head&gt; tags in your html file.</p>
<div style="font-family: Arial"></div>
<pre style="font-family: Arial"><span style="font-family: 'Courier New';font-size: 12px">&lt;script src="<a href="http://d3js.org/d3.v3.min.js">http://d3js.org/d3.v3.min.js</a>" charset="utf-8"&gt;&lt;/script&gt;</span></pre>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">So to start developing your D3 solution create a new HTML project in your IDE. Add a reference to the D3 library and then copy and paste the generated JavaScript code from the OBIEE narrative between some &lt;script&gt; tags. You should end up with something like this:-</p>
</div>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/NewImage18.png" width="600" height="419" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">You are now ready to make a start, simply save the project and open up the resulting HTML file in your favourite browser to test any changes you make along the way.</p>
<div style="font-family: Arial">
<p style="font-family: Arial">When you are ready to embed the finished code into OBIEE you&#8217;ll first need to decide from where you wish to reference the D3 Library and the D3 Code you have just written. With regards to the D3 library as I mentioned earlier you can either reference the online version of the D3 library or copy the library to the OBIEE server and reference it from there. With the custom D3 code you&#8217;ve written you can again either upload the code to a file on the OBIEE server or you can just copy and paste your code directly into the narrative. I&#8217;d recommend uploading it to the OBIEE server so you can reference it in other analyses at a later date but for now let&#8217;s just paste it in.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">Lets have a look at the completed Narrative View.</p>
</div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/NewImage16.png" width="600" height="363" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--></div>
<p style="font-family: Arial">The First thing to note is that the &#8220;Contains HTML Markup&#8221; checkbox is ticked, this is required as we have now entered some &lt;script&gt; tags and a &lt;div&gt; tag and without this ticked OBIEE will not interpret them correctly. The first &lt;script&gt; tag in the prefix section is referencing the online D3 library. The second &lt;script&gt; tag in the prefix section is closed at the start of the postfix section and wraps around the &#8220;data&#8221; variable and the JavaScript used to populate it. Below the closing &lt;/script&gt; tag in the postfix section we are creating a HTML DIV element that will contain the SVG created by the D3 script. Finally we either enter a reference to our custom D3 script on the OBIEE server or just paste it in between script tags. One important thing to note is that when we transfer the code from our IDE to OBIEE we only want to bring across the D3 code, we want to leave behind the &#8220;data&#8221; variable and all the html tags as OBIEE will be generating these for us.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">So lets take a look at the solution written in D3.</p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial;text-align: center"><img class="aligncenter" style="border: 0px none" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/NewImage19.png" width="600" height="552" border="0" /></p>
<div style="font-family: Arial"></div>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">As you can see this contains all the information we require. We can clearly see the current group that the customer occupies and the movement, if any, from the group they occupied the previous month. This could easily be enhanced so that when you hover your mouse over a customer the raw data is presented to the user in some way, you&#8217;d simply need to change the narrative section to include a new column from the criteria and the then write the required code in D3 to display it &#8211; you really are only limited by your imagination. It may take more time and effort to produce a D3 solution over using a standard OBIEE visual and yes, as with all customisations, you are exposed from a risk point of view when it comes to upgrades and when the person who developed the solution decides to go travel the world but for these edge cases where you just can&#8217;t get the right result using a standard OBIEE visual, D3 may just save your bacon.</p>
<p style="font-family: Arial">Below is a live demo of the visualisation outside of OBIEE, it is seeded from random data each time you press the reload button.</p>
<p style="font-family: Arial">It&#8217;s been tested in Firefox, Chrome, Safari and IE9. IE versions 8 and below do not natively support SVG although there are various <a title="workarounds" href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics#Support_for_SVG_in_web_browsers">workarounds</a>, none of which have been implemented in this example.</p>
<div style="font-family: Arial;text-align: center"></div>
<p style="font-family: Arial;text-align: left">
<!-- iframe plugin v.2.7 wordpress.org/plugins/iframe/ -->
<iframe src="http://www.rittmanmead.com/wp-content/themes/rittman/d3/d3demo.html" height="450" scrolling="no" width="100%" class="iframe-class" frameborder="0"></iframe></p>
<div style="font-family: Arial"></div>
<p style="font-family: Arial">And here&#8217;s a link to the code on jsfiddle.net so you can have a play with it yourself. <a href="http://jsfiddle.net/TomUnderhill/qjh2D/">D3 Demo</a></p>
<p style="font-family: Arial">So in closing here are some tips around developing D3 in OBIEE.</p>
<div>
<ul>
<li><span style="font-family: Arial">Try to sketch out on paper what you want your D3 solution to look like and then try a replicate it with code ( the fun bit ! ).</span></li>
<li><span style="font-family: Arial">Head over to <a href="http://d3js.org/">d3js.org</a> for some inspiration, there are some truly mind blowing examples on there. </span></li>
<li><span style="font-family: Arial">Use the Narrative view to generate some hard coded data, you can then use it for development and testing purposes.</span></li>
<li><span style="font-family: Arial">Don&#8217;t develop directly in OBIEE, use a purpose build development IDE</span></li>
<li><span style="font-family: Arial">Once you&#8217;re ready to go into production with your solution upload the D3 library and your custom code to the OBIEE server and reference it from there.</span></li>
</ul>
<p><span style="font-family: Arial">Have fun….</span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/06/embedding-a-d3-visualisation-in-obiee/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using OBIEE SampleApp 305 in VM Fusion</title>
		<link>http://www.rittmanmead.com/2013/06/using-obiee-sampleapp-305-in-vm-fusion/</link>
		<comments>http://www.rittmanmead.com/2013/06/using-obiee-sampleapp-305-in-vm-fusion/#comments</comments>
		<pubDate>Wed, 12 Jun 2013 19:32:46 +0000</pubDate>
		<dc:creator>Robin Moffatt</dc:creator>
				<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[init.d]]></category>
		<category><![CDATA[sampleapp]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[virtualbox]]></category>
		<category><![CDATA[vm fusion]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15059</guid>
		<description><![CDATA[Oracle distribute the new OBIEE SampleApp as a VirtualBox image, but it is dead easy to run it on VM Fusion instead. Here’s how: Unzip the SampleApp archive files, and import the OVF to VM Add and amend network adaptors if required. I always use three: a host-only network private to my Mac and any [...]]]></description>
				<content:encoded><![CDATA[<p>Oracle distribute the new <a href="http://www.oracle.com/technetwork/middleware/bi-foundation/obiee-samples-167534.html">OBIEE SampleApp</a> as a VirtualBox image, but it is dead easy to run it on VM Fusion instead. Here’s how:</p>
<ol>
<li><strong>Unzip</strong> the <a href="http://www.oracle.com/technetwork/middleware/bi-foundation/obiee-samples-167534.html">SampleApp archive files</a>, and <strong>import the OVF</strong> to VM</li>
<li>Add and amend network adaptors if required. I always use three:
<ul>
<li>a host-only network private to my Mac and any other VMs running</li>
<li>NAT</li>
<li>Bridged</li>
</ul>
<p>. The first means I can always work with the VM from my Mac (SSH, web, etc) regardless of external network changes. The second two, NAT and Bridged, cover internet access out from the VM (software updates, etc) for 95% of situations.</p>
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_01.png" width="500"/></figure>
</li>
<li>Boot up. Expect to get X server error (because VMWare has a different video driver to VirtualBox). Keep selecting No, until you get to the console<br />
<figure><img class="aligncenter" alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_02.png" width="600" /></figure>
</li>
<li>Login as root/root<br />
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_03.png" width="600"/></figure>
</li>
<li>Remove the VirtualBox additions services:
<ol>
<li>List the VirtualBox additions services
<pre><code>chkconfig --list|grep vbox
</code></pre>
</li>
<li>Disable VirtualBox additions, as root:
<pre><code>chkconfig --list|grep vbox|awk '{print $1}'|xargs -I'{}' chkconfig --del {}
</code></pre>
</li>
<li>Confirm they’ve been removed:
<pre><code>chkconfig --list|grep vbox
</code></pre>
</li>
</ol>
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_04.png" width="600"/></figure>
</li>
<li>Install VM Tools
<ol>
<li>Select “Update VMWare Tools” from VM Fusion menu</li>
<li>Mount the CD image on the guest
<pre><code>mkdir /media/cdrom
mount /dev/cdrom /media/cdrom
</code></pre>
</li>
<li>Copy the installer to the guest
<pre><code>cp /media/cdrom/VMwareTools*.tar.gz /tmp
</code></pre>
</li>
<li>Unpack the installer
<pre><code>cd /tmp
tar xf VMwareTools*.tar.gz
</code></pre>
</li>
<li>Run the installer. Go with all the defaults given.
<pre><code>cd vmware-tools-distrib/
./vmware-install.pl
</code></pre>
</li>
<li>Reboot the VM.
<pre><code>reboot
</code></pre>
</li>
<li>On reboot, the VM should startup to the graphical (GNOME) Desktop<br />
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_06.png" width="600"/></figure>
</li>
</ol>
</li>
</ol>
<h2 id="pimpmyserver">Pimp my server</h2>
<p>This is all optional, but steps I run on a new server instance to get it how I like it:</p>
<ol>
<li>Open a terminal window and run setup
<pre><code>sudo setup
</code></pre>
<p>From here you can amend setting for things such as the keyboard layout, timezone, and networking. You can also use the desktop GUI tools to do this if you prefer</p>
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_05.png" width="600"/></figure>
</li>
<li>Add your public SSH key to <code>~/.ssh/authorized_keys</code> to enable connecting over SSH without entering a password each time</li>
<li>Create <code>~/.screenrc</code> (<code>screen</code> is already installed on SampleApp. See <a href="http://www.rittmanmead.com/2012/05/screen-and-obiee/">this post</a> for details of what screen is and why it is so useful).
<pre><code>hardstatus alwayslastline "%{= RY}%H %{kG}%{G} Screen(s): %{c}%w %=%{kG}%c  %D, %M %d %Y  LD:%l"
startup_message off
msgwait 1
defscrollback 100000
nethack on
</code></pre>
<figure><img alt="" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/sa_07.png" width="600"/></figure>
</li>
<li>Add EPEL yum repository:
<pre><code>wget http://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
sudo rpm -i epel*.rpm
</code></pre>
</li>
<li>Update all packages
<pre><code>sudo yum update -y
</code></pre>
</li>
<li>Set the OBIEE and DB instances to start automagically at bootup, using <a href="https://gist.github.com/rmoff/42e2faa0c71805c58712">init.d script such as these</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/06/using-obiee-sampleapp-305-in-vm-fusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New With OBIEE 11.1.1.7 and SampleApp v305 &#8211; Essbase Cube Spin-Off</title>
		<link>http://www.rittmanmead.com/2013/06/new-with-obiee-11-1-1-7-and-sampleapp-v305-essbase-cube-spin-off/</link>
		<comments>http://www.rittmanmead.com/2013/06/new-with-obiee-11-1-1-7-and-sampleapp-v305-essbase-cube-spin-off/#comments</comments>
		<pubDate>Wed, 12 Jun 2013 13:32:22 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Hyperion Essbase]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15274</guid>
		<description><![CDATA[Now that the new v305 OBIEE SampleApp that we previewed in May is out,  I thought it&#8217;d be a good time to take a look at an experimental feature added into OBIEE 11.1.1.7&#8242;s logical SQL that gives you the ability to create, or &#8220;spin-off&#8221;, an entire Essbase cube from an OBIEE dashboard or RPD. If [...]]]></description>
				<content:encoded><![CDATA[<p>Now that the <a href="http://www.rittmanmead.com/2013/04/previewing-the-new-obiee-11-1-1-7-sampleapp/">new v305 OBIEE SampleApp that we previewed in May</a> is out,  I thought it&#8217;d be a good time to take a look at an experimental feature added into OBIEE 11.1.1.7&#8242;s logical SQL that gives you the ability to create, or &#8220;spin-off&#8221;, an entire Essbase cube from an OBIEE dashboard or RPD.</p>
<p>If you read my coverage of the new <a href="http://www.rittmanmead.com/2012/09/improvements-to-essbase-integration-in-obiee-11-1-1-6-2-bp1-aso-aggregate-persistence-combined-install-systems-management/">Essbase integration features in OBIEE 11.1.1.6.2</a> just over a year ago, you&#8217;ll remember that this release gave OBIEE the ability to persist aggregates to an Essbase ASO cube as well as regular Oracle, SQL Server or IBM DB/2 databases. This was impressive stuff but it came with one significant limitation: the Essbase ASO databases that the aggregate persistence wizard created contained just a single aggregation, for example sales by product category, month and customer type, rather than all levels and aggregations as you&#8217;d expect for a multi-dimensional database. The reason for this was obvious &#8211; this is how the aggregate persistence wizard worked with relational databases, and Oracle just took the same paradigm but allowed it to persist to Essbase as well as the various relational stores.</p>
<p>So fast-forward now to OBIEE 11.1.1.7, and the <a href="http://www.oracle.com/technetwork/middleware/bi-foundation/obiee-samples-167534.html">new v305 SampleApp</a> has an intriguing dashboard page within the &#8220;8.21 Oracle Essbase Interaction&#8221; dashboard called &#8220;Cube Spin Off&#8221;. What this page demonstrates is a kind of preview of where OBIEE is going in the future, where it&#8217;ll be easy for users to take data within a subject area, spin it off as an Essbase cube and then automatically report against it, enabling faster reporting and access to MDX functions, forecasts and so on. In this first iteration, put together by the SampleApp team to show off the new logical SQL &#8220;CREATE CUBE&#8221; command, we&#8217;ve got an example of a command that will spin-off the Essbase cube along with an analysis created against the result of that command.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-1.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/sshot-1.png" alt="Sshot 1" width="600" height="356" border="0" /></p>
<p>To create, or &#8220;spin-off&#8221; an Essbase cube using this command, cut and paste the logical SQL displayed in the analysis description, then select <strong>Administration</strong> &gt;<strong> Issue SQL</strong>, and then paste the logical SQL into the text box provided, like this:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-2.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/sshot-2.png" alt="Sshot 2" width="600" height="282" border="0" /></p>
<p>Note how I&#8217;ve bumped-up the logging level to 3, so I can take a closer look at what the BI Server does when I press the <strong>Issue SQL</strong> button.</p>
<p>Looking at the logical SQL command itself, what&#8217;s interesting is that it&#8217;s referencing logical dimension levels from the RPD in the command, rather than logical tables as would have been the case with the aggregate persistence wizard. Looking at the SampleApp v305 RPD in question, you can see that there&#8217;s more logical dimensions in total within this business model, so the logical SQL command can pick an arbitrary subset of the dimensions within the model, pick an arbitrary level to aggregate up from, and then pick one or more of the measures to create the cube definition.</p>
<p>Pressing the Issue SQL button, and then switching over to Essbase Administration Services (http://obieesample:9704/easconsole), you can see the Essbase database and application created by the CREATE CUBE logical SQL command.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-3.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/sshot-3.png" alt="Sshot 3" width="600" height="379" border="0" /></p>
<p>Looking at the database (cube) definition itself, you can see that it&#8217;s a BSO (Block Storage Option) database rather than the ASO type that the BI Administraton tool&#8217;s Aggregate Persistence Wizard creates, and its also set up to allow duplicate member names across dimensions and levels, something that&#8217;s usually required when building cubes against relational sources that don&#8217;t have this member name restriction.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-4.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/sshot-4.png" alt="Sshot 4" width="562" height="407" border="0" /></p>
<p>Looking back at the NQQuery.log file entries create by the logical SQL command, all you can see is the CREATE CUBE statement itself, like this:</p>
<p><code><br />
[2013-06-12T05:07:09.000-04:00] [OracleBIServerComponent] [TRACE:3] [USER-0] [] [ecid: 274d73ee2c4a9d00:42d39d4a:13f2e44ecb4:-8000-00000000000018c7] [tid: 2e497940] [requestid: 37b70014] [sessionid: 37b70000] [username: weblogic] ############################################## [[<br />
-------------------- SQL Request, logical request hash:<br />
c88166e2<br />
set variable LOGLEVEL = 3;CREATE CUBE "ESSCUBE2" for "B - Sample Sales Exa".."Base Facts"<br />
("2- Billed Quantity","11- Fixed Costs")<br />
AT LEVELS (<br />
"B - Sample Sales Exa".."Products"."Products Hierarchy"."Product",<br />
"B - Sample Sales Exa".."Time"."Time Hierarchy"."Month",<br />
"B - Sample Sales Exa".."Offices"."Offices Hierarchy"."Offices");<br />
/* QUERY_SRC_CD='rawSQL' */</p>
<p>]]<br />
</code></p>
<p>All of the complexity of the cube creation is abstracted away by the BI Server, with (presumably) the embedded Essbase Studio servlet used by the Aggregate Persistance Wizard also being used to define the Essbase database and load data into it.</p>
<p>When you open up the BI Administration too and view the repository that provided the source for the CREATE CUBE statement, what&#8217;s particularly impressive is that the new Essbase database has been mapped into the <strong>Physical</strong> layer of the repository, and then into the <strong>Business Model and Mapping</strong> layer as an LTS for the source logical tables, as the aggregate persistence wizard would do with regular, single-aggregation aggregate tables.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="sshot-5.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/sshot-5.png" alt="Sshot 5" width="600" height="386" border="0" /></p>
<p>Very interesting stuff, and presumably at some point it&#8217;ll be incorporated formally into the Aggregate Persistence Wizard UI rather than having to run it from a logical SQL script. I was warned also that this feature is &#8220;experimental&#8221;, so expect there to be issues, limitations etc, but it&#8217;s an interesting glimpse into what appears to be Oracle&#8217;s original vision for data mart automation in OBIEE &#8211; just press a button and your collection of mapped-in sources becomes the design for an Essbase cube load, with the cube then taking the place of the original sources within the RPD model.</p>
<p>Finally and on a similar topic, you can read about the <a href="http://www.rittmanmead.com/2013/04/essbase-and-epm-integration-improvements-in-obiee-11-1-1-7/">wider changes and improvements to Essbase integration in OBIEE 11.1.1.7</a> in my earlier post on this blog, as well as full details on the <a href="http://www.rittmanmead.com/2013/04/smartview-as-the-replacement-for-bi-office-with-obiee-11-1-1-7/">new SmartView integration in OBIEE 11.1.1.7</a> that also came along with this new release.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/06/new-with-obiee-11-1-1-7-and-sampleapp-v305-essbase-cube-spin-off/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MDS XML versus MUDE Part 2: What is MUDE?</title>
		<link>http://www.rittmanmead.com/2013/06/mds-xml2/</link>
		<comments>http://www.rittmanmead.com/2013/06/mds-xml2/#comments</comments>
		<pubDate>Mon, 03 Jun 2013 14:34:06 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[MDS XML]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[MUDE]]></category>
		<category><![CDATA[multiuser]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[RPD]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15124</guid>
		<description><![CDATA[Mark Rittman once joked during a presentation on OBIEE and SCM that &#8220;MUDE&#8221; (multiuser development environment) was the closest thing to a dirty word in the OBIEE documentation. I know many people who feel that way&#8230; some justified, some perhaps not, as MUDE has certainly gotten better in the later releases of OBIEE. As I [...]]]></description>
				<content:encoded><![CDATA[<p>Mark Rittman once joked during a presentation on OBIEE and SCM that &#8220;MUDE&#8221; (multiuser development environment) was the closest thing to a dirty word in the OBIEE documentation. I know many people who feel that way&#8230; some justified, some perhaps not, as MUDE has certainly gotten better in the later releases of OBIEE. As I mentioned in the <a title="MDS XML versus MUDE Part1: Introduction" href="http://www.rittmanmead.com/2013/05/mds-xml1/">introduction</a>, I&#8217;d like to introduce MUDE in this post to set the stage for, at the very least, how good a competing multiuser development methodology would need to be. I&#8217;m not a genuine fan of MUDE&#8230; but I promise not to present a straw man to rip apart in my later posts. If you feel I don&#8217;t give it a fair shake, please comment and let me know. If you are interested in some other thorough treatments around MUDE, <a title="Multi User Development of Repositories (MUD)" href="http://oraclebizint.wordpress.com/2008/03/27/oracle-bi-ee-101332-multi-user-development-of-repositories-mud/" target="_blank">Venkat wrote about it on his old blog</a> when the feature was first introduced in 10g, as did <a title="Testing the OBIEE 10.1.3.x Multi-User Development Environment" href="http://www.rittmanmead.com/2008/09/testing-the-obiee-1013x-multi-user-development-environment/" target="_blank">Mark here on this blog</a>.</p>
<p>Let me start by putting forth what I think are the SDLC (software development life-cycle) imperatives that any solution to metadata development (or any other kind of development) should tackle without question:</p>
<ol>
<li>Multiple users should be able to develop concurrently&#8230; but we need to be clear exactly what we mean by this. Having all the developers login to a shared online repository is one way to do multiuser development&#8230; but this equates to multiuser development using <em>serialized</em> access to objects. Whether explicit or not in the requirements&#8230; what most organizations want is <em>non-serialized</em> access to objects&#8230; meaning that multiple users can be making changes to the same objects at the same time, and we will be able to merge our changes together, and handle conflicts.</li>
<li>Our VCS should give us the ability to rollback to previous versions of our code, either for comparative purposes&#8230; or because we want to rewind certain streams of development because of &#8220;wrong turns&#8221;.</li>
<li>Our VCS and supporting methodology should provide us the ability to tag, secure and package up &#8220;releases&#8221;&#8230; to be migrated to our various environments eventually finding their way to production.</li>
</ol>
<p>So let&#8217;s see if MUDE is up to the challenge. To enable MUDE, I start by defining one or more <em>P</em><em>rojects</em> in my binary RPD. So, I open the RPD in the Admin Tool, choose the <em>Manage</em> option from the toolbar, and select <em>Projects…</em> from the drop-down list:</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude1.png"><img class="alignnone  wp-image-15137" alt="MUDE Manage Projects" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude1-1024x585.png" width="614" height="351" /></a></p>
<p>Next&#8230; I choose all the objects I want to include in the project. Our choice for which logical tables to include from the Business Model (BMM) is driven by which logical fact tables we choose, using either individual Presentation Subject Area measure folders, or explicit BMM logical fact tables. We also select any other objects we want to include in the project: explicit Presentation layer folders, init blocks, variables, etc.:</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude2.png"><img class="alignnone  wp-image-15140" alt="MUDE Define Project" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude2-1024x697.png" width="614" height="418" /></a></p>
<p>Once we have configured one or more projects in the repository, we then take the binary RPD file and place it on a network share accessible to all developers. From here on out, the RPD file is referred to as the <em>M</em><em>aster Repository</em>. Now, whenever we want to check out a project from the Master Repository, we register the shared network drive location in the Admin Tool. We get to the configuration screen by choosing <em>Tools</em> and then <em>Options&#8230;</em> and then choosing the <em>Multiuser</em> tab:</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude3.png"><img class="alignnone  wp-image-15142" alt="MUDE master location" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude3.png" width="401" height="474" /></a></p>
<p>Once a Master Repository exists in the development directory specified in the Admin Tool, we are then able to check out a project from the Master Repository. To check out a project, we choose the <em>File</em> menu, and from the drop-down menu, we select <em>Multiuser</em> and then <em>Checkout&#8230;</em> after that. Then we choose the project we want to checkout:<br />
<em></em></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude4.png"><img class="alignnone  wp-image-15144" alt="MUDE Multiuser Checkout" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude4-1024x532.png" width="614" height="319" /></a></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude5.png"><img class="alignnone  wp-image-15145" alt="MUDE Select Project" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude5.png" width="467" height="339" /></a></p>
<p>The Admin Tool now prompts us to create a new &#8220;subset repository&#8221;. This is a fully-functioning binary RPD file containing only the subset of objects that were defined in the project. We can call this RPD anything we like&#8211;in my example I called it gcbc_project1.rpd&#8211;and it will exist in the &#8220;repository&#8221; directory buried in the <em>bifoundation</em> directory underneath our instance directory, for instance: [middleware_home]\instances\instance1\bifoundation\OracleBIServerComponent\coreapplication_obis1\repository:</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude6.png"><img class="alignnone  wp-image-15147" alt="MUDE Subset Repository" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/mude6-1024x747.png" width="614" height="448" /></a></p>
<p>Once we have checked out our project, it&#8217;s interesting to see the files that the Admin Tool generates behind the scenes to manage MUDE. If we look in the Master Repository directory (this was the C:\master directory we configured in the screenshot above), we should have the following files:</p>
<ul>
<li><strong>gcbc.rpd</strong>: The original Master Repository binary RPD file</li>
<li><strong>gcbc.000</strong>: A backup of the Master Repository RPD file. We will constantly see new versions of the backup file as development continues on the Master Repository, and we&#8217;ll see the numeric extension increment over time.</li>
<li><strong>gcbc.mhl</strong>: The history file&#8230; this tracks all the history of changes, when they were performed, and by whom. This file can be output to an XML file using the <em>mhlconverter</em> utility so that it&#8217;s readable without the Admin Tool.</li>
</ul>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude7.png"><img class="alignnone  wp-image-15173" alt="Master Repository Directory Contents" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude7.png" width="524" height="128" /></a></p>
<p>Now, if we look in our local repository directory, we have the following files:</p>
<ul>
<li><span style="line-height: 13px"><strong>gcbc_project1.rpd</strong>: The subset binary RPD file we created when we checked out our project above.<br />
</span></li>
<li><strong>originalgcbc_project1.rpd</strong>: Initially&#8230; this is an exact copy of the subset binary RPD at the time of checkout. It will not be affected by changes to the actual subset RPD, as it&#8217;s purpose is to serve as the &#8220;original&#8221; copy of the RPD during the 3-way merge. Also&#8230; it facilitates the <em>Discard Local Changes</em> options in the <em>Multiuser</em> menu option.</li>
</ul>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude8.png"><img class="alignnone  wp-image-15175" alt="MUDE Repository Directory Inventory" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude8.png" width="538" height="97" /></a></p>
<p>In looking at this infrastructure&#8230; there&#8217;s nothing magic happening here: MUDE simply uses the basic functionality of the <em>Merge&#8230;</em> and the <i>Compare&#8230;</i> that are built into the Admin Tool. I&#8217;m not saying this disparagingly. There&#8217;s no reason to maintain the code path for two different versions of a 3-way merge. MUDE is really nothing more than a framework for making the <em>Compare&#8230;</em> and <em>Merge&#8230;</em> functionality easier and more predictable. So, it&#8217;s not shocking when we choose <em>Compare with Original&#8230;</em> from the <em>Multiuser</em> menu and see a screen identical to the basic <em>Compare&#8230;</em> option without MUDE:</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude9.png"><img class="alignnone  wp-image-15179" alt="MUDE Compare with Original" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude9-1024x608.png" width="614" height="365" /></a></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude10.png"><img class="alignnone  wp-image-15181" alt="MUDE Compare Differences" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude10-1024x686.png" width="614" height="412" /></a></p>
<p>Similarly, when we choose the multiuser option <i>Publish to Network&#8230;</i> we see a window identical to the standard <em>Merge&#8230;</em> option in the Admin Tool:<i><br />
</i></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude18.png"><img class="alignnone  wp-image-15183" alt="MUDE Publish Conflicts" src="http://www.rittmanmead.com/wp-content/uploads/2013/06/mude18-1024x684.png" width="614" height="410" /></a></p>
<p>So this was a high-level look at MUDE&#8230; hopefully I&#8217;ve done it justice. Now I&#8217;d like to discuss where I think MUDE comes up short as a competent VCS, or SCM&#8230; or whatever solution we think it is. On our list of the three imperative boxes that a metadata development solution should tick, I think number <strong>(1)</strong> is a slam-dunk. Although there have been issues with MUDE&#8230; almost every BI or ETL tool I&#8217;ve worked with over the years has issues in this area. I think there is also a fair argument to be made that MUDE also ticks the boxes for <strong>(2)</strong> and <strong>(3)</strong>. But is it complete enough in the areas?</p>
<p>Although MUDE provides us the ability to interact with previous versions of our code, it does this with a &#8220;siloed&#8221;, metadata-only approach. If I were building an entire BI solution, I would want to associate my metadata repository with my web catalog, and also presumably with my database DDL scripts and ETL routines, regardless of which tool I used for that. MUDE only handles the RPD. If I could somehow figure out how to use a standard VCS such as Git or Subversion to check in <em>all</em> my code into one place, then I could see how everything looked at a particular point in time. The same goes with tagging and packaging releases. MUDE makes it easy to prepare a binary RPD file for release, but it provides no benefit when it comes to packaging a release for the entire BI system. I want a more pervasive solution.</p>
<p>I also think MUDE misses the mark with the conflict resolution workflow, which is depicted in the screenshot directly above. The <em>Define Merge Strategy</em> dialog occurs for individual developers when they try to publish changes back to the Master Repository. I would argue that the handling of conflicts should not be the developer&#8217;s job. Suppose I add the logical column <em>% of Discount</em> to a logical fact table as depicted above. If my change conflicts with a change from another developer a continent away, am I really in a position to be able to determine the appropriate conflict resolution at that point in time? I may not even know the other developer&#8230; or understand why we are both making changes to the same logical column. So regardless of whether conflicts arise, developers should be able to &#8220;publish&#8221; their changes to be resolved downstream by the <em>source master</em>. This source master role may be a part-time or full-time role&#8230; but this is the person whose job it is to resolve conflicts. So our SDLC solution needs to support the decoupling of multiuser conflict resolution from the development process.</p>
<p>In the next post, I&#8217;m going to take a look at the combination of MDS XML and Git. I&#8217;ll talk a little bit about Git, and why it&#8217;s superior to Subversion for our purposes. I&#8217;ll see if this combination can tick all the right boxes I described above.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/06/mds-xml2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MDS XML versus MUDE Part1: Introduction</title>
		<link>http://www.rittmanmead.com/2013/05/mds-xml1/</link>
		<comments>http://www.rittmanmead.com/2013/05/mds-xml1/#comments</comments>
		<pubDate>Wed, 29 May 2013 01:09:45 +0000</pubDate>
		<dc:creator>Stewart Bryson</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[MDS XML]]></category>
		<category><![CDATA[MUDE]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=14539</guid>
		<description><![CDATA[This is my first blog post in quite a while&#8230; mostly because of all the planning and preparation that went into the Rittman Mead BI Forum, which is now sadly behind us. There&#8217;s been a lot of other activity around Oracle BI as well. Of course, we had OBIA 11.1.1.7.1 PS1 release recently, and this has [...]]]></description>
				<content:encoded><![CDATA[<p>This is my first blog post in quite a while&#8230; mostly because of all the planning and preparation that went into the Rittman Mead BI Forum, which is now sadly behind us. There&#8217;s been a lot of other activity around Oracle BI as well. Of course, we had <a title="Introduction to the BI Apps 11.1.1.7.1 – Release Overview" href="http://www.rittmanmead.com/2013/05/introduction-to-the-bi-apps-11-1-1-7-1-release-overview/" target="_blank">OBIA 11.1.1.7.1 PS1 release recently</a>, and this has us very busy internally, preparing for our first implementation, and thinking about what the training course will look like. Mark covered the subject very well&#8230; but still expect something from me on the new OBIA in the not-so-distant future. I&#8217;ve also been busy with my upcoming <a title="Kscope 13 in New Orleans" href="http://kscope13.com" target="_blank">Kscope New Orleans</a> presentations. <a title="Look Smarter Than You Are" href="http://looksmarter.blogspot.com" target="_blank">Edward Roske</a> and I have a 2-hour, double-room presentation on Essbase and OBIEE integration; I have an OBIEE and Data Vault presentation that I&#8217;m presenting with <a title="The Oracle Data Warrior Blog" href="http://kentgraziano.com">Kent Graziano</a>; and then, I have my only solo presentation concerning MDS XML versus MUDE as a way of doing multi-user RPD development.</p>
<p>I presented on the MDS XML topic already at <a title="Collaborate 13" href="http://collaborate13.ioug.org" target="_blank">Collaborate 13</a> this year, and what I noticed from discussions with the attendees is that most users don&#8217;t understand where this feature fits in. Honestly&#8230; I wasn&#8217;t too sure myself when the feature was first released, so I thought I would take a look and see how organizations might use it. I was planning on addressing Aggregation next on the blog (a subject I recently spoke on at Collaborate as well), but the MDS XML subject seems to have more momentum&#8230; so here we go.</p>
<p>If you aren&#8217;t aware of what MDS XML is, or if you have an idea, but are still throwing your hands in the air, then let me try to explain first what it is. The OBIEE (and Siebel Analytics, and nQuire before that) metadata repository file has always been binary&#8230; that single RPD file that we deploy to the BI Server. But a single, monolithic binary file is a problematic solution for the OBIEE metadata layer&#8230; just as it is problematic for almost any deployment large or small. Microsoft faced a <a title="Office Open XML" href="http://en.wikipedia.org/wiki/Office_Open_XML">similar crossroads</a> not so long ago with Office file formats: the world wanted non-binary, and at that time, XML was king. So Microsoft launched a file-format conversion project to produce a resulting Office file format based on XML and open standards (or at least&#8230; as open as Microsoft can allow itself).</p>
<p>The paramount issue with binary files in any technology project is their difficulty integrating with version control systems (VCS). Most of the efficiency capabilities of these systems, from merging functionalities, to cheap delta copies, revolves around the ability to do basic text diff&#8217;ing. We immediately lose all of this functionality when working with a binary file. But even a monolithic text file would be difficult to manage as well because it becomes impossible to track the granular changes made to individual objects. So what we&#8217;ve needed in OBIEE is the ability to store our repository as a collection of granular text documents, using a recognized format (such as XML) and having them all act together to form our metadata definition.</p>
<p>We have that capability now with the MDS XML feature in the Admin Tool. Whenever we &#8220;Create&#8221; a repository, &#8220;Open&#8221; a repository, or &#8220;Copy|Save As&#8221; a repository, we have the option to work instead with a directory of XML files using Oracle&#8217;s standard MDS format.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml0.png"><img class="alignnone  wp-image-15105" alt="xml0" src="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml0.png" width="613" height="335" /></a></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml1.png"><img class="alignnone  wp-image-15097" alt="MDS XML Open" src="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml1.png" width="606" height="309" /></a></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml2.png"><img class="alignnone  wp-image-15100" alt="MDS XML Toolbar" src="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml2.png" width="608" height="309" /></a></p>
<p>The Admin Tool will ask us for a directory to serve as the &#8220;core&#8221; directory for the RPD&#8230; a container to hold all the subsequent subdirectories and individual XML files (I used &#8220;core&#8221; instead of &#8220;base&#8221; because there is actually a &#8220;base&#8221; subdirectory in the directory tree.) The core directory serves as the pointer to the RPD&#8230; we browse to this high-level directory when opening, creating or copying an RPD file stored in this way. In the below screenshot, the &#8220;gcbc&#8221; directory is the core directory I specified in the Admin Tool during metadata repository development.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml6.png"><img class="alignnone  wp-image-15108" alt="MDS XML Directory Contents" src="http://www.rittmanmead.com/wp-content/uploads/2013/04/xml6-948x1024.png" width="485" height="524" /></a></p>
<p>In the next few posts, I&#8217;ll examine this new file format and see what we can actually do with it. In all honesty, I put my first MDS XML abstracts forward at conferences before I even knew what was possible. I wanted to put this new feature through it&#8217;s paces and see what (if any) holes it filled in the current project delivery paradigm. In the next post, I&#8217;ll take a brief look at MUDE (I know, I&#8217;m sorry&#8230;) to see where the bar is currently set with repository multi-user development for OBIEE. After that, I&#8217;ll take MDS XML for a stroll along with the <a title="What is Git?" href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git version control system</a>&#8230; arguably the most powerful VCS to date. Finally, I&#8217;m planning on taking a look at what a delivery methodology might look like using Git&#8230; including RPD migration and rollout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/mds-xml1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Configuring SSL on OEID v3.0</title>
		<link>http://www.rittmanmead.com/2013/05/configuring-ssl-on-oeid-v3-0/</link>
		<comments>http://www.rittmanmead.com/2013/05/configuring-ssl-on-oeid-v3-0/#comments</comments>
		<pubDate>Tue, 28 May 2013 08:35:08 +0000</pubDate>
		<dc:creator>Farnaz Mostowfi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Oracle Endeca]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15041</guid>
		<description><![CDATA[Oracle Endeca Information Discovery (OEID) version 3.0 now supports secure connection over HTTP, something useful for when implementing Endeca in a production environment where its expected that all security risks been controlled. Sending requests and data over unsecured HTTP is generally considered one of the more higher-risk vulnerabilities, with the solution generally being to add [...]]]></description>
				<content:encoded><![CDATA[<p>Oracle Endeca Information Discovery (OEID) version 3.0 now supports secure connection over HTTP, something useful for when implementing Endeca in a production environment where its expected that all security risks been controlled. Sending requests and data over unsecured HTTP is generally considered one of the more higher-risk vulnerabilities, with the solution generally being to add SSL encryption to standard HTTP communications.</p>
<p>However, enabling SSL connections between different parts of the OEID package seems on the surface to be a bit tricky, since all communications with the Endeca Server are via web service calls; therefore, having the Endeca Server configured for SSL requires all other servers that connect to it to be updated and re-configured. In this blog post therefore I&#8217;m going to walk through a step-by-step guide on how to setup this feature, and how to ensure everything subsequently works correctly.</p>
<p><b>SSL configuration on Oracle WebLogic Server</b></p>
<p>All Weblogic domains will need to be ‘SSL enabled’ and the secure port should be defined.  This can be done as one of the steps in the ‘Fusion Middleware configuration Wizard’. To see the setting select the ‘<b>Administrator Server’</b> from the list, as shown in the screenshot below, when you reach this option point.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/011.png"><img class="wp-image-15042 aligncenter" alt="01" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/011.png" width="618" height="467" /></a></p>
<p>The next step is to check the ‘<b>SSL enabled</b>’ option and choose a ‘<b>SSL Listen Port</b>’.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/021.png"><img class="wp-image-15043 aligncenter" alt="02" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/021.png" width="618" height="467" /></a></p>
<p><b>Generate</b> <b>keys</b></p>
<p>The first step to configure SSL configuration between different parts of OEID is to generate an SSL key, and then share it between them. A key generator script comes as part of the OEID Weblogic domain installation, and should be accessible on:</p>
<p><b>WebLogicInstallationpath/user_projects/Endeca_domain/EndecaServer/bin/generate_ssl_keys.sh</b></p>
<p>When running this script, the Endeca Server WebLogic Server needs to be running, and the script requires both credentials to access the Endeca server, and also an SSL passphrase.</p>
<p><b>Browser certification</b></p>
<p>As an OEID developer, you might want to check some web-service requests on your browser; for example, if you want to make sure the Endeca Server is up and running you can try requesting its WSDL document:</p>
<p><b>https://Endeca_server_host:Endeca_server_port/endeca-server/ws/manage?wsdl</b></p>
<p>Having the SSL configuration, you need to add SSL certificates to your browser in order to receive reply from the server.</p>
<p>Open your browser and go to its preferences page.  Go to Advanced &gt; Encryption tab and click on ‘view certificates’. This is the place that you will need to import the generated <b>esClientCert</b><b>.p12</b> file and private passphrase to.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/031.png"><img class="wp-image-15044 aligncenter" alt="03" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/031.png" width="618" height="581" /></a></p>
<p><b>Integrator Configuration</b></p>
<p>Integration configuration would be done in three areas; Integrator initial file, JRE variables and each graph component’s settings.</p>
<ul>
<li><b>Integrator.ini, </b>This files is by default in the root of the Integrator installation directory. Add following lines under &#8220;-vmargs&#8221;.</li>
</ul>
<p><b>         -Djavax.net.ssl.keyStore=yourcertkeystorefile.jks</b></p>
<p><b>         -Djavax.net.ssl.keyStorePassword=keystorepass</b></p>
<p><b>         -Djavax.net.ssl.trustStore=yourtruststorefile.jks</b></p>
<p><b>         -Djavax.net.ssl.trustStorePassword=truststorepass</b></p>
<ul>
<li><b>JRE Configuration, </b>Same variables should be added to the Integrator designer JRE. To do so open clover <b>Preferences</b> on <b>Window</b> menu. Under <b>Java</b>&gt; <b>Installed JREs </b>select the available jdk and click <b>Edit</b>. Add same option to ‘Default VM arguments’ and <b>Finish</b> the edit.</li>
</ul>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/041.png"><img class="wp-image-15045 aligncenter" alt="04" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/041.png" width="618" height="622" /></a></p>
<p><b>Components</b></p>
<p>Any graph component requesting a web-service call must be configured for SSL connection. Settings are not all the same and differ for each type. For a <b>WEB_SERVICE_CLIENT</b> component like below it is enough to make sure all calls are to a https address and the correct port has been defined. You’ll also need to <b>Disable SSL Certificate Validation</b>.</p>
<p>For a BULK ADD/REPLACE component it is enough to check <b>SSL Enabled</b> option.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/051.png"><img class="wp-image-15046 aligncenter" alt="05" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/051.png" width="618" height="476" /></a></p>
<p><b> </b></p>
<p><b>Endeca Studio Data Sources</b></p>
<p>Create a folder under default lifreay path/data and call it ‘<b>endeca-data-sources</b>’. All you need to do is to re-copy generated key-stores to the new folder.</p>
<p>As a result if you add the ssl passphrase to the data source definition in the Studio control panel, the definition should be correct and connect successfully.</p>
<p><b>Provisioning Service </b></p>
<p>In case of Provisioning Service, firstly copy key-stores to path to <b>Oracle Web-Logic/user-projects/domains/oracle.eid-ps/eidProvisioningConfig/</b></p>
<p>Secondly, go to the WebLogic Administration console. For the current server, enter the SSL passphrase in the key-stores and SSL configuration page, and then restart the server from the control page.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/061.png"><img class="wp-image-15047 aligncenter" alt="06" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/061.png" width="618" height="410" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/configuring-ssl-on-oeid-v3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Endeca Information Discovery v3.0 Integration with the OBIEE 11g BI Server</title>
		<link>http://www.rittmanmead.com/2013/05/oracle-endeca-information-discovery-v3-0-integration-with-the-obiee-11g-bi-server/</link>
		<comments>http://www.rittmanmead.com/2013/05/oracle-endeca-information-discovery-v3-0-integration-with-the-obiee-11g-bi-server/#comments</comments>
		<pubDate>Tue, 21 May 2013 14:17:00 +0000</pubDate>
		<dc:creator>Farnaz Mostowfi</dc:creator>
				<category><![CDATA[Oracle Endeca]]></category>
		<category><![CDATA[OBI Server]]></category>
		<category><![CDATA[OEID]]></category>
		<category><![CDATA[Oracle Endeca Information Discovery]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=14858</guid>
		<description><![CDATA[One of the first moves towards integrating Oracle Endeca Information Discovery (OEID) with other Oracle products is the ability to source data from an Oracle BI Server repository for loading into an Oracle Endeca Server “data domain” (the new name for an Endeca Server datastore).  As mentioned in my previous post, this functionality was initially [...]]]></description>
				<content:encoded><![CDATA[<p>One of the first moves towards integrating Oracle Endeca Information Discovery (OEID) with other Oracle products is the ability to source data from an Oracle BI Server repository for loading into an Oracle Endeca Server “data domain” (the new name for an Endeca Server datastore).  As mentioned in my previous post, this functionality was initially introduced in OEID version 2.4 and works much the same in the new version 3.0.</p>
<p>This feature is based around Oracle Endeca Integrator Designer (“Integrator” for short), the client part of Integrator Suit that is used to design data loading graphs and optionally run them, and uses a “template project” which allows users to connect to an Oracle BI Server, run a select-query and then load repository data into an Endeca Server data domain. Some data domain attribute and indexing settings will also be configured, so that guided navigation and attribute/record search within Endeca Studio are set up for users looking to analyze the data we’re loading.</p>
<p>Two different scenarios come to mind that could make use of this feature. First, you might want to join some modeled data from your Oracle BI Server with other data that you have stored in Endeca Server; for example, allowing you to combine and analysis unstructured and structured data. In other words, you can create dashboards on your unstructured data that has been enriched by some descriptive structured data!</p>
<p>The second use case could be if you wanted to create some quick dashboards against data modeled within the BI Server repository, to find answers to new questions without the need to make extensive changes within the actual BI Repository &#8211; in other words, to carry out information discovery!</p>
<p>There are probably other use cases too, but whatever the reason you need to bring data from Oracle BI server to Integrator has made this very easy. In this post, therefore, I’m going to provide a step-by-step guide on how to setup this particular functionality, and load data from the OBI Server repository to the Oracle Endeca Server using the 3.0 release of OEID.<a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/01.png"><br />
</a></p>
<p>1. Firstly, open Integrator and select <b>File</b> &gt; <b>New</b> &gt; <b>Project </b>from the menu bar.</p>
<p style="text-align: center"><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/01.png"><img class="alignnone  wp-image-14879 aligncenter" alt="01" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/01.png" width="564" height="393" /></a></p>
<p>Note that with the earlier 2.4 release of Integrator, you had to make sure that a .jar plug-in file (found inside the installation package) for connecting to the Oracle BI Server had been installed in order to be able to see the “Load data from Oracle BI Server” wizard under Information Discovery category in the <b>New Project</b> displayed dialog. This step is not required for version 3.0. Click <b>Load Data from OBI Server</b> and press <b>Next</b> to proceed.</p>
<p style="text-align: center"><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/01-2.png"><img class="alignnone size-full wp-image-14878" alt="01-2" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/01-2.png" width="609" height="589" /></a></p>
<p>2. The <b>Load Data from OBI Server</b> wizard should be displayed. On the first page, enter the <b>project name</b> you are creating (for example, OBIConnection) or alternatively you can <b>Use an existing project</b>. In which case, after pressing <b>Next</b> again, the wizard will add new files to the project you have. I would suggest creating a new project to prevent any conflict, as you can always load the data into an existing data domain.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/02.png"><img class="wp-image-14880 aligncenter" alt="02" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/02.png" width="594" height="467" /></a></p>
<p>3. Next, In the <b>Endeca Data Domain Configuration</b> page, provide your up and running Endeca Server details and press <b>Next</b> to continue, for example:</p>
<p><b>Endeca Server Host</b>: localhost</p>
<p><b>Endeca Server Port</b>: 7002</p>
<p><b>Data Domain Name</b>: Sample_Sales</p>
<p>The data domain name that you provide will be used to create a data domain as one of the initial steps of the Integrator project in a graph called “InitDataDomain.grf”.</p>
<p>Note, where the Endeca Server has been installed on a secure mode, you need to provide the ssl-listen port.</p>
<p style="text-align: center"><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/03.png"><img class="wp-image-14881 aligncenter" alt="03" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/03.png" width="598" height="467" /></a></p>
<p>4. Now you’ll need to enter the OBI Server connection details such as <b>User</b>, <b>Password</b>, <b>OBI Server host</b> and <b>OBI Server port</b>; For example:</p>
<p><b>User</b>: Weblogic</p>
<p><b>Password</b>:  Password01</p>
<p><b>OBI Server host</b>:  10.67.70.117</p>
<p><b>OBI Server port:  </b>9703</p>
<p>9703 is the port that I could connect to. You should validate the credentials by <b>Connecting to OBI Server</b> and once you see the <b>Connected </b>message on the top of the dialog, proceed to the <b>Next</b> step.</p>
<p style="text-align: center"><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/04.png"><img class="wp-image-14882 aligncenter" alt="04" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/04.png" width="599" height="472" /></a></p>
<p>5. You are now able to choose the repository you want and select the relevant objects/tables you need from the list of <b>Tables</b> by checking them. Press <b>Next </b>to continue<b>.</b></p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/05.png"><img class="wp-image-14883 aligncenter" alt="05" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/05.png" width="598" height="470" /></a></p>
<p>6. The wizard will automatically prepare the required meta-data information for the attributes that you selected. Using this page, you can configure some OEID features such as <b>Search Interface </b>by editing the displayed values (Note that this property is only available for STRING attributes). Check the <b>Edit Finished</b> box (located towards the bottom left of the window) when you are happy with all configurations and then click <b>Finish</b>.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/06.png"><img class="wp-image-14884 aligncenter" alt="06" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/06.png" width="600" height="471" /></a></p>
<p>7.  Having now finished the wizard, a new project with all the configurations, metadata files, connection, SQL statement and graphs required to connect to the OBI Server will be added to the <b>Navigator pane</b>.</p>
<p style="text-align: center"> <a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/07.png"><img class="alignnone size-full wp-image-14885" alt="07" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/07.png" width="292" height="586" /></a></p>
<p>8.  You can now see the required database connection, as shown in the screen shot below, where the<b> Oracle JDBC driver </b>has been used.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/08.png"><img class="wp-image-14886 aligncenter" alt="08" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/08.png" width="564" height="414" /></a></p>
<p>9. It’s now time to run the <b>Baseline</b> graph in order to load the OBI Server repository data into the Oracle Endeca Data Domain. Expand the <b>Graph</b> folder within <b>Navigator</b> pane and open <b>Baseline.grf</b>. Press the green <b>Run</b> button from the toolbar. Check the <b>Console</b> to see <b>Execution of graph successful</b>.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-01.png"><img class="wp-image-14887 aligncenter" alt="09-01" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-01.png" width="564" height="410" /></a></p>
<p>Some graph components may require SSL configuration, if you are using a secure Endeca Server implementation; For example in the <b>Load_Data</b> graph, the <b>Bulk_Add/Replace</b> component has a <b>SSL Enabled</b> property that should be updated to <b>true</b>. Also, you’ll also need to change all <b>http</b> requests to <b>https</b>.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-02.png"><img class="wp-image-14888 aligncenter" alt="09-02" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-02.png" width="570" height="394" /></a></p>
<p>The “<b>Load Data</b>” graph uses a Query-Statement, which is located in the data-in directory and contains a SELECT statement from OBI Server repository objects.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-03.png"><img class="wp-image-14889 aligncenter" alt="09-03" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/09-03.png" width="564" height="408" /></a></p>
<p>10. Now its time to log into Endeca Studio and create a Data Source in the <b>Control Panel </b>pointing to the data domain you created in the Integrator project.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/10.png"><img class="wp-image-14891 aligncenter" alt="10" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/10.png" width="536" height="302" /></a></p>
<p><b>Test connection</b> to ensure that it is working properly.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/10-01.png"><img class="wp-image-14890 aligncenter" alt="10-01" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/10-01.png" width="564" height="126" /></a></p>
<p>11.  One more change in OEID version 3.0 is that the old ‘Liferay portal’ term ‘Community’ has been updated to ‘<b>Application’</b>, which to me, feels more related to the subject of Information Discovery and thus makes sense, but that’s just a personal opinion. An ‘Application’ refers to a subject area where users can create different dashboards on different views of one and only one data-source.  Being in the home page of Oracle Endeca Studio, select <b>New Application</b> using the approved, newly created and validated data-source.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/11.png"><img class="wp-image-14892 aligncenter" alt="11" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/11.png" width="607" height="253" /></a></p>
<p>12.  OEID version 3.0 kindly, generously and automatically generates a new dashboard with all the required components such as a searchbox, a breadcrumb, a guided navigation and of course a results table.</p>
<p><a href="http://www.rittmanmead.com/wp-content/uploads/2013/05/12.png"><img class="wp-image-14893 aligncenter" alt="12" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/12.png" width="564" height="347" /></a></p>
<p>So far we have created an Oracle Endeca Information Discovery dashboard upon our Oracle BI Server repository, but what is the advantage of doing this? Rather than being able to create reports very quickly, Perhaps joining some unstructured data from other data-sources to the Oracle BI Server repository and a bit of Text tagging, enrichment and salience analysis could be done in Integrator and will make the dashboards much more interesting.</p>
<p>Good luck to those of you trying this out.  Look out for my next post where I’ll explain how to read from Endeca Server and join its data to those coming from other sources.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/oracle-endeca-information-discovery-v3-0-integration-with-the-obiee-11g-bi-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Endeca Event in Birmingham</title>
		<link>http://www.rittmanmead.com/2013/05/endeca-event-in-birmingham/</link>
		<comments>http://www.rittmanmead.com/2013/05/endeca-event-in-birmingham/#comments</comments>
		<pubDate>Tue, 21 May 2013 11:06:52 +0000</pubDate>
		<dc:creator>James Knight</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15029</guid>
		<description><![CDATA[Just a quick note to highlight that we are running an Oracle Endeca Information Discovery (OEID) event at Oracle&#8217;s Birmingham office on Wednesday 26th June.  Providing a great opportunity to learn how OEID can complement your current BI tools, allowing you to answer previously unanswerable questions through insight from both structured and unstructured data sources [...]]]></description>
				<content:encoded><![CDATA[<p>Just a quick note to highlight that we are running an Oracle Endeca Information Discovery (OEID) event at Oracle&#8217;s Birmingham office on Wednesday 26th June.  Providing a great opportunity to learn how OEID can complement your current BI tools, allowing you to answer previously unanswerable questions through insight from both structured and unstructured data sources (such as social feeds and word documents).</p>
<p>There will also be experienced experts available before, during and after the event, providing a rare opportunity to get your questions answered by people who have been there and done it.</p>
<p>Click <a title="here" href="http://www.oracle.com/us/dm/h2fy11/182725-emeafs12033300mpp016-se-1942630.html">here</a> for more information and to register.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/endeca-event-in-birmingham/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Photos and Presentation Downloads from the Rittman Mead BI Forum 2013, Brighton &amp; Atlanta</title>
		<link>http://www.rittmanmead.com/2013/05/photos-and-presentation-downloads-from-the-rittman-mead-bi-forum-2013-brighton-atlanta/</link>
		<comments>http://www.rittmanmead.com/2013/05/photos-and-presentation-downloads-from-the-rittman-mead-bi-forum-2013-brighton-atlanta/#comments</comments>
		<pubDate>Sun, 19 May 2013 22:14:12 +0000</pubDate>
		<dc:creator>Mark Rittman</dc:creator>
				<category><![CDATA[Oracle BI Apps]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Oracle Endeca]]></category>
		<category><![CDATA[Oracle EPM]]></category>
		<category><![CDATA[Oracle Exalytics]]></category>
		<category><![CDATA[Rittman Mead]]></category>
		<category><![CDATA[User Groups & Conferences]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15022</guid>
		<description><![CDATA[Well, we&#8217;re all back home now after two very successful Rittman Mead BI Forum events in Brighton, and then Atlanta, earlier this month in May 2013. Around 70 OBIEE, ODI, Endeca and Essbase developers from around Europe got together in the first week in Brighton, followed by around 60 in Atlanta, and we were joined [...]]]></description>
				<content:encoded><![CDATA[<p>Well, we&#8217;re all back home now after two very successful <a href="http://www.rittmanmead.com/biforum2013">Rittman Mead BI Forum events</a> in <a href="http://www.rittmanmead.com/2013/05/previewing-the-brighton-bi-forum-2013/">Brighton</a>, and then <a href="http://www.rittmanmead.com/2013/05/agenda-and-details-for-the-atlanta-rm-bi-forum-2013/">Atlanta</a>, earlier this month in May 2013. Around 70 OBIEE, ODI, Endeca and Essbase developers from around Europe got together in the first week in Brighton, followed by around 60 in Atlanta, and we were joined by Cary Millsap (Method R Corporation), Alex Gorbachev (Pythian) and Toby Potter (Data Sift) as special guest speakers over the two events. Thank you again to everyone who came along and supported the event, and a special thanks to the speakers without whom, of course, the BI Forum couldn&#8217;t take place. In addition, sincere thanks to Mike, Adam, Philippe, Alan, Marty, Jack and Florian from Oracle for coming along and sharing plans and insights around the Oracle product roadmap, and finally; congratulations to Antony Heljula (Peak Indicators Ltd) and Jeremy Harms (CD Group) who won the &#8220;Best Speaker&#8221; award for Brighton and Atlanta respectively.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/NewImage33.png" alt="NewImage" width="600" height="471" border="0" /></p>
<p>Photos from the two events (a selection from Brighton are above, some from Atlanta below this paragraph) are available in these Flickr photo sets:</p>
<ul>
<li><a href="http://www.flickr.com/photos/markrittman/sets/72157633465228130/">&#8220;Rittman Mead BI Forum 2013, Brighton&#8221;</a> (Flickr photo set)</li>
<li><a href="http://www.flickr.com/photos/markrittman/sets/72157633537131032/">&#8220;Rittman Mead BI Forum 2013, Atlanta&#8221;</a> (Flickr photo set)</li>
</ul>
<div><img style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="http://www.rittmanmead.com/wp-content/uploads/2013/05/NewImage35.png" alt="NewImage" width="600" height="480" border="0" /></div>
<p>As we always do, we&#8217;re also making the slides (where allowed by the speaker, and not under NDA) available for download using the links below, including the one-day <a href="http://www.rittmanmead.com/2013/05/previewing-the-bi-forum-2013-data-integration-masterclass/">Oracle Data Integration Masterclass</a> provided by Stewart Bryson, Michael Rainey and myself. Note that Christian Screen&#8217;s and Jeremy Harms slides are actually online, so I don&#8217;t think you&#8217;ll be able to download them from whatever service is hosting them &#8211; sorry.</p>
<p>Oracle Data Integration Masterclass (Stewart Bryson, Michael Rainey, Mark Rittman, Rittman Mead)</p>
<ul>
<li><a href="/files/biforum2013_slides/odi_mclass_1_intro_to_odi.pdf">&#8220;Introduction to Oracle Data Integrator 11g&#8221;</a></li>
<li><a href="/files/biforum2013_slides/odi_mclass_2_ref_arch.pdf">&#8220;ODI and the Oracle Reference Architecture for Information Management&#8221;</a></li>
<li><a href="/files/biforum2013_slides/odi_mclass_3_goldengate.pdf">&#8220;ODI and GoldenGate – A Perfect Match…&#8221;</a></li>
<li><a href="/files/biforum2013_slides/odi_mclass_4_big_data.pdf">&#8220;ODI and Hadoop, MapReduce and Big Data Sources&#8221;</a></li>
<li><a href="/files/biforum2013_slides/odi_mclass_5_fault_tolerance.pdf">&#8220;The Three R’s of ODI Fault Tolerance : Resuming, Restarting and Restoring&#8221;</a></li>
<li><a href="/files/biforum2013_slides/odi_mclass_6_sdk_groovy.pdf">&#8220;Scripting and Automating ODI using Groovy and the ODI SDK&#8221;</a></li>
</ul>
<p>Brighton RM BI Forum, May 8th &#8211; 10th 2013</p>
<ul>
<li><a href="/files/biforum2013_slides/lions_sampleapp.pdf">“OBIEE SampleApp 11.1.1.7 functional highlights”</a> (Philippe Lions, Oracle Corporation)</li>
<li><a href="/files/biforum2013_slides/heljula_success_stories.pdf">“OBI Performance Tuning – Real Customer Success Stories”</a> (Antony Heljula, Peak Indicators Ltd)</li>
<li><a href="/files/biforum2013_slides/klaassens_obiee.pdf">“Secrets of OBIEE implementation at LGI”</a> (Marco Klaassens, Liberty Global)</li>
<li>TED Session 1:  <a href="/files/biforum2013_slides/mead_bi_5years.pdf">”Why I want to be working with Business Intelligence in 5 years time”</a> (Jon Mead, Rittman Mead)</li>
<li>TED Session 3 : <a href="/files/biforum2013_slides/heljula_exalytics_notepad.pdf">“Incrementally loading Exalytics using Notepad”</a> (Antony Heljula, Peak Indicators Ltd)</li>
<li><a href="/files/biforum2013_slides/bethke_odi.pdf">“Oracle Data Integrator 11g Best Practices. Busting your performance, deployment, and scheduling headaches.”</a> (Uli Bethke/Maciek Kocon, Independent)</li>
<li><a href="/files/biforum2013_slides/bloom_cloud.pdf">“New Developments in BI Multi-tenancy and Cloud”</a> (Adam Bloom, Oracle Corporation</li>
<li><a href="/files/biforum2013_slides/wilcke_aggregates.pdf">“The Magic of Aggregates”</a> (Michael Wilcke, sumIT AG)</li>
<li><a href="/files/biforum2013_slides/edel_bpm.pdf">“Integrating Oracle BI, BPM and BAM 11g: The complete cycle of information”</a> (Edelweiss Kammermann, Awen Consulting)</li>
<li><a href="/files/biforum2013_slides/seed_endeca.pdf">&#8220;Endeca &#8211; Beyond the Demos&#8221;</a> (Adam Seed, Rittman Mead)</li>
</ul>
<p>Atlanta RM BI Forum, May 15th &#8211; 17th 2013</p>
<ul>
<li><a href="/files/biforum2013_slides/kuipers_genes.pdf">“It’s all in the genes – The power of Oracle Exadata and the Oracle Database”</a> (Rene Kuipers, VX Company)</li>
<li><a href="/files/biforum2013_slides/venkat_inmemory.pdf">&#8220;In Memory Analytics – Times Ten, Essbase 11.1.2.2 – Analysis – A Comparison”</a> (Venkatakrishnan J, Rittman Mead)</li>
<li>TED Session 3 : <a href="http://prezi.com/9ejt6cg6vtg_/financial-reporting-macgyver-hack-with-bipobiee-a-quickie/">“A BI Publisher Beginner’s MacGyver-Hack for Financial Reporting with OBIEE: A Quickie!”</a> (Jeremy Harms, CD Group)</li>
<li><a href="/files/biforum2013_slides/mcquigg_performance.pdf">“Performance Tuning the BI Apps with a Performance Layer”</a> (Jeff McQuigg, KPI Partners Inc)</li>
<li><a href="/files/biforum2013_slides/millsap_performance.pdf">&#8220;Thinking Clearly about Performance&#8221;</a> (Cary Millsap, Method R Corporation) &#8211; see also the <a href="http://method-r.com/downloads/doc_view/44-thinking-clearly-about-performance?tmpl=component&#038;format=raw">accompanying technical paper</a></li>
<li><a href="/files/biforum2013_slides/vlamis_forecasting.pdf">”Forecasting and Time Series Analysis in Oracle BI”</a> (Tim &amp; Dan Vlamis, Vlamis Software Solutions Inc)</li>
<li><a href="/files/biforum2013_slides/gorbachev_hadoop.pdf">“Hadoop versus the Relational Data Warehouse.”</a> (Alex Gorbachev, Pythian)</li>
<li><a href="http://artofbi.com/presentations/biforum2013-how-to-build-a-obiee-plugin-christian-screen.html?theme=simple#/">&#8220;How to Create a Plug-In for Oracle BI 11g”</a> (Christian Screen, Capgemini)</li>
<li><a href="/files/biforum2013_slides/lee_obiee_hadoop.pdf">&#8220;ODI and Hadoop / Big Data&#8221;</a> (Alan Lee &amp; Marty Gubar, Oracle Corporation)</li>
<li><a href="/files/biforum2013_slides/schouten_biapps.pdf">&#8220;BI Applications 11g and ODI&#8221;</a> (Florian Schouten, Oracle Corporation)</li>
<li><a href="/files/biforum2013_slides/mcginley_biapps.pdf">&#8220;OBIA 11G – What You Need To Know: Part 1&#8243;</a> (Kevin McGinley, Accenture)</li>
</ul>
<p>So once again &#8211; thank you to everyone who came along, especially the speakers but also everyone from our Brighton and Atlanta offices who helped set the event up, and made sure it all ran so smoothly. See some of you again in Brighton and Atlanta next year, and our next outing is to <a href="http://kscope13.com">ODTUG KScope&#8217;13 in New Orleans</a> &#8211; another great event with the <a href="http://kscope13.com/business-intelligence">BI Track</a> organised by Kevin McGinley &#8211; make sure you&#8217;re there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/photos-and-presentation-downloads-from-the-rittman-mead-bi-forum-2013-brighton-atlanta/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Testing aggregate navigation on OBIEE and Exalytics</title>
		<link>http://www.rittmanmead.com/2013/05/testing-aggregate-navigation-on-obiee-and-exalytics/</link>
		<comments>http://www.rittmanmead.com/2013/05/testing-aggregate-navigation-on-obiee-and-exalytics/#comments</comments>
		<pubDate>Sat, 18 May 2013 13:09:25 +0000</pubDate>
		<dc:creator>Robin Moffatt</dc:creator>
				<category><![CDATA[Exalytics]]></category>
		<category><![CDATA[Oracle BI Suite EE]]></category>
		<category><![CDATA[aggregate navigation]]></category>
		<category><![CDATA[aggregates]]></category>
		<category><![CDATA[obiee]]></category>
		<category><![CDATA[request variable]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.rittmanmead.com/?p=15002</guid>
		<description><![CDATA[One of OBIEE’s many great strengths is aggregate navigation; the ability to choose from a list of possible tables the one which will probably give the optimal performance for a given user query. Users are blissfully unaware of which particular table their query is being satisfied from, since aggregate navigation happens on the BI Server [...]]]></description>
				<content:encoded><![CDATA[<p>One of OBIEE’s many great strengths is <strong>aggregate navigation</strong>; the ability to choose from a list of possible tables the one which will probably give the optimal performance for a given user query. Users are blissfully unaware of which particular table their query is being satisfied from, since aggregate navigation happens on the BI Server once the user’s request comes through from an Analysis or Dashboard.</p>
<figure><img class="aligncenter" alt="" src="/wp-content/uploads/2013/05/is00.jpg" /></figure>
<p>This seamless nature of aggregate navigation means that testing specific aggregates are working can be fiddly. We want to ensure that the aggregates we’ve built are (i) being used when appropriate and (ii) showing the correct data. This is the particularly the case in Exalytics when aggregates are put into in-memory (TimesTen) by the Summary Advisor and we need to validate them.</p>
<p>Whilst the log file <code>nqquery.log</code> (or Usage Tracking table <code>S_NQ_DB_ACCT</code>) tells us pretty easily which table a query used, it is nice to be able to switch a query easily between possible aggregate sources to be able to compare the data. This blog demonstrates how we can use the <code>INACTIVE_SCHEMAS</code> variable (as described in my <a href="http://www.rittmanmead.com/2013/04/incremental-refresh-of-exalytics-aggregates-using-native-bi-server-capabilities/">previous blog on loading Exalytics incrementally</a>) to do this.</p>
<p><code>INACTIVE_SCHEMAS</code> is a Logical SQL variable that tells the BI Server to exclude the specified physical schema(s) from consideration for resolving an inbound query. Normally, the BI Server will parse each incoming query through the RPD, and where a Logical Table has multiple Logical Table Sources it will evaluate each one to determine if it (a) can satisfy the query and (b) whether it will be the most efficient one to use. By using <code>INACTIVE_SCHEMAS</code> we can force the BI Server to ignore certain Logical Table Sources (those associated with the physical schema specified), ensuring that it just queries the source(s) we want it to.</p>
<p>In the following example, the data exists on both Oracle database, and TimesTen (in-memory). Whilst the example here is based on an Exalytics architecture, the principle should be exactly the same regardless of where the aggregates reside. This is how the RPD is set up for the Fact table in my example:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is01.png" width="600" /></figure>
<p>The <code>GCBC_SALES</code> schema on Oracle holds the unaggregated sales data, whilst the <code>EXALYTICS</code> schema on TimesTen has an aggregate of this data in it. The very simple report pictured here shows sales by month, and additionally uses a <strong>Logical SQL</strong> view to show the contents of the query being sent to the BI Server:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is02.png" width="600" /></figure>
<p>Looking at nqquery.log we can see the query by default hits the TimesTen source:</p>
<pre><code>[...]
------------- Sending query to database named TimesTen aggregates
WITH
SAWITH0 AS (select distinct T1528.Sale_Amoun000000AD as c1,
     T1514.Month_YYYY000000D0 as c2
from
     SA_Month0000011E T1514,
     ag_sales_month T1528
[...]
</code></pre>
<p>Now, for thoroughness, let’s compare this to what’s in the TimesTen database, using a Direct Database Request:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is03.png" width="600" /></figure>
<p>OK, all looks good. But, is what we’ve aggregated into TimesTen matching what we’ve got in the source data on Oracle? Here was can use <code>INACTIVE_SCHEMAS</code> to force the BI Server to ignore TimesTen entirely. We can see from the nqquery.log that OBI has now gone back to the Oracle source of the data:</p>
<pre><code>[...]
------------- Sending query to database named orcl
WITH
SAWITH0 AS (select sum(T117.FCAST_SAL_AMT) as c1,
     T127.MONTH_YYYYMM as c2
from
     GCBC_SALES.TIMES T127 /* Dim_TIMES */ ,
     GCBC_SALES.SALES T117 /* Fact_SALES */
[...]
</code></pre>
<p>and the report shows that actually we have a problem in our data, since what’s on the source doesn’t match the aggregate:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is04.png" width="600" /></figure>
<p>A Direct Database Request against Oracle confirms the data we’re seeing &#8211; we have a mismatch between our source and our aggregate:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is05.png" width="600" /></figure>
<p>This is the kind of testing that it is crucial to perform. Without proper testing, problems may only come to light in specific reports or scenarios, because by the very nature of aggregate navigation working silently and hidden from the user.</p>
<p>So this is the feature we can use to perform the testing, but below I demonstrate a much more flexible way that having to build multiple reports.</p>
<h2 id="implementinginactive_schemas">Implementing INACTIVE_SCHEMAS</h2>
<p>Using <code>INACTIVE_SCHEMAS</code> in your report is very simple, and doesn’t require modification to your reports. Simply use a <strong>Variable Prompt</strong> to populate <code>INACTIVE_SCHEMAS</code> as a <strong>Request Variable</strong>. Disable the <strong>Apply</strong> button for instantaneous switching when the value is changed.</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is08.png" width="400" /></figure>
<p>A Request Variable will be prepended it to any logical SQL sent to the BI Server. Save this prompt in your web catalog, and add it to any dashboard on which you want to test the aggregate:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is06.png" width="600" /></figure>
<p>Even better, if you set the security on the dashboard prompt such that only your admins have access to it, then you could put it on <strong>all of your dashboards</strong> as a diagnostic tool and only those users with the correct privilege will even see it:</p>
<p><img alt="" src="/wp-content/uploads/2013/05/is11.png" width="300" /></p>
<p><img alt="" src="/wp-content/uploads/2013/05/is09.png" width="380" /></p>
<p><img alt="" src="/wp-content/uploads/2013/05/is10.png" width="450" /></p>
<h2 id="displayingtheaggregatesourcenameinthereport">Displaying the aggregate source name in the report</h2>
<p>So far this is all negative , in that we are specifying the data source <strong>not</strong> to use. We can examine <code>nqquery.log</code> etc to confirm which source <strong>was</strong> used, but it’s hardly convenient to wade through log files each time we execute the report. <del>Ripped off from</del> Inspired by SampleApp is this trick:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is07.png" width="400" /></figure>
<ol>
<li>Add a logical column to the fact table</li>
<li>Hard code the expression for the column in each Logical Table Source</li>
<li>Bring the column through to the relevant subject area</li>
<li>Incorporate it in reports as required, for example using a <strong>Narrative View</strong>.</li>
</ol>
<p>Bringing it all together gives us this type of diagnostic view of our reports:</p>
<figure><img alt="" src="/wp-content/uploads/2013/05/is12.png" width="600" /></figure>
<h2 id="summary">Summary</h2>
<p>There’s a variety of ways to write bespoke test reports in OBI, but what I’ve demonstrated here is a very minimal way of overlaying a test capability <em>on top of all existing dashboards</em>. Simply create the Request Variable dashboard prompt, set the security so only admins etc can see it, and then add it in to each dashboard page as required.</p>
<p>In addition, the use of a ‘data source’ logical column in a fact table tied to each LTS can help indicate further where the data seen is coming from.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rittmanmead.com/2013/05/testing-aggregate-navigation-on-obiee-and-exalytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching 33/36 queries in 0.044 seconds using disk

 Served from: www.rittmanmead.com @ 2013-06-19 14:01:37 by W3 Total Cache -->