tag:blogger.com,1999:blog-88239703736529029522024-03-12T22:33:45.100-05:00Oracle AnalyticsKevin McGinley's blog on Oracle Business Analytics.Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.comBlogger72125tag:blogger.com,1999:blog-8823970373652902952.post-33085889214184903082014-06-10T09:34:00.000-05:002014-06-10T10:40:17.780-05:00It's The End Of The Blog As We Know It (And I Feel Fine)Back at the beginning of 2014, I wrote a post about entitled "<a href="http://bit.ly/1cVYd67" target="_blank">It's the End Of BI As We Know It (And I Feel Fine)</a>." It was a play on the famous R.E.M. song and I used it and the new year as an acknowledgement that the winds are changing in our industry. I still believe that and I see it now more than ever, but there were some winds of change I didn't write about: starting a new company.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBhxjwOhOiLp07lKZqM2qMEs5OlYuIXqux-tIqnIFrK6G9eTxMyxmxR1R6gts3KQHjMzO-XnIX23dnOS4BCWEVxDv2VNMEd9uQKFJZMPqw2Zs5_AQLxwpIzkGfTz5yqJmaTqMdIb3mNtk/s1600/Logo_2C_RR_786.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBhxjwOhOiLp07lKZqM2qMEs5OlYuIXqux-tIqnIFrK6G9eTxMyxmxR1R6gts3KQHjMzO-XnIX23dnOS4BCWEVxDv2VNMEd9uQKFJZMPqw2Zs5_AQLxwpIzkGfTz5yqJmaTqMdIb3mNtk/s1600/Logo_2C_RR_786.png" height="200" width="200" /></a></div>
<div>
<br /></div>
<div>
If you haven't seen/read the news, check it out <a href="http://bit.ly/1nuJh3e" target="_blank">here</a>. In short, Stewart Bryson and I will be starting a new company, <a href="http://www.redpillanalytics.com/" target="_blank">Red Pill Analytics</a>, to try to change the game on delivering Oracle BI. We think there is a lot of innovation we can bring to the space, and we're ready to tackle it head-on.</div>
<div>
<br /></div>
<div>
With the creation of a new company, we had to put some thought into how we're going to promote it and get our great thoughts and ideas out there. To that end, we've made the decision to retire this blog. A new company with new ideas requires a new platform to spread those ideas. </div>
<div>
<br /></div>
<div>
I've enjoyed writing on this blog since its inception, but frankly, I think it's time to evolve the writing platform. One of our gripes at <a href="http://www.redpillanalytics.com/" target="_blank">Red Pill Analytics</a> is that BI delivery hasn't really changed much over the years, and frankly neither has the weblog (the original name for blogs). The folks at <a href="http://www.medium.com/" target="_blank">Medium</a> (who invented Blogger, coincidentally) agree and decided to create a better platform.</div>
<div>
<br /></div>
<div>
So...please check out my <a href="http://bit.ly/1qoca1F" target="_blank">recent post</a> on choosing Medium as our platform, follow our <a href="http://bit.ly/1oFldvV" target="_blank">collection</a> on Medium, and change your RSS feeds (or whatever mechanism you use to follow this blog) to reflect the change. For the next few months I will post links here to Medium stories I write <a href="http://www.medium.com/@kevin_mcginley" target="_blank">there</a>, but after a time I will stop doing that.</div>
<div>
<br /></div>
<div>
Thank you so much for your readership and I hope to see you over in <a href="http://www.medium.com/@kevin_mcginley" target="_blank">Medium</a>.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com1tag:blogger.com,1999:blog-8823970373652902952.post-52236567730617566222014-05-02T10:13:00.000-05:002014-05-02T10:13:05.989-05:00Upcoming Events 2014Happy May! While the weather feels more like a blustery March than a warm, sunny May, it's still an exciting time of the year with two of my favorite events happening in the near future.<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4bQ4-IUOxIheRziCnDDIXUMNVlgAWNOFaspCTv6UZ2Cg7NCbsA_NL4srIWV1Gbebt0TbtlIkpZp7tUEikHdi-i0BIpBbZv8GaX7HUp-uZzWbII5VpCZVIE655intk6eSdvzpw3R8pieg/s1600/bi-forum-680x338-no-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4bQ4-IUOxIheRziCnDDIXUMNVlgAWNOFaspCTv6UZ2Cg7NCbsA_NL4srIWV1Gbebt0TbtlIkpZp7tUEikHdi-i0BIpBbZv8GaX7HUp-uZzWbII5VpCZVIE655intk6eSdvzpw3R8pieg/s1600/bi-forum-680x338-no-logo.png" height="176" width="400" /></a></div>
<div>
First we have the <a href="http://www.rittmanmead.com/biforum2014" target="_blank">BI Forum</a>, which is an event hosted by <a href="http://www.rittmanmead.com/" target="_blank">Rittman Mead</a>. If you're reading this blog, you likely read theirs, too, and for good reason - no one supports the Oracle BI community more. The BI Forum is a great example of that, bringing together a certain breed of individuals interested in rich knowledge that you're unlikely to find anywhere else. If Open World is about hearing all of the latest Oracle marketing, the BI Forum is about getting down to brass tacks to get something done. Since Rittman Mead plans and runs the conference on their own, they aren't really beholden to picking topics for the masses, but can really offer something unique and different. They also take a small approach, with everyone attending all the same sessions, which fosters a more classroom-like experience. </div>
<div>
<br /></div>
<div>
I'll be at the Atlanta week presenting on 3rd-party visualizations in OBIEE, which just happen to be my three recent blog posts <a href="http://bit.ly/1pL8k2w" target="_blank">here</a>, <a href="http://bit.ly/1ip8Bn9" target="_blank">here</a>, and <a href="http://bit.ly/QzQsel" target="_blank">here</a>. But honestly, don't come for me, come for the up-close and personal access to key members of Oracle Product Management, access to a number of Oracle ACE's, and detailed presentations on topics that are definitely not for beginners.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://kscope14.com/templates/kscope14-home/images/kscope14-logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://kscope14.com/templates/kscope14-home/images/kscope14-logo.jpg" /></a></div>
<div>
After that, we have <a href="http://kscope14.com/" target="_blank">Kscope 14</a> in June. If the BI Forum is more akin to training, Kscope adds a strong element of community. While not just about BI, it's still focused on more of a developer community, so you have a wider range of people attending across several related disciplines (BI, EPM, Database, etc) - but they are all just like you and eager to engage. <a href="http://www.odtug.com/" target="_blank">ODTUG</a> is a strong community, and the network you develop from attending an event like Kscope is fantastic. In addition, Kscope's focus on community extends into the host city itself - Seattle. The entertainment will take advantage of the Seattle location in very cool ways and there's even a community day on the Saturday before the conference if you're able to give a little back to a charitable cause.</div>
<div>
<br /></div>
<div>
In addition to giving the same visualization presentation as the BI Forum (maybe tweaked a bit), I'll also be on the <a href="http://kscope14.com/content/lunch-and-learn#BI" target="_blank">Oracle ACE lunch panel on Tuesday</a> and as a special treat, will be hosting a live studio version of the podcast I host with Stewart Bryson: <a href="http://bit.ly/PCvC9l" target="_blank">Real Time BI with Kevin & Stewart</a>. This year ODTUG wanted to try something different on <a href="http://kscope14.com/content/thursday-deep-dives#Business Intelligence" target="_blank">Thursday morning</a>, so the entire BI (and maybe some of the EPM/Database) track(s) can gather to watch Stewart and I put on a live show that will attempt to be both informative and funny (no promises on the latter, because frankly, Stewart's jokes aren't always that funny). We'll draw some inspiration from the various talk show formats out there to put on a unique performance, so hopefully you stay through the end on Thursday to enjoy that (more info on this soon)!</div>
<div>
<br /></div>
<div>
There is still time to register for both the <a href="http://www.rmbiforumatlanta14.eventbrite.co.uk/" target="_blank">BI Forum</a> in Atlanta (spots are almost gone) and <a href="http://kscope14.com/registration" target="_blank">Kscope</a>, so click those links and I'll see you there!</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com2tag:blogger.com,1999:blog-8823970373652902952.post-72234757949046649052014-04-21T09:48:00.000-05:002014-04-21T09:48:56.673-05:003rd-Party Visualizations in OBIEE - Part 3In <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a> of this post, I wrote about why you might want to add third-party visualization capabilities for OBIEE and gave a brief explanation how to setup one approach: calling java visualization engines. In <a href="http://bit.ly/1ip8Bn9" target="_blank">Part 2</a> I walked through a detailed example of how to actually do this using a visualization engine called Flot. In this post I will do the same thing for a visualization engine called D3.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibSY3xS5B4GDkS9n9yS3HntYWaU91d0XMlXqF9HuVn24YibQp-L1aXm-4Vi4crk3xamFUi5u2fpuT7-uzeZNbWxr2ojNRe7p-giDSTe5hHGLxksWVqrnuWy0NxhaAzVhXUVLM20tP4bqk/s1600/Screen+Shot+2014-04-16+at+2.52.26+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibSY3xS5B4GDkS9n9yS3HntYWaU91d0XMlXqF9HuVn24YibQp-L1aXm-4Vi4crk3xamFUi5u2fpuT7-uzeZNbWxr2ojNRe7p-giDSTe5hHGLxksWVqrnuWy0NxhaAzVhXUVLM20tP4bqk/s1600/Screen+Shot+2014-04-16+at+2.52.26+PM.png" height="115" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A bullet chart in OBIEE using D3</td></tr>
</tbody></table>
Where Flot would be used mostly for having more control and interactivity over pretty standard visualizations available in OBIEE today, D3 can be viewed as venturing into the wild world of more avant garde visualizations. Take a look at the <a href="https://github.com/mbostock/d3/wiki/Gallery" target="_blank">Examples</a> page on the D3 <a href="http://d3js.org/" target="_blank">web site</a> and you'll feel like you're in an alien world. In addition, D3 is a bit more complicated than Flot, with a good comparison being R, both in its complexity as well as the community growing and expanding D3 in many directions.<br />
<br />
In an effort to introduce you to working with D3 in OBIEE, I'm going to start small. After advertising a variety of cool and crazy visualizations, I'm going to start with a simple bar chart and work up to bullet charts at the end. There is more of a building progression in this post than in <a href="http://bit.ly/1ip8Bn9" target="_blank">Part 2</a>, so stick with me.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.50.41%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="93" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.50.41%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Let's start simple</td></tr>
</tbody></table>
What's different about D3 is that it's less of a "charting engine" and more a sophisticated way to graphically paint data. That may sound like an abstract differentiation, but hopefully you'll see what I mean as we walk through this first simple example.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.54.14%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="230" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.54.14%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The beginning of our Narrative view</td></tr>
</tbody></table>
In the Prefix and Narrative sections for our first example, there isn't much different from Flot. We can define CSS styles (or reference them in a separate file), we have to reference the appropriate javascript file served as an application on our server (in this instance, D3 was already deployed in analyticsRes on the SampleApp VM, so I'm referencing that here), and we need to initialize our data array. From there, our Narrative section pushes data from the report into the array, and in this simple example, we're only pushing the "1- Revenue" column.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.55.25%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="128" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.55.25%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Postfix section of our Narrative view</td></tr>
</tbody></table>
From there we jump to the Postfix section and we can see the simple structure that D3 follows. First, we're defining a variable using D3 linear scaling that defines the domain (data-driven, input) and the range (pixel-driven, output) for the chart. This allows D3 to map whatever data range your data has to whatever pixel space you have to draw the object.<br />
<br />
Next, we perform a D3 "select" statement that appends each bar in the chart using the defined style and a width based on our data. This select statement will vary based on the type of visualization you're working with, but the key thing to note that you are literally defining how to "paint" each part of the chart - we are literally drawing boxes with a text label on them, not a bar chart. To get a better understanding of this, let's evolve the chart a bit and actually pivot it from a horizontal bar chart to a vertical one.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.56.32%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="340" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.56.32%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Pivot to vertical bar and introduce SVG</td></tr>
</tbody></table>
For simplicity's sake, I've added a simple calculation to represent our "1- Revenue" metric in Millions, and you can see the chart is now flipped to a vertical bar. But there are also other subtle differences in this version - let's take a look.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.57.29%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="262" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%2012.57.29%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Prefix and Narrative of our second example</td></tr>
</tbody></table>
The Prefix and Narrative sections look similar to the first example, with a mild change to the CSS structure. But there is also another difference in that we are rendering the chart in SVG (Scalable Vector Graphics) instead of pure HTML. From what I read, SVG is more flexible than HTML and will actually make it easier for you to render more complex visualizations, but I can't say I have a lot of first-hand experience with the pains of one vs. the other. Feel free to Google more on this if you're interested.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.00.48%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="125" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.00.48%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The first part of the Postfix of our second example</td></tr>
</tbody></table>
In the first part of our Postfix, we're going to define variables for the canvas heigh and width, as well as a variable for our domain and ranges of the chart. Notice that since we've pivoted from horizontal to vertical, our range definition changes from (0,width) to (height,0). Next we're going to initiate our D3 select, but we're going to put it in a variable and define two SVG attributes, "width" and "height" for our bars. This is the difference in using SVG versus HTML. Next we define a "barWidth" variable that takes into account how many bars of data we have to draw (data points) and divides the chart space up accordingly so our bars are proportionate to the space and each other.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.01.52%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="175" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.01.52%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The second part of our Postfix in the second example</td></tr>
</tbody></table>
Now here's where things get interesting and different. First, we're going to reference our original chart variable and tell the chart to draw each bar using the SVG transform/translate combo to basically tell the chart to paint each bar from right to left taking into account the proportionate barWidth for each bar. Next we call an SVG "rect" to create the bar height by taking into account the difference between the canvas height and the data height because SVG objects render from top-to-bottom, not bottom-to-top as you would expect from a vertical bar chart. We also want some gaps between each bar, so we subtract 10 from the barWidth to set the "rect" width. Lastly, we can append a text label in the middle of the bar, at the top inside the bar, but with just a little bit of padding between the two. As you can see, there's a lot to think about here, but like I explained before with Flot, it's always good to start out with pre-defined code somewhere and tweak accordingly (unless you're already a savvy javascript writer). Now let's get a little more complicated.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.07.11%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="232" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.07.11%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Example 3: axis labels!</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Axis labels?? Now we're getting fancy! Seriously, though, the point of this is to show how much manual control you have over these visualization types, but how that can be a double-edge sword with regards to how much you have to manually account for (makes you appreciates OBIEE charting engine, doesn't it?).</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.08.01%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="326" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.08.01%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Prefix and Narrative sections for example three</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
The main thing you'll notice different here (other than the CSS additions to help with the axis formatting) is the addition of a second value in our data array. In the Narrative section, you can see that we now have to pass labels into our data array so we can reference specific data values, much like we do columns in OBIEE. The key here is that we aren't passing a static file to D3 (like many websites do), so we can't rely on traditional csv row headers.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.09.12%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="192" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.09.12%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The first half of the Postfix for example three</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
First, we're going to set some basic margins so that our chart doesn't take up the entire canvas and we leave room for our x and y-axis labels. Next, we need to leverage a D3 ordinal scale because the "Brand" values are not numeric and instead of a plain range, we need to use rangeRoundBands to get the integer width of each bar. For our y-axis, we can use the D3 linear range we used before to fit our data values within a pixel space. Then we can define a variable for each axis using standard SVG functionality.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.10.36%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%201.10.36%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The second half of the Postfix for example three</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
All that's left is to run our D3 select, append our two axes, then draw the rects for each value, making sure to align them with our brands in our x-axis. When you think about having to draw each object in the canvas, it really helps then to compartmentalize the different parts of a chart, much like you do in Excel.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.52.26%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="115" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.52.26%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Example 4: now we're getting somewhere</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
So what about venturing off the reservation to something you can't easily accomplish in OBIEE? Let's look at the Stephen Few favorite: the bullet chart. Right off the bat you'll see how we're dealing with many more measures above, because at it's core, the <a href="http://www.perceptualedge.com/articles/misc/Bullet_Graph_Design_Spec.pdf" target="_blank">bullet chart spec</a> contains a metric label, a metric, a comparative metric, and a few range scales. Thankfully, a few people took Few's spec and coded script to replicate it. All you have to do is some standard D3 coding and make a few calls to this code. Let's break down how I got to this output.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
First, SampleApp contains an example bullet chart. However, Oracle complicated the execution of this example for my tutorial purposes, so I set out to simplify it. I did this in four main ways:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Removed the bullet chart-specific code from the Postfix section and called it in a separate javascript file, as is consistent with the <a href="http://bl.ocks.org/mbostock/4061961" target="_blank">example</a> referenced on the D3 site (the same example Oracle based their example on).</li>
<li>Removed the superfluous code that allowed the D3 example to generate new random data using a button on the chart.</li>
<li>Changed the logical SQL of the report to simplify the data being retrieved, as Oracle's example allows for interaction at an individual product level and thus creates more complications in working with the result set. I also changed many of the calculations for the various metrics to simplify them as well.</li>
<li>Changed the legend to reflect my changes to the logical SQL.</li>
</ol>
<div>
If you want to replicate what I'm about to do, you'll first want to start with a new report. Here is the logical SQL:</div>
<div>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">SELECT saw_0, saw_1, saw_2, saw_3, saw_4, saw_5, saw_6, saw_7 FROM ((SELECT 'Revenue' saw_0, 'In USD' saw_1, "Base Facts"."5- Target Revenue"*0.7 saw_2, "Base Facts"."5- Target Revenue"*.9 saw_3, "Base Facts"."5- Target Revenue"*1.2 saw_4, "Base Facts"."1- Revenue" saw_5, "Base Facts"."1- Revenue"*1.1 saw_6, "Base Facts"."5- Target Revenue" saw_7 FROM "A - Sample Sales" WHERE "Time"."T05 Per Name Year" = '2010') UNION (SELECT 'Billed Quantity' saw_0, 'Count' saw_1, "Base Facts"."6- Target Quantity"*.6 saw_2, "Base Facts"."6- Target Quantity"*.8 saw_3, "Base Facts"."6- Target Quantity"*1.1 saw_4, "Base Facts"."2- Billed Quantity" saw_5, "Base Facts"."2- Billed Quantity"*1.4 saw_6, "Base Facts"."6- Target Quantity" saw_7 FROM "A - Sample Sales" WHERE "Time"."T05 Per Name Year" = '2010')) t1 ORDER BY saw_0, saw_1</span></blockquote>
</div>
<div>
Next, deep within the D3 folder hierarchy on SampleApp, there is an Examples folder which contains example code for a variety of different chart types. The bullet subfolder contains a bullet.js file, which you'll need to copy, renaming the old file to "bullet_orig.js" and editing the new file to strip out the D3 rendering code at the top of the file. You'll know where to stop deleting when you reach the part of the file that contains the following comment lines:</div>
<div>
<blockquote class="tr_bq">
// Chart design based on the recommendations of Stephen Few. Implementation<br />
// based on the work of Clint Ivy, Jamie Love, and Jason Davies.<br />
// http://projects.instantcognition.com/protovis/bulletchart/</blockquote>
</div>
<div>
Save that file and you can now reference it within a new narrative view, which looks like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.54.13%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="256" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.54.13%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Prefix and Narrative sections for our bullet chart</td></tr>
</tbody></table>
<div>
We start with some CSS unique to the bullet chart, call a second .js file (the one we just created), and our Narrative is a bit more complicated (notice how each column does not need its own label).</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.55.27%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="170" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.55.27%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The first half of the Postfix for our bullet chart</td></tr>
</tbody></table>
<div>
In the first part of our Postfix, there isn't much different from what we've seen before, with the exception of the bulletChart() function call, which is defined in the bullet.js file. There is a lot of code there, and thanks to the people who created it, we don't have to write that from scratch every time we want to create a bullet chart. Since this function does most of the work, the rest of the Postfix code is rather straightforward.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.56.25%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="141" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.56.25%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The second half of the Postfix for our bullet chart</td></tr>
</tbody></table>
<div>
Once the chart is called, the only work left to do is to append the title and subtitle text to the side of the chart, which we do with the code above, which is largely similar to code we've seen before. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.52.26%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="115" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-16%20at%202.52.26%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The final bullet chart again; it's a good idea to include a legend</td></tr>
</tbody></table>
<div>
And that's it! I repeated the final product above for your reference again, as you'll need to build your own legend view to explain the parts of the graph. There are lots of uses for this type of view, but the standard actual-versus-target is the most obvious. You can also build-in hover capabilities, navigation link capabilities, and more - but that's for the advanced class!</div>
<div>
<br /></div>
<div>
That concludes this three-part series on 3rd-party visualization in OBIEE. I hope this provided you with enough of an introduction to put you on the path to doing this in your own environment. </div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com1tag:blogger.com,1999:blog-8823970373652902952.post-31243715903736618202014-04-07T08:48:00.000-05:002014-04-21T09:52:08.634-05:003rd-Party Visualizations in OBIEE - Part 2In <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a> of this post, I wrote about why you might want to add third-party visualization capabilities for OBIEE and gave a brief explanation how to setup one approach: calling java visualization engines. In this post, I'll give a simple and a more advanced example of how to do this specifically in one of the engines: Flot. In <a href="http://bit.ly/QzQsel" target="_blank">Part 3</a>, I'll do the same for D3.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQb7kaVeLqE-qpp9ldwrh4SbnZgQh5UgfKDubyv4g0ohjpgIxh6P5VOl_3EtiWUnyvkTCP6gP_DQZ5jtSEGi6OP2eGizqwFYH-SaPwJvW8ycwrcQUR_8bdtwxsJ1vOghY4dwG3QrBLYhw/s3200/Screen+Shot+2014-04-02+at+2.21.05+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQb7kaVeLqE-qpp9ldwrh4SbnZgQh5UgfKDubyv4g0ohjpgIxh6P5VOl_3EtiWUnyvkTCP6gP_DQZ5jtSEGi6OP2eGizqwFYH-SaPwJvW8ycwrcQUR_8bdtwxsJ1vOghY4dwG3QrBLYhw/s3200/Screen+Shot+2014-04-02+at+2.21.05+PM.png" height="213" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A simple Flot chart in an OBIEE Narrative view</td></tr>
</tbody></table>
I'm assuming at this point you've done the setup steps in <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a> and have the Flot library deployed as an application in WLS. This will allow us to reference the libraries in a Narrative view. So how do we code a simple chart like the one above? Let's start with the base report in SampleApp:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%202.19.48%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%202.19.48%20PM.png" width="188" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Our basic starting report</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Pretty simple, right? I have a metric, "1 - Revenue" and I want to line plot it by "T00 Calendar Date". The first thing you need to know is that things will always be a little harder using these third-party engines when compared to OBIEE. The benefit of the out-of-the-box charts in OBIEE is simplicity, but the trade-off is unlimited configurability. As you can imagine, the benefit/trade-off is reversed when considering the third-party engine.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Our primary challenge here, before beginning any coding, is that Flot doesn't use time the way OBIEE or the Oracle database does, but rather how Javascript does. According to the Flot <a href="https://github.com/flot/flot/blob/master/API.md" target="_blank">documentation</a>:</div>
<blockquote class="tr_bq" style="clear: both; text-align: left;">
<i>The time series support in Flot is based on Javascript timestamps, i.e. everywhere a time value is expected or handed over, a Javascript timestamp number is used. This is a number, not a Date object. A Javascript timestamp is the number of milliseconds since January 1, 1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's in milliseconds, so remember to multiply by 1000!</i></blockquote>
So, we need to take our "T00 Calendar Date" column and convert into the number of milliseconds since 1/1/1970. Easy enough, right? Well, it turns out to be a little bit more complicated than you think, so let's walk through that quickly.<br />
<br />
<ol>
<li>Convert "T00 Calendar Date" to a timestamp - for whatever reason, this was not a straight CAST for me, as OBIEE didn't like casting a date as a timestamp (even though that is supposed to be supported) so I went through a varchar instead: <span style="font-family: Courier New, Courier, monospace;">CAST(CAST("Time"."T00 Calendar Date" AS VARCHAR(20)) as TIMESTAMP)</span></li>
<li><span style="font-family: inherit;">Create a column for our base timestamp - since we'll have to find the difference between two timestamps, we need the starting point described in Flot's documentation (we need to be mindful of the date syntax here):</span><span style="font-family: Times, Times New Roman, serif;"> </span><span style="font-family: Courier New, Courier, monospace;">CAST('01-Jan-1970' as TIMESTAMP)</span></li>
<li><span style="font-family: inherit;">Calculate the difference between the two in seconds - there is a nice little function called TIMESTAMPDIFF which allows us to calculate the time between two timestamps, choosing between a preset list of granularities. We want seconds, and in the function syntax you specify the earlier timestamp first if you want positive numbers, so we have this:</span><span style="font-family: Times, Times New Roman, serif;"> </span><span style="font-family: Courier New, Courier, monospace;">TIMESTAMPDIFF(SQL_TSI_SECOND, CAST('01-Jan-1970' as TIMESTAMP), CAST(CAST("Time"."T00 Calendar Date" AS VARCHAR(20)) as TIMESTAMP))</span></li>
<li><span style="font-family: inherit;">Convert seconds to milliseconds - this should be as easy as multiplying by 1000, right? Sadly, OBIEE didn't like me adding a simple "*1000" to the end of the above formula, so I had to cast the result of the above formula as a double precision value, then multiply by 1000 like so:</span><span style="font-family: Times, Times New Roman, serif;"> </span><span style="font-family: Courier New, Courier, monospace;">CAST(TIMESTAMPDIFF(SQL_TSI_SECOND, CAST('01-Jan-1970' as TIMESTAMP), CAST(CAST("Time"."T00 Calendar Date" AS VARCHAR(20)) as TIMESTAMP)) as DOUBLE PRECISION)*1000</span></li>
</ol>
<div>
<span style="font-family: inherit;">Side note: if you plan to use Flot alot (snicker snicker), you may want to create the Javascript timestamp column in the database or at least in the RPD so you don't have to go through this formula every time.</span></div>
<div>
<span style="font-family: inherit;"><br /></span></div>
<div>
<span style="font-family: inherit;">After all that nonsense, you have a table like this (showing the four different formulas above):</span></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%202.51.47%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="146" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%202.51.47%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Our starting report enhanced with a few new columns</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Now we can plot the "Flot TS" column along with "1 - Revenue" on our simple Flot chart!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To create a simple Flot chart, we need four basic things:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>A reference to the correct Flot library files</li>
<li>A data array</li>
<li>A Flot plot statement</li>
<li>A div container to render the Flot plot</li>
</ol>
<div>
Let's look at the finished product first, then we'll break down what we're doing in the Narrative view:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.00.44%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="218" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.00.44%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Code for a simple Flot chart in a Narrative view</td></tr>
</tbody></table>
<div>
<b>Prefix</b></div>
<div>
There are three main things we are doing in the prefix of the Narrative view: </div>
<div>
<ol>
<li>Identifying our Flot javascript files</li>
<li>Initializing our script that will create the data array and generate the Flot chart</li>
<li>Initializing our data array</li>
</ol>
<div>
In the first step, you can see that the location of our .js files is a "flot" directory residing right off the base "server:9704" URL, or http://server:9704/flot. This is the application we created in <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a>. The other thing worth noting is that because we are using timeseries data, we must include the jquery.flot.time.js file. From there we just need to initialize our script with a simple <script> tag and initialize our data array by creating a variable "d".</div>
</div>
<div>
<br /></div>
<div>
<b>Narrative</b></div>
<div>
If you recall from <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a>, the Narrative section is nothing more than a loop through every row of the report, and we can reference data columns however we need to using the "@n" syntax. In this case, columns 5 and 6 of the report are the columns we want to plot in the chart, so we use a javascript "push" command to write records into the array for each row in our report.</div>
<div>
<br /></div>
<div>
<b>Postfix</b></div>
<div>
To end the code, we need to use the Flot command "plot" to generate the chart. In this case, our syntax is fairly simple in that we plan to render it using the name "placeholder", feed our data array "d" into the plot, and our xaxis will get intelligently rendered as a "time" axis (more on that in a moment). From there we add a simple end-script tag, and add a div tag to render the chart, calling our "placeholder" name and giving it whatever size we want. And voila:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.21.25%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.21.25%20PM.png" width="378" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The code with the finished product</td></tr>
</tbody></table>
<div>
The astute reader will notice that I have added "10000" in the <b>Rows to display</b> field in the Narrative view. Why did I do this? When I first coded the chart without any value in that field, as is the default for all Narrative views, the chart looked like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.26.03%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.26.03%20PM.png" width="380" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The same code, but with no value in "Rows to display"</td></tr>
</tbody></table>
<div>
Notice how the chart ends with the end of January? Why did it do that? I'm not sure, but adding a large value like "10000" into the <b>Rows to display</b> field forced it to render the entire chart. What's also interesting about this behavior is notice the difference in the x-axis between the two screenshots: the first one above uses month in the x-axis label and the second uses date in the label - all without me changing anything about the columns fed into the report. Thanks to our jquery.flot.time.js file, the chart is time aware based on how much data it needs to render. What if the end user could control this somehow, without having to go into the Narrative view definition?</div>
<div>
<br /></div>
<div>
That leads us to one of the cool interactive examples I mentioned in <a href="http://bit.ly/1pL8k2w" target="_blank">Part 1</a>: the ability to control the range of time displayed on the chart by dragging the desired range on a second "overview" chart. Think of this as master-detail linking in OBIEE, but on your master, you can actually drag and draw on the master chart. Let's look at how the code in this Narrative view differs from the first one:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.37.25%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="296" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%203.37.25%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Part 1 of our long scrolling Postfix field</td></tr>
</tbody></table>
<div>
Most of the differences are in the <b>Postfix</b> field, and since it's quite long, we'll look at it across multiple screenshots. But first, there are two main things added in the <b>Prefix</b> field to note: reference to a css file, demonstrating you can use css to control the look/feel of the charts, and reference to the jquery.flot.selection.js javascript file, which will allow us to draw on the one chart and use some code to bind that selection to the other.</div>
<div>
<br /></div>
<div>
How does this get assembled in our <b>Postfix </b>field? Before I get into that, I want to point out that I didn't code this by hand. Thanks to the examples on the Flot website, I was able to look at the source code and borrow quite a bit from the examples. If you're going to venture into building visualizations like this, be prepared to do this frequently, because the documentation typically only covers the basics and looking at the code for other visualizations will help you immensely, especially when we get to the more complex D3 in Part 3.</div>
<div>
<br /></div>
<div>
Back to our <b>Postfix </b>field, you can see we have our $.plot command like we had in the first example, but this time there are two distinct differences: we reference the "options" or configuration of the chart in a variable called "options" (surprise!), and we put the plot command in a variable called "plot" (surprise again!) so we can reference it later as we redraw the chart for a specific range. The "options" variable is handy when you have multiple options that you don't want to clutter a single $.plot command with. I actually trimmed some of the options from the example I found to simplify this example, but you can see I left in something like "tickLength" which controls the xaxis label tick mark length. It's worth stating again that OBIEE helps the developer by putting all of these controls in a properties box, but you're limited to the controls that it puts there. Now let's move further down the code:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.24.37%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="216" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.24.37%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Part 2 of our long scrolling Postfix field</td></tr>
</tbody></table>
<div>
Here were generating the second chart - the overview chart - and storing it in a different variable. In this case, the chart options are directly specified in the $.plot command, which makes for messy code (in my opinion). For the most part, these options should make logical sense to you, especially when you look at the finished product. Scrolling further down, now we get this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.28.21%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="235" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.28.21%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Part 3 of our long scrolling Postfix field</td></tr>
</tbody></table>
<div>
Thankfully, the developer who coded the example included some commentary that helps me explain this next section. First, we're using a $.bind command to have the "placeholder" chart listen to the overview chart (much like master-detail channels in OBIEE) and upon receiving a range from the overview chart, we update the "plot" variable with options that constrict the chart to the range selected. However, we don't want our overview chart to redraw itself upon drawing the range, so the next $.bind command simply sets the ranges and doesn't update the overview $.plot variable. We end with the rendering code:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.46.11%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.46.11%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Part 4 of our long scrolling Postfix field</td></tr>
</tbody></table>
<div>
The only thing different about this code is that we're rendering two div containers and referencing the css class to format the charts, which look different from our first example in that they have white backgrounds and nice shadowboxes, as seen below:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.50.05%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="312" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.50.05%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The finished product with no range selection</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
And our ability to select a range looks like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.52.22%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="312" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-02%20at%204.52.22%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The finished product with a range selected on the overview chart</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
That concludes Part 2 and two simple examples of generating charts using Flot. <a href="http://bit.ly/QzQsel" target="_blank">Part 3</a> will examine how D3 works to generate its visualizations.</div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com3tag:blogger.com,1999:blog-8823970373652902952.post-76700365060777492882014-04-02T09:34:00.003-05:002014-04-21T09:51:13.948-05:003rd-Party Visualizations in OBIEE - Part 1It's been awhile since I've posted anything substantial on the blog here, so I thought I'd blogify the presentation I gave at the <a href="http://biwasummit.com/" target="_blank">BIWA Summit</a> and also plan to give at both the <a href="http://www.rittmanmead.com/2014/03/rittman-mead-bi-forum-2014-now-open-for-registration/" target="_blank">2014 BI Forum</a> in Atlanta as well as the upcoming <a href="http://kscope14.com/" target="_blank">Kscope '14</a> in Seattle.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioI19T9hg-PnhNwtgs1auDot4_YaQiUvkeX7vD2ALXrQGq1hqo2ufxJ4i1PYC0wZE1yc6phKBWg1cZ2VEJhuB6sYLhSSyIINUAJWZdUjEIoYy8z5OXkpGAdT8k9wZVKZI193Ax45oxSMc/s3200/Screen+Shot+2014-04-01+at+4.20.52+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioI19T9hg-PnhNwtgs1auDot4_YaQiUvkeX7vD2ALXrQGq1hqo2ufxJ4i1PYC0wZE1yc6phKBWg1cZ2VEJhuB6sYLhSSyIINUAJWZdUjEIoYy8z5OXkpGAdT8k9wZVKZI193Ax45oxSMc/s3200/Screen+Shot+2014-04-01+at+4.20.52+PM.png" height="295" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Not your daddy's OBIEE chart, is it?</td></tr>
</tbody></table>
The presentation is entitled "Adding Third-Party Visualizations to OBIEE" and it revolves around the blossoming world of data visualization. Whether you're a Stephen Few fan or foe, it's hard to ignore the weight that more advanced and more interactive visualizations carry in today's data-centric world.<br />
<br />
Sadly, OBIEE's visualization capabilities haven't advanced with the times, and while we have received updates like waterfall charts, trellis charts, and performance tiles, there are still ways in which Oracle could both improve the existing visuals and add new ones. Fortunately, there's a way to complement Oracle's out-of-the-box visualizations with third-party visualization capabilities. In Part 1, I'm going to write about why you'd do that (and how you'd get started), and in <a href="http://bit.ly/1ip8Bn9" target="_blank">Part 2</a> and <a href="http://bit.ly/QzQsel" target="_blank">Part 3</a> I'll deep-dive into some examples.<br />
<br />
I've already touched upon why you would do this, but I'll break it down further into three discrete reasons with a single example in each one. I give many more examples in my presentation, but for the brevity of the blog, I'll stick to one for now.<br />
<br />
<b>1. Add new capabilities to existing OBIEE chart types</b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.00.10%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="143" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.00.10%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Look a little bit closer</td></tr>
</tbody></table>
How many times have you received a request that you just couldn't meet with OBIEE's chart types because Oracle didn't give you enough ability to customize the chart? The example above shows a line/bar combo chart, which OBIEE supports just fine. However look closely at the chart above and you'll notice a third Y-axis off to the far right for "Sea-Level Pressure." Try as you might in OBIEE, there is no option to put a third distinct Y-axis in a line/bar combo chart. Oh sure, you can map three metrics, but if the metrics don't have the same unit of measure or the same scale, you're screwed. As an added bonus in the chart above, the legend actually overlays on the chart itself, saving space.<br />
<br />
<b>2. Add more interactivity to existing OBIEE chart types</b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.17.20%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.17.20%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Wait...can I click and drag on that lower chart?</td></tr>
</tbody></table>
It's very common in Business Intelligence for us to visualize data over time, specifically using a line chart. Unfortunately, fixed chart sizes don't always handle very granular or voluminous data very well. While OBIEE has the "zoom" feature that allows the user to customize the zoom of the X and/or Y-axis, that feature isn't quite as slick as it could be. The above screenshot demonstrates the value of two linked line charts of the same data: one meant to show a simple trend over the entire duration, and one meant to show the details of the selected range in the first chart. Yes, that's right: you can drag a range on the lower chart, and the upper chart will reflect just that range. Try doing that in OBIEE (actually, I'll show you how to do this in Part 2)!<br />
<br />
<b>3. Add brand new visualization types</b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.28.42%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="118" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-02%20at%2011.28.42%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Eat your heart out, Stephen Few!</td></tr>
</tbody></table>
It's a shame that I'm only showing one example per reason, as there are many cool examples I could include here, but the basic premise is that you're adding a brand new chart type. From bullet charts (above) to calendar views to timelines to sunbursts to treemaps, the options are endless. More importantly, you aren't locked into very generic visualizations for very industry specific things. A company once came to me wanting to visualize a patient's timeline from disease inception to death and I had to try to cobble that together in a pivot table - not fun. Little did I know that other options were available outside of OBIEE!<br />
<br />
<b>Options, Considerations, and Getting Started</b><br />
<br />
There are three basic approaches to adding third-party visualization capabilities to OBIEE:<br />
<br />
<ol>
<li>Call an external (cloud) service</li>
<li>Call a secondary product that integrates well with OBIEE</li>
<li>Call a java library stored on the OBIEE server as a deployed application in WebLogic</li>
</ol>
<div>
I'm not going to focus on the second option, as this basically involves using R and Oracle R Enterprise. Mark Rittman recently posted an <a href="http://www.rittmanmead.com/2014/03/using-oracle-r-enterprise-to-analyze-large-in-database-datasets/" target="_blank">article</a> on how to use R to analyze large databases and plans a follow-up article on how to call R models from OBIEE. While this is useful for statistical processing of data, R also contains a very robust library of visualization capabilities that can be leveraged in OBIEE. Since this is a much different process than the java method I plan to write about, I'll point you to Mark's articles instead.</div>
<div>
<br /></div>
<div>
In the first approach, you are primarily calling out to a hosted third-party service, like Google's Chart API. In this scenario, you are literally passing the data required to generate the chart to Google's service, and they are sending back the rendered chart. There are pros and cons to this approach, with a major con being that your data leaves your firewall, but since you are primarily using the OBIEE Narrative view to accomplish this passing, I'm going to skip this approach as well, since I'll cover the OBIEE Narrative view in approach three.</div>
<div>
<br /></div>
<div>
With approach three, there are four basic steps you follow:</div>
<div>
<ol>
<li>Download a java library from any number of either paid or open sources charting engines, </li>
<li>Store the files on the OBIEE server</li>
<li>Expose those files as an application in WLS</li>
<li>Call the files in a Narrative view in OBIEE using javascript</li>
</ol>
<div>
I'm going to focus on two different engines over the course of this blog entry and parts 2 and 3: Flot and D3.</div>
</div>
<div>
<br /></div>
<div>
Flot is the easier of the two to use and it can be found at <a href="http://flotcharts.org/">flotcharts.org</a>. However, Flot also sticks to the core visualizations that OBIEE already has (line, bar, etc), so a decision to use Flot is going to be more about finer grained control over the charts and more interactivity.</div>
<div>
<br /></div>
<div>
If Flot is about more control over the basics, then D3 is all about the sizzle. You can download D3 from <a href="http://d3js.org/">d3js.org</a> and once there, you'll see what I mean. Take some time to browse through the <a href="https://github.com/mbostock/d3/wiki/Gallery" target="_blank">examples</a> and you'll see very quickly that the world of visualizations that you know are just the tip of the iceberg.</div>
<div>
<br /></div>
<div>
In both instances, there is a package of files that you must download to your OBIEE server. From there, you'll deploy that package to WLS as an application that you can then easily reference in a Narrative view as if it were a root directory off http://server:9704/. Here are the rough steps to do that.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.39.18%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="253" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.39.18%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Copy WEB-INF from analyticsRes to your visualization engine folder</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
1. Decide where to install the files. You can skip these steps by dropping the files in a folder inside analyticsRes, since that is already deployed to WLS, but there are reasons you may not want to do this. Regardless, you will want to copy the WEB-INF directory from analyticsRes into your library folder (flot in the above screenshot) because it contains a crucial file (web.xml) that instructs WLS to treat this folder as a deployable web application.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.56.33%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.56.33%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Adding an application by its path</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
2. Log into WLS, go to <b>Deployments</b> in your domain structure, click the <b>Lock & Edit</b> button, and select <b>Install</b>. This will take you to the screenshot above where you will past the full path to the library directory. I'm using SampleApp 309R2 and installing Flot at the same level as analyticsRes. You can see the full path in the screenshot. Typing Enter after you paste the path should move you to the next screen, thanks to the WEB-INF folder.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.56.57%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.56.57%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Deploy to the entire cluster</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
3. On the next screen, you'll choose <b>Install this deployment as an application</b> and click <b>Next</b>, which will take you to the screen in the screenshot above - or at least something like it. Depending on your environment, this screen could look different. In general, you'll want to make this application available to all machines in the cluster, so that will most likely be your consistent choice here. There may be an argument for/against using the WLS AdminServer, but I'm not savvy enough in WLS to make that argument.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.59.04%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.59.04%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Activate your changes</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
4. On the next screen, make sure to select <b>I will make the deployment accessible from the following location</b> before clicking <b>Finish</b>. From there you'll be returned to the list of deployments and you can page through the list until you find yours, as I have done in the screenshot above. You'll notice the <b>Activate Changes</b> button is present, which means we'll need to do that now.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.59.31%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-04-01%20at%209.59.31%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Start servicing requests on the application</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
5. After activating the changes, the application will now be in a <b>Prepared</b> state, as in the screenshot above, and we can start the application by checking the checkbox next to it and selecting <b>Servicing all requests</b> from the <b>Start</b> menu. The application will now change to an <b>Active </b>state and you're finished here.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The last thing I want to do before ending this blog post is to quickly review how the Narrative view works in OBIEE, because this will be your primary interface to construct any visualization using Flot, D3, or any of the other libraries available.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-05%20at%2012.51.01%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-01-05%20at%2012.51.01%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Basic Narrative view in SampleApp</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Above is a screenshot from a Narrative view in SampleApp, and below is a description of each of the fields in the view:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li><b>Narrative</b> - this is the core field of the view which basically acts as a loop for every row in the report, or the value set in <b>Rows to display</b>. As you can see in the screenshot, we are able to reference criteria columns using the "@n" syntax where n equals a column's position in the criteria. You can type whatever text you want, insert "@n" where you want to reference a data value, and can format the text using simple formatting options or HTML markup.</li>
<li><b>Prefix </b>- this is simply a block of text that gets rendered before the <b>Narrative </b>block.</li>
<li><b>Postfix </b>- this is simply a block of text that gets rendered after the <b>Narrative</b> block.</li>
<li><b>Rows to display</b> - as mentioned before, you can control how many rows get rendered in the <b>Narrative</b> block by hard coding this to a specific value, or leave it blank to grab everything.</li>
<li><b>Row separator </b>- if you need to insert a block of text or markup between each row (handy if you want to put the rows into an HTML table), you can enter it here.</li>
</ul>
<div>
Now that you have a library deployed and understand the basics of the narrative view, I'll show you how to reference the library in <a href="http://bit.ly/1ip8Bn9" target="_blank">Part 2</a>.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com5tag:blogger.com,1999:blog-8823970373652902952.post-53669051673394053492014-03-06T09:59:00.002-06:002014-03-06T09:59:22.067-06:00Real Time BI Episode 18 PostedEpisode 18 has been posted <a href="http://bit.ly/1ifyZV6" target="_blank">here</a>. This is Part 2 of our conversation with Uli Bethke from Sonra and Alex Shlepakov from Accenture. We continuing discussing all things ODI, including the new version 12c, comparisons to other ETL tools, ODI in the BI Applications, and integration with the world of Hadoop.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQL5gz4-JitRhmp9flJypS2bQqq8uv9qCUi66JNvNTDV1o8hG_ezA9s965wbsyh0DOsYyHvGrgg8yC_uIv8CkFVqpE8LDvrKcFK3yRS28iHGgdoKVNyhOgArc9XthNsYgK67Tt6f5cSEM/s1600/realtimebi_podcast.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQL5gz4-JitRhmp9flJypS2bQqq8uv9qCUi66JNvNTDV1o8hG_ezA9s965wbsyh0DOsYyHvGrgg8yC_uIv8CkFVqpE8LDvrKcFK3yRS28iHGgdoKVNyhOgArc9XthNsYgK67Tt6f5cSEM/s1600/realtimebi_podcast.jpg" height="200" width="200" /></a></div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-45281318470740614352014-02-25T13:33:00.003-06:002014-02-25T13:33:34.455-06:00Real Time BI Episode 17 PostedEpisode 17 has been posted <a href="http://bit.ly/1cMp4Sn" target="_blank">here</a>. Uli Bethke from Sonra and Alex Shlepakov from Accenture join us to talk about all things ODI, including the new version 12c, comparisons to other ETL tools, ODI in the BI Applications, and integration with the world of Hadoop.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiulOn2SERbKYL4SdIpkNYQoNe2B9OFeAqve1reCd-wvcY_KLZmqdHIjvQ55pe_ITdj5a9KxRCWKrJcLbNxj5dXqCAgfgcBcn-osdlyPBJkYKDwE5Yai48tHj3LiPm2vDBWorjm7KyYlxs/s1600/realtimebi_podcast.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiulOn2SERbKYL4SdIpkNYQoNe2B9OFeAqve1reCd-wvcY_KLZmqdHIjvQ55pe_ITdj5a9KxRCWKrJcLbNxj5dXqCAgfgcBcn-osdlyPBJkYKDwE5Yai48tHj3LiPm2vDBWorjm7KyYlxs/s1600/realtimebi_podcast.jpg" height="200" width="200" /></a></div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-22402229505845797332014-02-05T10:47:00.002-06:002014-02-05T10:48:52.088-06:00Multiple Data Sources in MADWow...I am way behind on blog posts, so here's a quick one. I was talking to someone who was bummed that you couldn't have multiple subject area data sources in a BI MAD application. In my head I was thinking, "well, you can in BIP, but it's not obvious how to do it," so maybe there's a similar situation in BI MAD. It turns out there is a way to do it.<br />
<br />
Here's Oracle's Airline Delay App in SampleApp V309R2:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK0fXwUQqXvVTbCpflErgK-udPgjYBsO77skkFg99pZ65kqLqD_NOg-YpcVrVQDpHAbi15l5GI8pPbXcypIzVqOYgOBq4IinFRvEieSkN30nQpRdMrAJEz0AgsB0YQ7PCLxBmdT0SnX0w/s1600/Screen+Shot+2014-02-05+at+10.21.03+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK0fXwUQqXvVTbCpflErgK-udPgjYBsO77skkFg99pZ65kqLqD_NOg-YpcVrVQDpHAbi15l5GI8pPbXcypIzVqOYgOBq4IinFRvEieSkN30nQpRdMrAJEz0AgsB0YQ7PCLxBmdT0SnX0w/s1600/Screen+Shot+2014-02-05+at+10.21.03+AM.png" height="220" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Airline Delay mobile app with one subject area data source</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Notice on the left-hand side that the subject area "X - Airlines Delay" is listed as the source for this application. That's all well and good, but what we if we want some of the pages of the application to come from a different subject area? When we first built the application, there wasn't an option to select more than one subject area. Well, just like in BIP, you have to add it after you select the first. To do that, use the <b>Setting</b> drop down in the upper right:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.21.56%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="181" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.21.56%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Data Source option allows you to add more data sources</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Select the <b>Data Source</b> option and you get the following window:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.23.09%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="292" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.23.09%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Notice we have access to all subject areas, not just ones from the same business model</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Here we can select as many subject areas as we like and move them over to the right. Let's move over "X - Airlines Traffic":</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.23.48%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="292" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.23.48%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The controls in the middle allow you to add more to the right.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
From there we can click <b>Finish</b> and now our designer window looks like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.24.56%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202014-02-05%20at%2010.24.56%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The same designer window as before, now with two subject areas</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Notice we now have both subject areas on the left to choose from when building pages in our application. Sweet!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now, this doesn't really cover best practices for doing this, nor does it dive into the various limitations, but at the end of the day, a mobile application built by MAD is not restricted to just one subject area, it's just not super obvious how to enable it.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-89395776061875358802014-01-06T15:16:00.001-06:002014-01-07T19:19:11.047-06:00It's The End Of The BI World As We Know It (And I Feel Fine)<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtw60lCeyJ5l_C9q6SQlUc-Ljqaz15_bjvrIAzoLdKC4dJNkQzbrVQAL_htVj1cI-n8v-NiTd_DMsmmLsD4seq6IXIEvSpGGV-WHIySigbsocWoTykPjyat7SqqyjJx3D5kRzOqSRlmPI/s1600/Chaos-of-2012.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtw60lCeyJ5l_C9q6SQlUc-Ljqaz15_bjvrIAzoLdKC4dJNkQzbrVQAL_htVj1cI-n8v-NiTd_DMsmmLsD4seq6IXIEvSpGGV-WHIySigbsocWoTykPjyat7SqqyjJx3D5kRzOqSRlmPI/s1600/Chaos-of-2012.jpg" height="274" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A great way to start the year, eh?</td></tr>
</tbody></table>
Happy New Year!<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: left;"><tbody>
<tr><td></td></tr>
</tbody></table>
I took a bit of a hiatus from writing on the blog over the holidays, but a topic has been stewing in my brain for awhile. In the <a href="http://bit.ly/1fwt4Gh" target="_blank">latest episode</a> of <a href="http://www.youtube.com/user/realtimebi" target="_blank">Real Time BI with Kevin & Stewart</a>, I asked the Buy/Sell question, "It's the end of the BI world as we know it (and I feel fine)." If you're not familiar with the popular R.E.M. song, feel free to view it <a href="http://youtu.be/Z0GFRcFm-aY" target="_blank">here</a>. The video itself is a bit perplexing until you get to the end, and one can easily argue the lyrics are just as perplexing, but the chorus is an interesting anthem for your world being turned on its head and having to deal with that. Anyway, in the episode of our show, neither Stewart nor our two guests were willing to "Buy" into that statement, with the dominant explanation being that BI is just evolving, companies still have a hard time producing reports, and BI isn't going away. However, by virtue of the way Stewart and I run the Buy/Sell segment, I didn't give my response, and I'd like to do that here.<br />
<br />
I'm a longtime R.E.M fan, so I couldn't resist using the title of that song to frame the question, but the reality is that I believe Stewart and our two guests put their response emphasis on the first part of the title "It's the end of BI," rather than the last part "as we know it (and I feel fine)." My posing of that topic in Buy/Sell wasn't meant to question whether BI is dead (long live BI), but rather if it's dead <i style="font-weight: bold;">as we know it</i>, and I believe it is.<br />
<br />
To explain my beliefs in more detail, it's important to define what I mean by "as we know it." For all intents and purposes, BI has been the same for many years: acquire transactional data from enterprise systems, de-normalize it, and put a BI tool on top of it to produce some reports based on some requirements you gathered. Packaged BI applications may have evolved the implementation a little bit, but the general process is still the same. Very rarely do we advocate reporting on the transactional data where it originated, reporting on normalized data (unless you're a Teradata fan), nor do we force report requirements to tie to some larger business ROI. If the business users ask for it, we deliver it, regardless of how valuable that report is in the grand scheme of delivering business ROI, because frankly, the people providing us the requirements aren't often held accountable to such a metric, nor are the projects themselves measured upon delivering any such ROI; BI is about producing reports, and we all need reports.<br />
<br />
I believe there is a perfect storm and convergence of things happening in the world right now that will change how companies and implementation professionals look at BI projects in the near future, possibly as early as 2014 (and you just knew I was going to tie this to some grand New Year's post, didn't you?).<br />
<ul>
<li><b>Analytics as a competitive advantage</b> - Companies are starting to explore more pointed activities in the world of analytics around delivering a very hard ROI. It's not enough to say "I need a Sales data mart;" instead they're asking, "I need to know whether I should introduce a new business model where I lease product X to my Y customers instead of selling it." Companies are also (rightfully) questioning the wisdom of spending a lot of time and money to build a giant data warehouse when there aren't clearly defined ROI benefits for the investment. I believe in the very near future we will start to receive requirements around enabling very specific analytical capabilities rather than building structures and reports that service many vague, loosely defined questions.</li>
<li><b>The business wrestling technical control away from IT</b> - There are a few things going on here that all relate to this general theme. First is the rise of the anti-IT BI tools, like Tableau and Qlikview. More and more business users are circumventing IT to invest in tools that enable them to move faster and do more, rather than waiting around for something big to happen. Whether that trend continues or not, traditional vendors are being forced to evolve to combat this and make their delivery capabilities faster and less technical. In addition, more business people are more technical than ever. They aren't necessarily java coders, but they aren't calling IT anymore asking how to reboot the computer. As our society ages and technology is a part of everyday life from the moment you leave the womb (sometimes even before), the less distinction there is between the "business person" and the "technical person."</li>
<li><b>Speaking of technology, it has finally exploded in this space</b> - Sure, Moore's law insured that our database and application servers were getting more powerful, and web technology allowed us to move from thick client tools to thin ones, but we really haven't experienced major technology disruptions like we are on the precipice of today. Cloud, In-Memory, and Big Data technologies are all going to challenge the long-held data architecture principles we believe in. Those traditional rules of taking the transaction data out of a system, de-normalizing it, and loading it into another system are running smack into distinctions between on-premise and off-premise data, in-memory capabilities, and the very need for an expensive relational database in the first place. While this may not be an overnight thing, I'd be willing to bet that many of you BI professionals reading this blog will need to deal with, or make design decisions around any of the following: 1) cloud-based data, 2) cloud-based BI, 3) analyzing normalized data, or 4) using Hadoop as a data source for your BI tool.</li>
<li><b>This ain't your grandfather's data</b> - I hesitate to include this one, because it's a little cliche, but the variety of possible analytical data sources in this day and age is already insane and will continue to grow. The amount of data being generated by the permeation of technology into our daily lives is growing rapidly and will continue to grow to the point where nearly every thing we do is logged, and companies are going to want to know if that data is useful to make more money from you.</li>
<li><b>And that amount of data scares us</b> - Only those of us who have worked on HR projects have any notion of the consternation that comes from having access to potentially sensitive information. Given recent news stories around government data mining that potentially violates privacy laws, you can bet that all kinds of scrutiny will invade the world of business analytics. How that changes our approach to BI will unfold over time, but we're at that threshold of "with great power comes great responsibility" (to borrow a phrase) as we expand in all kinds of directions to analyze data. With the exception of some minor inconveniences over things like Sarbanes-Oxley, we haven't experienced scrutiny like this before.</li>
</ul>
<div>
I think 2014 is going to prove to be that year we look back upon as the genesis of a real change in how we do things in our professional space. You are free to disagree with me, of course, but I feel It's The End Of The BI World As We Know It. I do feel fine, however, as I believe I am very conscious of these changes that are happening, I'm acquiring new skills to adapt to the changing world, and whatever parameters come along for the ride, the need to analyze data will only increase. That's a good thing for someone working in this space.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com2tag:blogger.com,1999:blog-8823970373652902952.post-26304762535730733702013-11-25T14:35:00.001-06:002013-11-25T14:38:46.920-06:00Oracle BI Blogroll<div dir="ltr" style="text-align: left;" trbidi="on">
I'm working on a number of things right now that I can't write about, but I thought I'd take this down week in the US to highlight the work of others I admire and help spread the word of others out there writing about Oracle Analytics. It's important to remember that no one single person knows everything and having access to variety of resources in this space is key. I learn things every day from these great resources and writers, so in attempt to spread the wealth, here are a variety of blogs you should follow.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8D37e7fX2wLGfxXjCiKIfS9Fb5_bG5Gos8Is6ns9lxtyoutwSFovEqpu7JmEWNoan2BWTaIppQWDfFae2VgEKvcgTkc0z91AX8RFE60f_iiMv2OOGAnfqdB5U_NWq6CPHVYgqfPUk9AU/s1600/blog-word-cloud1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8D37e7fX2wLGfxXjCiKIfS9Fb5_bG5Gos8Is6ns9lxtyoutwSFovEqpu7JmEWNoan2BWTaIppQWDfFae2VgEKvcgTkc0z91AX8RFE60f_iiMv2OOGAnfqdB5U_NWq6CPHVYgqfPUk9AU/s200/blog-word-cloud1.jpg" width="200" /></a></div>
<br />
<b>Consulting Firms</b><br />
<i>Rittman Mead</i><br />
Chances are that if you're following me, you're following them, too, but in case you aren't, this is the first stop on the list.<br />
<a href="http://www.rittmanmead.com/blog">http://www.rittmanmead.com/blog</a><br />
<i><br /></i>
<i>Clearpeaks</i><br />
Clearpeaks publishes some pretty detailed stuff on their blog.<br />
<a href="http://www.clearpeaks.com/blog/oracle-bi-ee-11g">http://www.clearpeaks.com/blog/oracle-bi-ee-11g</a><br />
<br />
<i>KPI Partners</i><br />
KPI is a good place to get information on the BI Applications, among other Oracle BI info.<br />
<a href="http://www.kpipartners.com/blog">http://www.kpipartners.com/blog</a><br />
<br />
<i>Vlamis Software Solutions</i><br />
Dan Vlamis is an Oracle ACE and he and his brother Tim, who have both been guests on <a href="http://www.youtube.com/user/realtimebi" target="_blank">Real Time BI with Kevin & Stewart</a>, are very knowledgable in Oracle R Enterprise and Oracle Data Mining.<br />
<a href="http://www.vlamis.com/blog">http://www.vlamis.com/blog</a><br />
<br />
<b>Individuals</b><br />
<i>Christian Screen</i><br />
Christian is an Oracle ACE and along with writing about great Oracle BI stuff, he also writes about his add-software, <a href="http://www.biteamwork.com/" target="_blank">BI Teamwork</a>.<br />
<a href="http://www.artofbi.com/">http://www.artofbi.com</a><br />
<br />
<i>Jeff McQuigg</i><br />
Jeff is also an Oracle ACE and has been in the Oracle BI business a long time. He has great creative ideas and is very practical in what he does. As a side note, he's probably the only person I know who runs OBIEE on his personal website about his beer collection.<br />
<a href="http://greatobi.wordpress.com/">http://greatobi.wordpress.com</a><br />
<br />
<i>Christian Berg</i><br />
I met Christian at Rittman Mead's BI Forum in the UK. There is probably no single person who knows more about the guts of OBIEE than Christian. He's also great for a chat about all things in Geekdom.<br />
<a href="http://hekatonkheires.blogspot.com/">http://hekatonkheires.blogspot.com/</a><br />
<br />
<i>Daan Bakboord</i><br />
Like Christian, I also met Daan at the BI Forum. He's a smart guy, a meticulous note taker, and has great ideas on Oracle BI.<br />
<a href="http://obibb.wordpress.com/">http://obibb.wordpress.com/</a><br />
<br />
<b>Unique</b><br />
<i>Addidici's OBIEE News Aggregator</i><br />
Adrian Ward is one of the co-authors of a great OBI book and his company provides a great service: aggregating OBIEE news. Check it out!<br />
<a href="http://www.addidici.com/index.php/obiee-news/">http://www.addidici.com/index.php/obiee-news/</a><br />
<br />
<b>Endeca Specific</b><br />
<i>Real Decoy</i><br />
I haven't met these guys in person yet, but I've interacted with them a bit.<br />
<a href="https://www.realdecoy.com/world/">https://www.realdecoy.com/world/</a><br />
<br />
<i>Branchbird</i><br />
I met the folks from Branchbird at an Oracle meeting in Chicago and they're great. smart people.<br />
<a href="http://branchbird.com/blog/">http://branchbird.com/blog/</a><br />
<br />
<i>Endeca123</i><br />
I don't know these guys personally, but they write great stuff.<br />
<a href="http://www.endeca123.com/">http://www.endeca123.com/</a><br />
<br />
<b>Oracle</b><br />
Oracle has a number of good blogs run by product management. Here are a few of my favorites.<br />
<br />
<i>Exalytics and OBIEE</i><br />
<a href="https://blogs.oracle.com/ExalyticsOBIEE/">https://blogs.oracle.com/ExalyticsOBIEE/</a><br />
<br />
<i>BI Mobile App Designer</i><br />
<a href="http://www.oracleappdesigner.com/">http://www.oracleappdesigner.com</a><br />
<br />
<i>Oracle BI Applications</i><br />
<a href="https://blogs.oracle.com/biapps/">https://blogs.oracle.com/biapps/</a><br />
<br />
<i>Oracle R Enterprise</i><br />
<a href="https://blogs.oracle.com/R/">https://blogs.oracle.com/R/</a><br />
<br />
So there you have it. Spread the word around and support these great bloggers. Please keep in mind this is certainly not an exhaustive list and that I've also avoided people who blog about the database and database related technologies to keep this post from taking 4 years to write. :)</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com2tag:blogger.com,1999:blog-8823970373652902952.post-24936928649865696902013-11-19T10:16:00.002-06:002013-11-19T10:32:30.139-06:00Real Time BI Episode 16 PostedEpisode 16 has been posted <a href="http://bit.ly/1fwt4Gh" target="_blank">here</a>. This is part 2 of our post-OpenWorld 2013 discussion with Tony Heljula and Dan Vlamis. You won't want to miss the buy/sell segment where we ponder the future career of a key member in the Oracle BI community based on the announcements at OpenWorld. Are we about to lose a key expert? Tune in to find out...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_CPSvc3GQmy6Zvmmvi3ytzPYKmecbWuAzzpfd9qxns1bG43BTt-coho5Z-07Z4E779UZhfohViyZQXUqXaXiCiKDC9ni9fHQV9reiXALU_SDRpvYDIYwchDDksCkXhmHZ12usUvqbank/s1600/realtimebi_podcast.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_CPSvc3GQmy6Zvmmvi3ytzPYKmecbWuAzzpfd9qxns1bG43BTt-coho5Z-07Z4E779UZhfohViyZQXUqXaXiCiKDC9ni9fHQV9reiXALU_SDRpvYDIYwchDDksCkXhmHZ12usUvqbank/s200/realtimebi_podcast.jpg" width="200" /></a></div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-30391495416433938432013-11-08T10:37:00.002-06:002013-11-08T10:37:52.200-06:00Endeca 3.1 ReleasedEndeca Information Discovery 3.1 was released yesterday, which introduces some interesting new features:<br />
<br />
<ul>
<li>Self-service data mashup for more than one data source</li>
<li>More self-service data types</li>
<li>Tighter integration with the Oracle BI Server</li>
<li>Enhanced drag-and-drop layouts</li>
<li>Using ODI to load the Endeca Server for IT-driven applications</li>
<li>...and much more</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLl1TVsNZ6KTTsS_Da01ROPcktkpnFco-o9N93lJxu7teKy-ZjHvf0CoZlh5Gypsgg-mfTHAVA7Svscnol1IdpJRnhG3SHEDnjfbc5QvdNsrwyxxAvtoSr5UJNSMycTsWLsi81NSI8JJg/s1600/Screen+Shot+2013-11-08+at+10.11.21+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLl1TVsNZ6KTTsS_Da01ROPcktkpnFco-o9N93lJxu7teKy-ZjHvf0CoZlh5Gypsgg-mfTHAVA7Svscnol1IdpJRnhG3SHEDnjfbc5QvdNsrwyxxAvtoSr5UJNSMycTsWLsi81NSI8JJg/s320/Screen+Shot+2013-11-08+at+10.11.21+AM.png" width="320" /></a></div>
<div>
You can view the full release <a href="https://emeapressoffice.oracle.com/Press-Releases/Oracle-Democratizes-Data-Discovery-with-Oracle-Endeca-Information-Discovery-3-1-40c1.aspx" target="_blank">here</a> and a PDF of the new features is located <a href="http://www.oracle.com/us/solutions/ent-performance-bi/business-intelligence/eid-whats-new-2051283.pdf" target="_blank">here</a>. I'm excited for this new release because I believe it takes OEID more in the direction that I think it's well suited for: power user ad hoc analysis. I've been writing about that <a href="http://oranalytics.blogspot.com/2013/09/my-perspective-on-oeid-part-4.html" target="_blank">here</a> and while I've taken a little bit of a break from those posts, I'll be picking up that thread again shortly.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-91445871818879353952013-11-04T09:26:00.004-06:002013-11-04T09:26:45.917-06:00Real Time BI Episode 15 PostedIf you haven't noticed from following my <a href="https://twitter.com/kevin_mcginley" target="_blank">Twitter</a> account, subscribing on <a href="http://www.youtube.com/user/realtimebi" target="_blank">YouTube</a>, or subscribing on <a href="http://bit.ly/realtimebi" target="_blank">iTunes</a>, I posted episode 15 of Real Time BI with Kevin & Stewart last week. Our guests included ACE Dan Vlamis from <a href="http://www.vlamis.com/" target="_blank">Vlamis Software Solutions</a> and Technical Director Antony Heljula from <a href="http://www.peakindicators.com/" target="_blank">Peak Indicators</a>. Episode 15 is part one of our two-part episode covering a variety of announcements from Oracle OpenWorld. While there were too many announcements to cover everything, we hit the big announcement in part one: the in-memory database option for Oracle Database 12c. There are some potential impacts on Exalytics with this announcement, and we get into that as well. Check it out!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBOuKMrlugwvAPeTFucFqo5A-P2Idrj_4I_bW9vo1CmOyCeuY9ADIlKp7drdkhvUXqCjxKgKRAFUw2mpN1rL1mc5aCfKX3_fnLhiUTgAxpqNO9HXsRRPlhvPkrXFPjyPlB7TyRE9kVOMM/s1600/realtimebi_podcast.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBOuKMrlugwvAPeTFucFqo5A-P2Idrj_4I_bW9vo1CmOyCeuY9ADIlKp7drdkhvUXqCjxKgKRAFUw2mpN1rL1mc5aCfKX3_fnLhiUTgAxpqNO9HXsRRPlhvPkrXFPjyPlB7TyRE9kVOMM/s200/realtimebi_podcast.jpg" width="200" /></a></div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-21450868227822881402013-10-29T15:04:00.001-05:002013-10-29T15:42:58.614-05:00OBIEE Adoption: Help From The WebComing out of another conversation I had with someone at OpenWorld, I thought I'd spend a short post on how the little things you do can help drive user adoption. While nothing will ever take the place of clean, accurate data with useful dashboards to explore it, you can help drive OBIEE adoption in your organization by turning OBIEE into more of a central hub of information for your users. Let's face it, the "if you build it they will come" mantra doesn't always work for BI dashboards, so if you can help things along by turning OBIEE into a portal of many different types of information, users may be more compelled to log-in. While not a fantastic portal technology by any stretch, OBIEE is enclosed by a web-based, portal like shell...that is free. If your organization lacks any kind of portal to drive users to OBIEE, create one in OBIEE itself!<br />
<br />
Below is a simple dashboard page with zero OBIEE content on it:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiVoQRMXJm28HWjjRtNE3LWAYFXxWYDXZ8TmiNe1R9zZn7UkMCSHKV83abTggrNFhEfxbyIWuI4LR1TPclqFyzHN1xY67SJ6iCeaRw8Fp0drESfhKFsX03qurguXmWQVBtRtnMM3-PNk4/s1600/Screen+Shot+2013-10-29+at+2.20.32+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiVoQRMXJm28HWjjRtNE3LWAYFXxWYDXZ8TmiNe1R9zZn7UkMCSHKV83abTggrNFhEfxbyIWuI4LR1TPclqFyzHN1xY67SJ6iCeaRw8Fp0drESfhKFsX03qurguXmWQVBtRtnMM3-PNk4/s400/Screen+Shot+2013-10-29+at+2.20.32+PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">No OBIEE content here</td></tr>
</tbody></table>
What it does have are web widgets from two different companies, TradingView and Feedzilla, that allow you to create a simple "landing" page for your users to entice them to come into OBIEE. Both widgets are pretty cool and fairly customizable, and dead simple to embed into OBIEE.<br />
<br />
<b>TradingView</b><br />
<br />
Simply put, Oracle could take some queues from TradingView on how to design a cool chart. They have all kinds of options, but their free <a href="https://www.tradingview.com/widget/" target="_blank">widget</a> is what you're after. A few simple configurations allows you to generate code that you can copy:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.37.31%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="256" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.37.31%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">TradingView stock widget configuration</td></tr>
</tbody></table>
...and paste into a text object in your OBIEE dashboard editor (make sure you check the "Contains HTML Markup" checkbox):<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.17.55%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.17.55%20PM.png" width="398" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Pasting the TradingView code into a text object in OBIEE's dashboard editor</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
You can play around with the options, but I like the "Show News" and "Show Ideas" which add extra layers of information to the widget from user comments to news from the web. The chart itself is highly interactive and your starting stock symbol can be changed, chart styles can be changed, and users can even compare symbols against each other:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.42.11%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="307" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.42.11%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">TradingView's chart supports many features and chart styles</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
<b>Feedzilla</b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you're just after some basic news information to plug into an existing dashboard, you create a small, scrolling news box using Feedzilla's <a href="http://widgets.feedzilla.com/news/builder/index.html" target="_blank">widget</a>. Again, you have some basic configuration options, including what search term you want to use for the newsfeed:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.44.38%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="356" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.44.38%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Feedzilla's widget builder</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
...and from there you can click the "Grab The Code" button to copy the code:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.44.49%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="363" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.44.49%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Again, just copy the code</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
...and paste it into a text object in your OBIEE dashboard editor:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.16.17%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-29%20at%202.16.17%20PM.png" width="472" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">And paste it into a text object; I recommend deleting the highlighted code above</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
I'd strip out the code highlighted in yellow in the screenshot above to remove their "Get Your News Widget" promotional link and once you generate the code for one, you can easily replicate it to another by simply changing the "q:" and "title:" tags in the code ("q:" is the query search term).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
None of this is groundbreaking stuff, but it shows you a glimpse of how you can add two of the thousands of widgets around the web that provide interesting bits of information to your OBIEE dashboards as a objects that hopefully give users more reasons to log into OBIEE. While you should make sure you spend ample time on providing good, clean data with useful dashboards, you can also spend a little extra time to add some extra sizzle and pop to the dashboards to hook your users for the long haul.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-81260898680681430212013-10-21T11:37:00.000-05:002013-10-21T11:42:08.431-05:00Should Mobile Be The New Desktop?OK, back to the posts now that I have the new <a href="http://www.oracle.com/technetwork/middleware/bi-foundation/obiee-samples-167534.html" target="_blank">v309R2 release of SampleApp</a> up and running. This is another one that stems from a conversation with someone at OpenWorld. As you may or may not know, there is a new Mobile Application Designer capability in OBIEE to build specific mobile applications for end users. This is in contrast to the iOS app which lets a mobile user access all of the normal reports and dashboards they can see at their desk. The new MAD capability also includes an "app store" that allows users to browse the library of the available mobile applications and subscribe to the ones they want. Since these apps are meant to be consumed through a mobile device's web browser, there is a normal URL and login page. Since my career dates back to the nQuire and Siebel Analytics days, a thought occurred to me: couldn't you just use the mobile app store as the main interface to OBIEE for users at their desktop, much like the promise of Briefing Books (that was never really fulfilled)? Let's explore that.<br />
<br />
First, the URL for logging into the built-in app store, which will serve as our replacement for the general OBIEE catalog, is <span style="font-family: Courier New, Courier, monospace;">http://<server>:9704/mobile/appstore</span>. What's interesting is that while you get a specialized login on a mobile device, on the desktop you get the same style OBIEE login:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2TrOv1bEqdqSLZQg66bDghESfHXCtSrbp8V4QUGP-JoLaJk0qn3EbY2FQ938jBnfBA66-nc-m-N8UEfT2sMApFIKVbepnZLKWe2xD8_lOUajwY8tlDzaITJP8XCc_wKecYLjApLuqXYU/s1600/Screen+Shot+2013-10-21+at+10.25.00+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2TrOv1bEqdqSLZQg66bDghESfHXCtSrbp8V4QUGP-JoLaJk0qn3EbY2FQ938jBnfBA66-nc-m-N8UEfT2sMApFIKVbepnZLKWe2xD8_lOUajwY8tlDzaITJP8XCc_wKecYLjApLuqXYU/s400/Screen+Shot+2013-10-21+at+10.25.00+AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">http://<server>:9704/mobile/appstore on a mobile device browser</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2010.29.24%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2010.29.24%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The same URL on a desktop browser</td></tr>
</tbody></table>
Once you login, you're presented with the apps you've subscribed to. A simple click of the <b>Library</b> button in the upper left shows you a large-tiled list of all of the mobile applications you have access to, sorted alphabetically. Clicking on any application will allow you to <b>Subscribe</b> to it:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.20.50%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.20.50%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Subscribing to an application is easy</td></tr>
</tbody></table>
Once you've subscribed to an application, it's available in your <b>My Apps</b> page and you can open it. From here, all of the standard features work on the desktop as the mobile device. You can hover:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.23.55%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.23.55%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Hovering works just like in OBIEE and BIP</td></tr>
</tbody></table>
Access the full navigation and sharing features:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.04%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.04%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The full app navigation is available</td></tr>
</tbody></table>
Perform basic drilling, selections, and filtering:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.26%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.26%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Users can drill into objects and perform basic filtering</td></tr>
</tbody></table>
View structured and unstructured content together:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.44%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.44%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">You can design very slide-like pages of content that are still dynamic</td></tr>
</tbody></table>
And even view more traditional reports:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.52%20AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="243" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-21%20at%2011.24.52%20AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">And for those users who need it, you can still deliver traditional reports</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
What you don't get is a ton of user-interface tricks to learn, a high training budget, and complexity that more casual users don't want to take the time to learn. The interface is very PowerPoint-like, there aren't a ton of folders in the catalog to navigate, yet the content can still be very dynamic. Since BIP (the developer tool for MAD) can access both OBIEE RPD subject areas, BIP data models, uploaded Excel documents, and more, the data source flexibility is very strong. So the question I'm posing is, why couldn't we just develop entirely in MAD for most casual users and replace <span style="font-family: Courier New, Courier, monospace;">http://<server>:9704/analytics</span> with <span style="font-family: Courier New, Courier, monospace;">http://<server>:9704/mobile/appstore</span>?</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Like the idea? Let me know below.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-73387017955330186122013-10-03T20:03:00.003-05:002013-10-21T11:43:23.306-05:00Comparing Performance Using a Union QueryThis one comes courtesy of a recent conversation I had with someone where we talked about how to compare the performance of something at the detailed level to the average at a higher level of grouping. Consider the following report:<br />
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBlUhqnpMTylgNASNwBun7WjFkdzznM76n-_nXm2hraTKHGOKwTcbJJzjXrfbqTHIUpc2D4hVIqoCc0q3h_drrwX4g_K9akLXWwCoV_bgRyvTSH3KoV3wRcM2v4EYDp4l8XTAccCIvQms/s1600/Screen+Shot+2013-10-03+at+2.11.50+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBlUhqnpMTylgNASNwBun7WjFkdzznM76n-_nXm2hraTKHGOKwTcbJJzjXrfbqTHIUpc2D4hVIqoCc0q3h_drrwX4g_K9akLXWwCoV_bgRyvTSH3KoV3wRcM2v4EYDp4l8XTAccCIvQms/s400/Screen+Shot+2013-10-03+at+2.11.50+PM.png" width="287" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Typical Report A</td></tr>
</tbody></table>
We're looking at Sales Reps and their average number of orders to customers in North America. At the bottom, we see a total representing the average number of orders across all of North America sales. That's great, but what if I want to see how each rep compares with the average? I could create another bucket on the report, filtered on North America, and do some variations, or I could also visualize it like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.23.06%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.23.06%20PM.png" width="206" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Less Typical, But More Functional Report B</td></tr>
</tbody></table>
<div>
Whoa...how do you do that? North America is a total and it's in the middle of the report? Now the user can easily see which Reps are outperforming the average for North America (I do have a question as to whether that average calculation is actually correct, but I'm using SampleApp here, so run with me). How do we build this? Let's take a look.</div>
<div>
<br /></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.14.00%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.14.00%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Original Report</td></tr>
</tbody></table>
Above is the original report, but we're going to combine the results of this report with the results of another request using a union operation. To do this, click the little button the far left with the green plus symbol on top of the two overlapping circles. You're then prompted to pick a subject area, and we'll select our 'A - Sample Sales' subject area which was used to build the original report.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.14.58%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="313" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.14.58%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Copy One Criteria To Another</td></tr>
</tbody></table>
This will result in the view shown above, where we have <b>Result Columns</b> and multiple criteria. This allows us create two different queries, but unify them under one result column set. The limitation is that each request has the same number of columns, and you can't mix data types within the same column. However, that doesn't mean you can't mix presentation columns within the same column, which we'll do after we paste our copied criteria to a new one, as shown below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.15.21%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="335" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.15.21%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Paste the First Criteria before the Second One</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
This will result in actually three criteria, so you can cut the bottom one, which will be empty of any columns. From there we will edit the formula of 'E1 Sales Rep Name' in the second criteria, replacing it with 'D51 Area' as we're about to do below:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.16.28%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="263" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.16.28%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Right Before We Replace One Column With Another</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
This will result in the second criteria looking like the screenshot below:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.17.26%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="380" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.17.26%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Second Criteria Completed</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Now, we want the list to be sorted in descending order based on our measure so we can see those exceeding performance at the top, our baseline average for the area somewhere in the middle, and those underperforming at the bottom. But to apply a sort, you have to click on the <b>Result Column</b> instead of one of the criteria, and then you can apply your sort.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.17.55%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="175" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.17.55%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Applying a Sort at the Result Column Level</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
You'll notice you can't apply a sort within any of the criteria, because the sort is applied after the union. Conversely, you can't edit the formula of the result columns, because all formulas are applied within each criteria. Formatting is also done at a result column level, and we want to apply a conditional format to highlight our Area row in the result set:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.20.35%20PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.20.35%20PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
From there we can apply our conditional format to both the second and third columns, which despite being labeled like regular presentation columns, really aren't as you can see with the use of "saw_1" in the final conditional format definition below.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.21.39%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="111" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.21.39%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Add Condition on E1 Sales Rep Name...</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.22.03%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="95" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.22.03%20PM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">...But the Condition Value is from the D51 Area Column</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
You'll apply this conditional format to both columns on the report for greater readability, and after a little table view layout editing, we get to our final product as shown originally.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.23.06%20PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Screen%20Shot%202013-10-03%20at%202.23.06%20PM.png" width="206" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Finished Product</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
This is not really new functionality by any stretch, and I used this technique many years ago, but a recent conversation with someone prompted me to post it now. I hope you find it useful.</div>
</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-84492479274176863532013-10-02T13:24:00.000-05:002013-10-02T13:30:43.586-05:00OpenWorld 2013 RecapWhew...OpenWorld 2013, as usual, was quite a hectic week for me. I drank from the Oracle fire hose so much last week that I felt compelled to <a href="http://oranalytics.blogspot.com/2013/09/post-oow-my-ideas-for-justice-league.html" target="_blank">post something very non-Oracle on my blog</a>. Every once in awhile, you have to put work down! First, let's get to some basic reporting on what I did all week long:<br />
<br />
<ul>
<li>I opened the week on Sunday morning with a great two-part presentation co-presented with Stewart Bryson of Rittman Mead on the new release of the BI Applications as part of the "BI Applications Day" in the ODTUG track. Mark Rittman opened with an overview of the new release, I went into a lot of details around configuring an ETL run beyond the <a href="http://bit.ly/12mI44J" target="_blank">cookbook article on OTN</a>, and Stewart wrapped-up with details on ODI and configuring the new SDS layer in BI Applications using ODI and GoldenGate. You can get my presentation <a href="http://bit.ly/1aLtRjV" target="_blank">here</a>, Stewart's presentation <a href="http://www.rittmanmead.com/files/oow2013_rittman_biapps11g_deep_dive.pdf" target="_blank">here</a>, and Mark's presentation <a href="http://www.rittmanmead.com/files/oow2013_rittman_biapps11g_deep_dive.pdf" target="_blank">here</a>.<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUzBa0M-nyTXeaIuPvQh-fX6oXMe9MqOMbCJF_jGfl7SfK-rsqjGYS5_JXMCD1H4H9yKKelu4NCe-FqlgySFd_YsUFwr9VbC5g8_au-K5ewpcZbhL330wWxrKhw3azQmBMck_08KkJbEQ/s1600/BUyPQ2xCYAE8NXm.jpg-large.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUzBa0M-nyTXeaIuPvQh-fX6oXMe9MqOMbCJF_jGfl7SfK-rsqjGYS5_JXMCD1H4H9yKKelu4NCe-FqlgySFd_YsUFwr9VbC5g8_au-K5ewpcZbhL330wWxrKhw3azQmBMck_08KkJbEQ/s400/BUyPQ2xCYAE8NXm.jpg-large.jpeg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Presenting with Stewart on Sunday; I promise that about 75 people were there! :)</td></tr>
</tbody></table>
</li>
<li>From there I went to make sure our Accenture Analytics booth was in order for the week. At Accenture, we've taken a different angle to the traditional booth and for the last three years we've create a more exclusive experience to meet with clients privately. We schedule them ahead of time into time slots Mon-Wed instead of waiting for them to walk up to the traditional booth and it affords us the opportunity to have a much more in-depth and focused conversation with them on a variety of topics. For me, that meant a lot of content to create ahead of time around Exalytics, Endeca Information Discovery, Big Data, BI Applications, Mobile applications, and industry scenarios. This went extremely well over the course of Mon-Wed, despite being an exhausting activity for three straight days. Thanks to my team for all the work that went into this.<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihJ52L723co6TKl8Eb9AEibV6RK0cUC4aW1h7k3kFqWrJNLTY5QEVzu5Eaqe26bPkgYAfVVT8-24XASt4Fkz11G7NTrob4qBqqfH5_VXRB5Meywpa0qAdS4KkSeJc6wW690juhyphenhyphen0NkQPM/s1600/Kevin-McGinley_4b.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihJ52L723co6TKl8Eb9AEibV6RK0cUC4aW1h7k3kFqWrJNLTY5QEVzu5Eaqe26bPkgYAfVVT8-24XASt4Fkz11G7NTrob4qBqqfH5_VXRB5Meywpa0qAdS4KkSeJc6wW690juhyphenhyphen0NkQPM/s400/Kevin-McGinley_4b.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Presenting in Accenture's Analytics Booth in Moscone South</td></tr>
</tbody></table>
</li>
<li>During the week I stopped by the OTN Lounge in Moscone South and had the pleasure of having a conversation with Bob Rhubart, the editor for OTN. This was in addition to Tony Heljula snapping a pic of my <a href="http://bit.ly/156um7c" target="_blank">earlier video interview</a> with Bob (and Mark Rittman) for the cookbook article we published on OTN.<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzui_wJ1Y44Crs5hnhq79JWDBawb1alRJ71GX8BQiekM6v3daioH9E9kEh8Pdc6w8EOVICQCp91z3Q6Ieuiq7zm4R1Ohp6K2Bs2yvo0ZfcxOpFxeYB4wCIzl3un_oCjrMWC2yGws-mJFE/s1600/BU3xanTCEAAMWJB.jpg-large.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzui_wJ1Y44Crs5hnhq79JWDBawb1alRJ71GX8BQiekM6v3daioH9E9kEh8Pdc6w8EOVICQCp91z3Q6Ieuiq7zm4R1Ohp6K2Bs2yvo0ZfcxOpFxeYB4wCIzl3un_oCjrMWC2yGws-mJFE/s400/BU3xanTCEAAMWJB.jpg-large.jpeg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I promise I'm not sleeping there.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/q9mpuOuItcw?feature=player_embedded' frameborder='0'></iframe></div>
</li>
<li>On Thursday, I wrapped-up with some 1:1 meetings and another presentation session with Mark Rittman and Hari Cherukupally from Oracle Product Management. Again on the BI Applications, this presentation was similar to what Mark and I delivered on Sunday, with some roadmap sprinkles added by Hari, but we had less time to get the points across. You can get this presentation <a href="http://bit.ly/1hlaEqW" target="_blank">here</a>.</li>
</ul>
<div>
So that covers what I did, now onto what I think. Mark Rittman did a great job (as usual) of recapping all of the announcements <a href="http://www.rittmanmead.com/2013/09/oracle-openworld-2013-reflections-on-product-announcements-and-strategy/" target="_blank">here</a>, so I won't attempt to repeat his efforts. What I will do is provide a few initial reactions to some of these announcements. Here goes...</div>
<div>
<ul>
<li>The database in-memory announcement is important, as it gives Oracle a true response to HANA. We can argue the merits of the technology and the approach, but the bottom line is that there is no single greater announcement that came out of OOW than this one.</li>
<li>On the same token, talking about Exalytics after this announcement becomes more difficult, because Oracle is not abandoning TimesTen in favor of relying on the database. I've always been an advocate of positioning TimesTen as a BI Administrator's performance tuning layer, much like OBIEE caching, but the reality is that organizations are going to take a much harder look at the in-memory option INSTEAD OF Exalytics, except in the instances where the in-memory option is not cost effective for them. However, one encounters a little bit of a chicken and egg scenario in that for those companies, buying an Exalytics machine for their BI environment is probably overkill. Now, this is an initial reaction and I need to process this more, but where the conversation became much simpler in the Oracle vs. HANA discussion, it has become more difficult in the, "why should I buy Exalytics" one.</li>
<li>Of all the other announcements made, "BI Ask" is an intriguing one. I love that Oracle is pushing the envelope here and getting out ahead of the competition. Recent releases like the Mobile Application Designer and the upcoming BI Ask suggests that Oracle is finally getting the message that they have the capacity to push innovation rather than follow it. I am curious, though, to see this feature in action and assess it against real world scenarios, as my concern is that the "intelligence" in the first release will only understand about one-fourth of what users will want to know (this is a highly subjective, non-scientific assessment taken from my gut). Still, the fact that we're even talking about being able to do this kind of thing in a BI tool is amazing and I eagerly await this capability from Oracle.</li>
</ul>
<div>
There is more to talk about and I will post more commentary as the topics arise and the features get released, but until then, I hope you enjoyed this wrap-up of my experience at OpenWorld 2013!</div>
</div>
<div>
<br /></div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-10447127333676405762013-09-27T16:52:00.001-05:002013-10-21T11:49:12.855-05:00Post OOW: My Ideas For The Justice League MovieYup, you read that title correctly. I'm in the SFO airport before heading back for OOW and frankly, I'm Oracled-out. It was a great week and I'll write about that later, but frankly, I don't want to even think about Oracle right now. But a few thoughts began forming in my mind about what I would do if I was put in charge of the inevitable Justice League movie, and so I'm going to write about that. Given that Oracle did manage to make its way into the Iron Man movies, I'll see if I can drop an Easter Egg or two in my Justice League thoughts. It's only fair.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRkbPCm_ucX5e7kH3H6XaFMrwcHsXv4e7pHcrCJDEMQJYStyAYAsRo9tL9oBtYbQ3v0oODUfHxrurYG0R9EBlnsByS4ooJVhaYEcBO3rbYC1A4Hfim1QblumooTmcin8rWKWtPSQcm4ys/s1600/justice+league.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRkbPCm_ucX5e7kH3H6XaFMrwcHsXv4e7pHcrCJDEMQJYStyAYAsRo9tL9oBtYbQ3v0oODUfHxrurYG0R9EBlnsByS4ooJVhaYEcBO3rbYC1A4Hfim1QblumooTmcin8rWKWtPSQcm4ys/s400/justice+league.jpg" width="400" /></a></div>
I'll start by going on record that I think the Superman vs. Batman movie (or whatever it will actually be called) is a good idea. While I have no idea if the execution will actually work, nor do I have any idea what the storyline will be, but the basic premise of merging the Superman and Batman worlds together before adding other characters into the mix makes a lot of sense, both from the standpoint of the formation of the Justice League and the avoidance of a "me too" approach when compared to the Avengers. With that said, let's get started.<br />
<br />
<ol>
<li><b>The Justice League movie should be about Wonder Woman.</b> DC has fumbled away any decent chance of making a WW solo movie first, so the Justice League movie needs to introduce her, but doesn't necessarily need to tell her complete origin story, per se. There are two reasons for this. First, like the layering of Batman on the Superman world (or vice versa), the next logical layer is WW. While maybe not quite on the same level as Bats and Supes, those three comprise the core of the JL and she can't be just a character that shows up (like the Flash and Green Lantern will) without a strong purpose or reason. This is due to the fact that, like Thor, her world is drawn from actual real world mythology and also like Thor, the introduction of her world into the world populated by Supes and Bats really changes the game for the humans in that world. The second reason we need to introduce her in a significant way is because it gives something for Supes and Bats to do (who is this woman?) and then the invasion of that mythology into their world gives them something to unite against that is different than an alien invasion and different than killer robots (I'm talking about you, Ultron). So the general premise is that we see Diana enter our world (but don't necessarily see her grow up on Themyscira) and she ultimately brings the baddies with her. Why Greek mythology baddies? Because the JL are often referred to as "gods," so we need our gods to band together to fight other gods. Yes, it's a little similar to the Avengers banding against Loki, but he brought an alien invasion with him. The JL can square off directly against the gods/monsters from her world and have it be less about an invasion.</li>
<li>If we're going to introduce WW, the casting of her role will be the most hotly debated topic, just slightly above the hot debate over her costume. I have one simple requirement that feeds both topics: <b>remember she's an Amazon</b>. She can't be cast as some thin supermodel pinup girl. I'm not saying she needs to look like a brute, but she needs to look like she trained to be a warrior. She also needs to be fierce with cracks of compassion. WW's social skills in our world are lacking, and she often wants to fight first and ask questions later, but at her core Diana's a compassionate person. As for her costume, I believe they need to re-invent her costume for the movie, remembering she's an Amazon. Elements of previous costumes can be applied, and the core bracelets/tiara/lasso should exist, but she can't run around in a bikini the whole movie, nor does it make sense for a trained warrior to enter combat without some semblance of warrior gear.</li>
<li><b>Green Lantern needs to be Jon Stewart, not Hal Jordan.</b> The Ryan Reynolds GL movie was a hot mess, but we can pretend the events in the movie still happened so we don't have to create another GL origin story. Instead, we can take advantage of the premise that there are many GL's in the corp and put Hal Jordan on a mission somewhere else in the universe. Jon Stewart will also allow for some diversity on the team as his personality/background veers quite a bit from Hal. We don't have to recast Ryan Reynolds and we can start fresh, but still have GL and his abilities in the movie.</li>
<li><b>If you add anyone else, add only the Flash.</b> No Aquaman, Martian Manhunter, Cyborg, Green Arrow, etc. While these are all fine characters, 5 main team members for the first movie is enough, especially if we're focusing on WW. I'd even be OK with keeping it at 4 because of a point I'm going to introduce further down. Besides, introducing Greek mythology into our world is enough...we don't need more aliens, and introducing Aquaman introduces Atlantis, which is just yet another mythology we don't need to cram into one movie. Not that Aquaman shouldn't be introduced someday, especially a version similar to the new 52, but just not yet. If you do add the Flash, I'd develop a minor investigative side narrative that collides him with the main storyline towards the climax. Give glimpses of his origin, but don't tell the whole story. Honestly, I'd prefer to leave him out.</li>
<li><b>Establish Amanda Waller now.</b> I don't care if we have Steve Trevor yet or not, but the tension between the government and the JL is priceless and Amanda is front and center in that. She needs to be in every movie and she needs to be a great casting. I'm sorry Angela Bassett, I love you, but you weren't the right selection in the GL movie.</li>
<li><b>Do not establish the Watchtower in this movie.</b> It will be tempting to do so, but there will be enough to do to resolve conflict between Supes/Bats/WW, bring GL into the picture, and unite to bring down a bigger problem.</li>
<li><b>Avoid Darkseid, Grodd, Lex Luthor, the Secret Society and any of the other recurring major villains.</b> Stick to Ares, Circe, Hades, and other WW common enemies from the Greek mythology world. There will be future movies. Darkseid is perfect for the third JL movie.</li>
<li><b>Batman needs to be Batman in the first JL movie.</b> One core theme across the JL is that Batman is just a guy, not a god, and being the guy he is, he doesn't fully trust the JL, nor truly fit-in. That theme must be introduced early and recur often.</li>
<li><b>Add either Aquaman or Hawkman/Hawkgirl in the JL 2 movie.</b> While I'm getting a little ahead of myself, the second JL movie can introduce either of these two worlds in the second movie. Atlantis rising may be a little too close to the storyline of the first movie, but is a great way to introduce Aquaman. A better storyline might be to have an invasion from Thanagar. Rather than mindless invaders, Thanagarians are very advanced and provide the opportunity for something more interesting on both sides of the narrative, as the Thanagarians aren't evil, per se. This opens up many doors for Jon Stewart, introducing the Martian Manhunter, and Cyborg, who will be a walking Big Memory Machine. ;)</li>
</ol>
<div>
This actually took much longer than sitting in the airport last night, but I hope you enjoyed this slight diversion from the typical Oracle post!!</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-69764985608551077482013-09-05T16:49:00.002-05:002013-10-30T14:05:25.941-05:00My Perspective on OEID, Part 4When we last left our heroes in <a href="http://oranalytics.blogspot.com/2013/08/my-perspective-on-oeid-part-3.html" target="_blank">Part 3</a>, OEID looked like it might fall prey to a classic blunder: the inability to get more complex in filtering than just stringing together a bunch of AND clauses. The problem was simple:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/keQAR.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="185" src="https://dl.dropboxusercontent.com/u/9595394/Captured/keQAR.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">We can't see Anne the rep if we filter on Anne the manager.</td></tr>
</tbody></table>
To make filtering easy to use in OEID, you do sacrifice a little flexibility. There is a solution to this challenge, but it requires administrative access to the application or someone with administrative access to configuration ahead of time: <b>Application Settings > View Manager</b>. In the 'Base' view for the application, you'll find an attribute table that allows you to change the 'Refinement Behavior' for an attribute from "Single" to "Multi-OR" which I have done in the screenshot below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/LxNqv.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="226" src="https://dl.dropboxusercontent.com/u/9595394/Captured/LxNqv.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Changing the filtering to accept multiple selections within an attribute using the OR operator.</td></tr>
</tbody></table>
This setting will now allow us to select multiple values for a given attribute filter, and the application will separate those multiple values with an 'OR' operator. From there, a few simple steps will allow us to apply the right filter:<br />
<ol>
<li>Select "Anne Green" in the 'E9 Manager Name' attribute in <b>Guided Navigation</b>. You'll notice that now a pop-up box appears which allows us to add more values to the filter; click 'Submit'. Our view looks like it did originally above.</li>
<li>We know that we want to see "Larry Stephens" and "Shannon Hennessey" in addition to "Anne Green" so we can click on those two in the Guided Navigation under 'E1 Sales Rep Name' and click 'Submit'. Our view doesn't change, although it appears to.</li>
<li>Now we can remove the filter on "Anne Green" under 'E9 Manager Name', and now "Anne Green" appears back under the 'E1 Sales Rep Name' attribute; click "Anne Green" there and click 'Submit' - we get the following view/filter:</li>
</ol>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/YUg50.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="142" src="https://dl.dropboxusercontent.com/u/9595394/Captured/YUg50.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Our finished product with the breadcrumbs demonstrating "A or B or C"</td></tr>
</tbody></table>
<div>
Now, this approach will get a little dicey if you start to talk about hundreds of objects within various groupings. OBIEE's more straightforward approach demonstrates how the construction of more complicated filters could be difficult in OEID. Before we go deeper there, though, let's highlight two more aspects of filtering in OEID compared to OBIEE. The first is the obvious search capability, a strength of the tool. However, remembering our search example from Part 3, there was one flaw we need to take care of:</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/brfkF.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="325" src="https://dl.dropboxusercontent.com/u/9595394/Captured/brfkF.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">We can only select a search results within a single attribute.</td></tr>
</tbody></table>
Fortunately, we can correct this, but it requires some configuration in Integrator beyond what the OBIEE import does out-of-the-box. The key in Integrator lies within a file called 'AttributeSearchability.csv' and a graph called 'LoadIndexingConfiguration' - both of which are created in the OBIEE import wizard, but aren't actually enabled for what you want them for: using a search to filter across attributes.<br />
<div>
<br /></div>
<div>
To begin, we need to open the files 'AttributeSearchability.csv' and 'AttributeGroups.csv' located in the 'config-in' folder. Out-of-the-box, 'AttributeSearchability.csv' will be empty, but 'AttributeGroups.csv' will be populated. To populate 'AttributeSearchability.csv', copy the records in 'AttributeGroups.csv' that relate to the dimension attributes (unless you really care to search across the fact numbers) into the 'AttributeSearchability.csv' file, then replace all of the GroupNames (first column in the comma-delimited list) with the word 'All' as shown below: </div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Yk41M.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="252" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Yk41M.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">'AttributeSearchability.csv' in it's final state (your attribute list may look different).</td></tr>
</tbody></table>
<div>
Then, open the 'LoadIndexingConfiguration' graph and run it. Depending on your data, it will take a few minutes to run the graph, but hopefully you'll see the output that it completed. From there we can go configure the Search Box in the front-end to use the new SearchInterfaceName, as shown in the screenshot below:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/grjer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://dl.dropboxusercontent.com/u/9595394/Captured/grjer.png" width="358" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Adding a new default search configuration to the Search Box.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Now our Search Box gives us an additional option when searching (and looks a little different, too):</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/1EdSs.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="255" src="https://dl.dropboxusercontent.com/u/9595394/Captured/1EdSs.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">An extra search option after configuring 'AttributeSearchability.csv' and the Search Box.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
So while we had to do a little extra Integrator work, we're now able to do a different type of filtering in OEID that's not as easy (nor performance efficient) to do within OBIEE - filtering across the entire data store. Since someone in IT had to run the initial import from OBIEE wizard, anyway (versus an end user initiating it), this isn't that big of a deal to do a few extra steps in Integrator before it's ready for end-user consumption. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The second aspect of filtering in OEID that I want to point out is the immediate visibility and usability of values in both the Guided Navigation area and the reports. Let's start from a visibility perspective. The screenshots below show Brand values in OBIEE (top) and OEID (bottom).</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3sk9v4WTECu0q-TpKVlynggAYVgCzXqH3rN7rBiJDQypV4pMC7Gxsos-FlU7SkUb97T5mY9d2CsDDO9b3IDAMOcwgj93o8ioQi1MvQWxPoP6B1c4vrUJRLasl5RVSC4Mp2nmnfSxa16Q/s1600/3TMW9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3sk9v4WTECu0q-TpKVlynggAYVgCzXqH3rN7rBiJDQypV4pMC7Gxsos-FlU7SkUb97T5mY9d2CsDDO9b3IDAMOcwgj93o8ioQi1MvQWxPoP6B1c4vrUJRLasl5RVSC4Mp2nmnfSxa16Q/s320/3TMW9.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/upMYl.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="145" src="https://dl.dropboxusercontent.com/u/9595394/Captured/upMYl.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Additional context provided in OEID (bottom) compared to OBIEE (top).</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
In OBIEE, we can only expand the column to see the values. In OEID, we can enable record counts (based on currently applied filters elsewhere) and we get a sense of distribution using the horizontal bar chart overlaid on the values. Having the data front and center like this is very valuable, because rarely do business users think purely in terms of columns and folders, but more in business values. Where OEID takes this to the next level is in the usability area, because a user can click on any value anywhere in the application to filter the data further on that value - not only is the performance of filtering fast, but the actual application of the filter. Unfortunately in OBIEE, I need to switch from results mode (where I can see the data values) to criteria mode (where I can define a filter). OBIEE Selection Steps can help me get around having to switch modes, but the application of the selection step that allows me to keep or remove "All X values where Y = values" is somewhat tedious to apply. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Admittedly, this post is covering a lot of ground (and needs to end quickly!), but the primary focus of comparison is the relative ease of applying filters - simple or complex - within an ad hoc environment. The quick summary is that OBIEE has more flexibility to filter, but the filters aren't as intuitive to apply for an end user when compared to OEID. OEID can apply filters quickly and easily, but as the filters get more advanced, the "quick and easy" barometer drops quickly when compared to OBIEE. What I will try to do in Part 5 is summarize the filtering capabilities more succinctly, and even craft some videos showing the comparison/contrast in action. Stay tuned!</div>
</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-71293926509140655972013-09-04T13:32:00.000-05:002013-10-30T14:13:30.181-05:00Review: OBIA Oracle Press BookBack in the summer I was asked to do a review of Simon Miller and William Hutchinson's book, "<a href="http://amzn.com/0071804145" target="_blank">Oracle Business Intelligence Applications: Deliver Value Through Rapid Implementations</a>." I graciously accepted the opportunity, not because I'm particularly good at book reviews, but rather because there aren't any books out there (that I'm aware of) about the BI Applications. The BI Applications have been around a long time and with OBIEE receiving two excellent book treatments recently (<a href="http://amzn.com/0071798749" target="_blank">here</a> and <a href="http://amzn.com/1849685665" target="_blank">here</a>), it's about time for the BI Applications to receive its printed due.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJsGASaHkh0FoUVvMnK1Gae0Yw6JfFSV6w4okrLhRTDNWhi0J4hfwjxX5V17e35xpL3NsG1faCE_WbyMGHjK_SSHhwoFqjaoNj1V4lXyPztvT8ON9lFn9CO_kNX9k0PbwA4Rwf2Jzp64A/s1600/41c7yZQf7pL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA278_PIkin4,BottomRight,-60,22_AA300_SH20_OU01_.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJsGASaHkh0FoUVvMnK1Gae0Yw6JfFSV6w4okrLhRTDNWhi0J4hfwjxX5V17e35xpL3NsG1faCE_WbyMGHjK_SSHhwoFqjaoNj1V4lXyPztvT8ON9lFn9CO_kNX9k0PbwA4Rwf2Jzp64A/s1600/41c7yZQf7pL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA278_PIkin4,BottomRight,-60,22_AA300_SH20_OU01_.jpg" /></a></div>
First, full disclosure here: while I don't know Simon Miller, I do know Will Hutchinson professionally (honestly, who doesn't?!). I was also given a free copy to review the book. However, I promise to keep my review integrity in-check by providing both things I like and things I don't like about the book, while trying to frame how the book works for different audiences so you can decide if the book is right for you. With that out of the way, let's begin.<br />
<div>
<br /></div>
<div>
From my point-of-view, the book is arranged into three acts:</div>
<div>
<ul>
<li>Act I: The basic world of Data Warehousing (Chapters 1-2)</li>
<li>Act II: Defining a BI Application, including Oracle's BI Applications (Chapters 2-3)</li>
<li>Act III: Details on and Experience with Oracle BI Applications and Exalytics (Chapters 4-15)</li>
</ul>
<div>
What's important to state quickly is that you won't get any "how-to" information from this book. There are no step-by-step implementations of any of the packaged applications or any other configuration. Instead, this is a book that talks to you realistically and intelligently about the purpose and value of data warehousing, why a pre-built application is more useful in today's world, and why Oracle's pre-built applications are an excellent choice. From there, both authors provide useful bits of information for each individual application, along with valuable tips across the entire BI Applications stack that can only be provided after years and years of experience implementing them. While the lack of "how-to's" makes this book different than your average technical book, it also allows the book to shine for what and whom it was intended: the person in an organization tasked with making a recommendation on the future direction of ERP-driven analysis for end users.</div>
</div>
<div>
<br /></div>
<div>
There are some key things I really liked about the book:</div>
<div>
<ul>
<li>The authors wisely chose to provide some context and tell stories about experiences with data warehousing in their own careers. This framed the entire premise of the book nicely and also allowed you to get to know the authors and trust their expertise.</li>
<li>Too often within the debate of buying a packaged solution or building your own from scratch, little discussion is actually spent on what it takes to build your own from scratch and how one would evaluate the completeness of a packaged solution. The authors accomplished this on both fronts, and while this leads to one of the things I didn't like (more on that later), I felt their detailed, yet approachable explanation of what really goes into building a successful data warehouse and business intelligence system hit the mark well.</li>
<li>The contents of Act III (my definition, not theirs) are extremely valuable. While Oracle publishes a lot of marketing and product documentation on what comes with each BI Application, chapters five through thirteen present this information (and more) in a more easily digestible format than any PowerPoint or PDF document I've seen before. While I would love to see even more in these chapters (again, more on that later), the value provided in these chapters to those both new to the BI Applications, or those who have implemented a few of the packaged applications but are looking for key information on the others, is extremely high.</li>
<li>Lastly, Chapter 14 holds a special place in my "likes" of the book. Not only does it layout nicely numerous considerations for implementing the BI Applications, but it also begins to talk about how to make them your own, which is something I've written about in a two-part series <a href="http://oranalytics.blogspot.se/2013/05/oracle-bi-applications-changing.html" target="_blank">here</a> and <a href="http://oranalytics.blogspot.com/2013/05/oracle-bi-applications-more-than-just.html" target="_blank">here</a>. It also helps to dispel the Tarzan-like mantra of "customizations bad, me no customize."</li>
</ul>
<div>
There are a few things that I didn't like as much or I felt could be enhanced:</div>
</div>
<div>
<ul>
<li>It's important that you understand that both Simon and Will are employed by Oracle. While they do a pretty good job of helping you to forget that, chapters two and four stand out as areas where the Oracle bias begins to show a little too much. In Chapter 2, they spend a little too much time trying to convince you that what every good packaged application needs is exactly what Oracle's has, and Chapter 4 goes a little thick on the Exalytics marketing and introduces the engineered system a little too soon in the book. I would've preferred if they could've been a bit more objective in these areas, and so might a reader looking to make a buying decision.</li>
<li>While I made reference above to the valuable content in Act III, one area that I thought was lacking was source-system specific references. Experience tips about implementing against one source system or another for a specific application would be a welcome addition, in addition to the more general information about which applications can be used with which ERP systems.</li>
</ul>
<div>
I've mentioned already that people tasked with making a recommendation for the future direction of their company's ERP-driven analysis stand as one target audience for this book. The book serves this reader well and I believe that anyone considering a purchase of the BI Applications should read this book first. Additionally, the BI Applications implementation professional could stand to benefit from reading this book as well. The combination of real world stories, tips driven by experience, and easily consumable content will smooth the rough edges of any implementation professional's skills without boring them during the read. Chapters 5-14 can be consumed in any order and represent easily digestible chunks of information for those looking to build upon their skill foundation.</div>
</div>
<div>
<br /></div>
<div>
In summary, I highly recommend this book for those two aforementioned audiences. The book is very accessible and will serve you well in your exploration of pre-packaged Data Warehouse/BI systems, providing valuable information to determine if Oracle's approach is right for you.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com3tag:blogger.com,1999:blog-8823970373652902952.post-54585620283071938412013-08-20T14:53:00.002-05:002013-10-30T14:20:35.719-05:00BI Apps OTN Article PublishedMark Rittman and I recently published an <a href="http://bit.ly/12mI44J" target="_blank">article on OTN</a> on the new BI Applications 11.1.1.7.1 release and I wanted to take a few minutes to talk about the article on my blog. Mark published his own commentary to the article <a href="http://www.rittmanmead.com/2013/08/new-otn-article-installing-and-configuring-oracle-bi-apps-11-1-1-7-1/" target="_blank">here</a> and I thought I would take a few minutes to provide my own thoughts.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tTZFeM4q7zO3Bm_POd6Iu5XucdyrudTsjiOL6gfW3vOKBUKWVPGeeSExkG6P7kgbPZX7O_fnbmzB2_NCyYQcmfSoGCu0vkWeoEKjYt6gUqLh9fPWY5RX1u8w-T72gZlCP1y6a8eTiGs/s1600/Screen+Shot+2013-10-30+at+2.19.08+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tTZFeM4q7zO3Bm_POd6Iu5XucdyrudTsjiOL6gfW3vOKBUKWVPGeeSExkG6P7kgbPZX7O_fnbmzB2_NCyYQcmfSoGCu0vkWeoEKjYt6gUqLh9fPWY5RX1u8w-T72gZlCP1y6a8eTiGs/s400/Screen+Shot+2013-10-30+at+2.19.08+PM.png" width="400" /></a></div>
First, let me thank Mark for writing the article with me and Oracle Product Management for reviewing it. These types of articles require a fair amount of work, re-work, and scrutinization from Oracle Product Management, so it's not an effort one engages lightly. Sharing the workload allows you to balance your day-to-day life along the way. Having Mark tackle the step-by-step on the install allowed me to focus all of my time on the configuration, which was definitely welcome and easier in the long-run for both of us.<br />
<br />
Second, the article is meant to be a "cookbook" of how to get your own instance up and running. I cannot emphasize enough that we mean a <i>sandbox</i> instance running either on your local machine, a virtual machine, or a handy commodity server that allows you to explore the new capabilities, rather than a server you would use to run production-like data loads. We chose EBS Vision as our data source because it's handy (kinda) for those of us lacking our own personal EBS instance, but it's by no means the easiest or cleanest system to source.<br />
<br />
This leads to my third point. To keep the article from turning into a full book (I'll be reviewing someone else's book on the topic soon), I tried to keep the configuration simple and bare bones. This meant testing and re-testing various load plans against different fact groups until I found one that ran with minimal issue and allowed you to see the results on a dashboard. So if you're wondering why I chose "Inventory" within Supply Chain and Order Management Analytics - there's your answer. There are certainly more configuration options to cover and many are specific to the app or source you are running from/to, but our chosen setup allowed you to see the end-to-end process fairly seamlessly.<br />
<br />
So please...read the article (link again <a href="http://bit.ly/12mI44J" target="_blank">here</a>) and give me your feedback. But don't feel like this article is the end of your journey. There will be more BI Applications goodness from me at Oracle OpenWorld. Here are a few highlights:<br />
<br />
<div>
<div class="p1">
Session ID: <a href="https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=9909" target="_blank">UGF9909</a> (Co-presented with Stewart Bryson)<br />
Session Title: Deep Dive into Oracle Business Intelligence Applications, Part 1: Configuration<br />
Venue / Room: Moscone West - 2007<br />
Date and Time: 9/22/13, 10:30 - 11:30</div>
<div class="p1">
<br /></div>
<div class="p1">
</div>
<div class="p1">
Session ID: <a href="https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=9910" target="_blank">UGF9910</a> (Co-presented with Stewart Bryson)<br />
Session Title: Deep Dive into Oracle Business Intelligence Applications, Part 2: Data Integration<br />
Venue / Room: Moscone West - 2007<br />
Date and Time: 9/22/13, 11:45 - 12:45<br />
<br />
Session ID: <a href="https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=9420" target="_blank">CON9420</a> (Co-presented with Mark Rittman and Oracle BI Apps Product Management)<br />
Session Title: Configuring Oracle Business Intelligence Applications on Oracle Data Integrator: A Deep Dive<br />
Venue / Room: Moscone South - 303<br />
Date and Time: 9/26/13, 12:30 - 13:30</div>
<div class="p1">
<br /></div>
<div class="p1">
In addition, Mark Rittman, Jeff McQuigg, and Christian Screen will also be presenting with Stewart Bryson and I on Sunday 9/22 during in Moscone West - 2007. The theme of the day will be the BI Applications and most of the talks will focus on the 11.1.1.7.1 release.</div>
<div class="p1">
<br /></div>
<div class="p1">
Finally, Mark and I recorded a short interview with Bob Rhubart from OTN regarding our article that you can watch <a href="http://bit.ly/156um7c" target="_blank">here</a> or embedded below.</div>
<div class="p1">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/RIAYE2igr-s?feature=player_embedded' frameborder='0'></iframe></div>
<div class="p1">
<br /></div>
</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com1tag:blogger.com,1999:blog-8823970373652902952.post-66885105249418164272013-08-19T09:54:00.002-05:002013-10-30T14:32:26.180-05:00Real Time BI Episode 13 PostedI'm excited to announce the return of <a href="http://bit.ly/14dc9oI" target="_blank">Real Time BI with Kevin & Stewart</a> after our long summer hiatus. Our guests for <a href="http://youtu.be/wwTIml_b4mE" target="_blank">Episode 13</a> are Edward Roske and Glenn Schwartzberg from <a href="http://www.interrel.com/" target="_blank">interRel Consulting</a> and we banter about all things BI & EPM. This is part 1 of 2. The show is also available on <a href="http://bit.ly/QhwuSq" target="_blank">iTunes</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUL4CWVa1X_Pq9nD5WqLW_fPIbiU-lZQ1Je8PHkn31H7dVcP8rp5jwUYvwK-05woYk3Hrf-0WCnBTTc5l1rdPHZEbJNM_6VlaAE7tTfDwzZeIcckfF1pow5mFIqXySLn6PsCyJqwPq3g/s1600/realtimebi_podcast.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUL4CWVa1X_Pq9nD5WqLW_fPIbiU-lZQ1Je8PHkn31H7dVcP8rp5jwUYvwK-05woYk3Hrf-0WCnBTTc5l1rdPHZEbJNM_6VlaAE7tTfDwzZeIcckfF1pow5mFIqXySLn6PsCyJqwPq3g/s200/realtimebi_podcast.jpg" width="200" /></a></div>
<br />Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-25340843011525568872013-08-09T17:20:00.000-05:002013-08-12T13:01:04.242-05:00My Perspective on OEID, Part 3Yesterday, I wrote <a href="http://oranalytics.blogspot.com/2013/08/my-perspective-on-oeid-part-2.html" target="_blank">Part 2</a> as an intro to the next few posts in this series. If you think "<a href="http://oranalytics.blogspot.com/2013/08/my-perspective-on-oeid-part-2.html" target="_blank">Part 2</a>" makes a funny name for an intro, it's because <a href="http://oranalytics.blogspot.com/2013/02/my-perspective-on-oeid-part-1.html" target="_blank">Part 1</a> was more of a prologue. In an effort to keep these posts fresh and frequent, I'm going to bite this series off in smaller chunks, so we may eventually get to Part 10 or higher.<br />
<br />
In today's post, I'd like to tackle one of my previously defined characteristics of good ad hoc BI: Flexibility. I'm not going to cover this exhaustively in Part 3, and you may even find that I bounce between the other characteristics as I progress in this series, but I'm going to cover one area of Flexibility in this post that does lend a bit of an edge to OEID over OBIEE because it plays to OEID's strength: search.<br />
<br />
Before I get too far into it, though, let me talk a little about Flexibility. One thing I've noticed over my many years in BI/Data Warehousing is that end users don't really care where data comes from. This is not some enlightened realization that only I have achieved through deep meditation, but rather something I'm sure many professionals in the BI/DW space would corroborate. And not only do users not care where data comes from, but they don't always know the ins-and-outs of all the data they do know about. Sometimes they do, but they aren't always walking metadata dictionaries.<br />
<br />
With that in mind, let's look at a simple use case in OEID and OBIEE that exemplifies this. A quick caveat thought: I'm not going to get into the setup of how to do all of this. I'm using SampleApp v305 and the OBIEE side is untouched. For OEID, I have imported a few tables from the 'A - SampleSales' subject are using the new feature in OEID that will import data through the BI Server using OBIEE metadata. If you want more information on the steps to accomplish that, Google it.<br />
<br />
Now for this example, I'm going to work first in OEID, then show a little of the same in OBIEE. In later parts to this series, I may work the opposite direction depending on what makes the most sense. Below you see a screenshot of the application. I haven't really done anything to the default look of a new application other than create a simple Sales Rep Name / Revenue chart in the top middle.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/ZnjVj.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="230" src="https://dl.dropboxusercontent.com/u/9595394/Captured/ZnjVj.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A simple OEID application with the data imported from the BI Server</td></tr>
</tbody></table>
Our user now goes to the search box and types in 'green'. The user may have a specific idea in mind around why they want to filter on 'green' but they don't necessarily know where to go to do that. Maybe it's the color of a product, maybe it's a person's last name, maybe it's part of an address, etc. As we can see in the screenshot below, 'green' comes up in three different places: a product attribute, a sales rep name, and a manager name (who actually is the same person).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/brfkF.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="325" src="https://dl.dropboxusercontent.com/u/9595394/Captured/brfkF.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Search results for 'green' in our OEID application</td></tr>
</tbody></table>
As you can see, OEID searches across everything in the data store - not just a single column - and shows us results from all attributes where 'green' exists. The user can now match the context they had in their head with the reality of the data and filter the report accordingly. In this case, we'll pretend that what the user wanted was to filter revenue based on 'green' products.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/pIrFY.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="230" src="https://dl.dropboxusercontent.com/u/9595394/Captured/pIrFY.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Chart filtered on 'green' products in P6 Attribute 2</td></tr>
</tbody></table>
Now let's hop over to OBIEE, where the user has started a similar report as the chart in OEID. I've assumed the user was able to start the report by selecting the same two columns used in the OEID chart: Sales Rep Name and Revenue.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/iSIbc.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="271" src="https://dl.dropboxusercontent.com/u/9595394/Captured/iSIbc.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Start of an OBIEE report</td></tr>
</tbody></table>
At this point the user wants to add a filter, but unlike OEID, we don't have a search bar here. At this point, the user needs to know that product color equates to the column 'P6 Attribute 2' in the 'Products' folder. Now, to be fair, a good RPD developer would give a better name for the column than 'P6 Attribute 2' (yes, I'm wagging my finger at you, Oracle), and Oracle at least did enable a tool tip help text for the column, as shown in the screenshot below, but sometimes even with good column names, users still aren't sure what data they're getting with a column name and developers often make columns hard to find or don't use tool tips.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/vPdJo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="342" src="https://dl.dropboxusercontent.com/u/9595394/Captured/vPdJo.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The attribute the user wants, but the name wasn't obvious and we need a tool tip to find it.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Now, I'm using this example to show how OEID allows a user to be less educated about the details of every attribute available by using the data values themselves in a search suggestion, rather than having to rely on good naming conventions, proper folder organization, and hover tool tips to learn that information. Users are more likely to understand data values than they are column names, and so leveraging the ability to see the data quickly, rather than just the metadata, is a significant value-add to an ad hoc BI user.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Putting that advantage aside, let's also look at another flexibility factor: usability. Applying that 'green' filter in OEID took 2 clicks, assuming that typing the word 'green' is about equivalent to a click:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Type the word 'green'</li>
<li>Click the 'Green' value under <b>P6 Attribute 2</b></li>
</ol>
<div>
The filter is applied instantly and because of the speed of MDEX, the results are returned quickly. Looking at that same filter in OBIEE takes 8 clicks:</div>
<div>
<ol>
<li>Click the add filter button</li>
<li>Click <b>More Columns...</b></li>
<li>Expand <b>Products</b></li>
<li>Click <b>P6 Attribute 2</b></li>
<li>Click OK</li>
<li>Click the drop-down arrow beside <b>Value</b></li>
<li>Click the checkbox next to 'Green'</li>
<li>Click OK</li>
</ol>
<div>
Now, the skeptical OBIEE professional will say, "I can do those 8 steps in about 10 seconds," and that may be true, but not all OBIEE ad hoc users are that efficient and the reality is that there are some aspects of the user interface of OEID that are just faster and easier to use, partially because OEID's origins come from a web, e-commerce background. The UI has to be fast and easy. So to be fair, let's look at a scenario where OBIEE is easier. Remember our 'green' search? We received a record back for 'Anne Green' as both a Sales Rep and a Manager. What if we want to see a bar chart with both Anne Green as a Sales Rep and the Sales Reps she manages? In OBIEE, we can do this:<br />
<br /></div>
</div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/e0dH3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="260" src="https://dl.dropboxusercontent.com/u/9595394/Captured/e0dH3.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The ever valuable OR filter!</td></tr>
</tbody></table>
And we get this:<br />
<br /></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/DgNzK.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="223" src="https://dl.dropboxusercontent.com/u/9595394/Captured/DgNzK.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Anne and her minions!</td></tr>
</tbody></table>
Can we do that in OEID? Well, as soon as I filter on 'Anne Green' as a Manager, I run into a problem:<br />
<br /></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/keQAR.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="185" src="https://dl.dropboxusercontent.com/u/9595394/Captured/keQAR.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Wherefore art thou, Anne?</td></tr>
</tbody></table>
'Anne Green' isn't listed as a Sales Rep when 'Anne Green' is filtered as a Manager. Out of box in my quick-and-easy "suck-the-data-in-from-OBIEE" application, there is no easy way to use an OR filter between two attributes. I can use NOT filters on all of the Sales Reps but Anne, Larry, and Shannon, but that is a bit tedious and I first have to figure out that Larry and Shannon report to Anne. Is there a way to enable this OR functionality? Can OEID rebound from this apparent gaffe? Will Batman be able to save Batgirl and Robin from the Riddler's deadly trap? Tune in next time...same BAT TIME...same BAT CHANNEL (or just Part 4).</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-26723622585844480202013-08-08T10:07:00.000-05:002013-08-08T10:09:16.207-05:00My Perspective on OEID, Part 2In my <a href="http://oranalytics.blogspot.com/2013/02/my-perspective-on-oeid-part-1.html" target="_blank">first post</a> on this topic, I hypothesized that OEID can actually be positioned as a pretty good ad hoc BI tool, possibly better than OBIEE. What I want to do now is start to put that to the test. I knew what was coming in OEID 3.0 and wanted to wait to finish this series until I could use that version as a launching pad into this discussion. There are some new features in OEID 3.0 (one technically came in 2.4) that further expand upon this possibility of using OEID as a tool for your ad hoc users instead of giving them the-tool-formerly-known-as-Answers.<br />
<br />
So let's recap a little. In my <a href="http://oranalytics.blogspot.com/2013/02/my-perspective-on-oeid-part-1.html" target="_blank">first post</a>, I listed five characteristics of what I think makes a good ad hoc BI tool. Here they are again for your consideration:<br />
<ol>
<li>Flexibility - as few constraints as possible with regards to where the data comes from, what it looks like, and how it can be queried.</li>
<li>Quick to Market - the ad hoc need is often identified just-in-time and it can't take weeks (or even sometimes days) to deliver the capability; ad hoc needs often vary greatly over time instead of being predictable and repeatable.</li>
<li>Fast - the days of launching an ad hoc query and waiting an hour for it to return the results are long gone; it has to be fast enough to adapt and change the output quickly and frequently over the lifespan of the analysis</li>
<li>Believable - the data accuracy doesn't have to be perfect, but it has to be somewhat trustworthy.</li>
<li>Accessible - power users tend to know a lot about data and data sources, but don't always know all the details of what and where. If the tool can help without getting in the way, it's a bonus.</li>
</ol>
<div>
What I'd like to do is actually start to look at these characteristics in more detail, comparing and contrasting OBIEE and OEID (and maybe a little BIP) along the way, and even doing some of the work in both tools to illustrate a few points. <a href="http://www.rittmanmead.com/2013/03/can-endeca-provide-an-alternative-to-obiee-for-fast-complex-ad-hoc-analysis/" target="_blank">Mark Rittman wrote a similar blog post</a> to this back in March of 2013 (before OEID 3.0) and many of his conclusions were justified due to a lack of maturity in OEID 2.4 around front-end development (namely, the need to know EQL to build almost everything). I will approach this from a few different angles, though, and will reach a few different conclusions as well.</div>
<div>
<br /></div>
<div>
So look for more parts in this series coming soon. I will be interspersing these posts with posts on other topics, so be patient with me, but I hope to wrap this up much more quickly than my <a href="http://oranalytics.blogspot.com/2012/08/real-world-endeca-part-2.html" target="_blank">previous attempt to write about OEID</a>.</div>
Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0tag:blogger.com,1999:blog-8823970373652902952.post-10471197911568345292013-08-02T14:20:00.002-05:002013-08-12T13:56:30.947-05:00BIP - Enable Direct Subject Area Sourcing<div class="separator" style="clear: both; text-align: center;">
</div>
Quick one today, again coming from my presentation at Kscope '13. OBIEE 11.1.1.7 introduced the capability for BI Publisher to source directly from a subject area. This is not necessarily new, per se, as you could previously source from an Analysis, which ultimately comes from a subject area, and if you were a little more inventive, you could also connect BIP to the BI Server via ODBC, which would expose metadata like raw tables. But in 11.1.1.7, it's dead simple - no extra steps required...almost.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/gKORL.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="312" src="https://dl.dropboxusercontent.com/u/9595394/Captured/gKORL.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">New "Create Report" screen...but where is the subject area option?</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Depending on what permissions you have and what role you login with, you may or may not see a screen like the one above. That's because you need a policy called "oracle.bi.publisher.developDataModel" applied to your role in Enterprise Manager. How do we get that policy?</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Login to Enterprise Manager.</li>
<li>On the left-hand side, expand <b>WebLogic Domain</b>.</li>
<li>Right-click on <b>bifoundation_domain</b> (or whatever your BI domain is called) and select "Security > Application Policies".</li>
<li>Select the "obi" stripe in the drop-down and click the blue search button.</li>
<li>Select the application role you care about, as shown below.</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/Dfebg.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="193" src="https://dl.dropboxusercontent.com/u/9595394/Captured/Dfebg.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">oracle.bi.publisher.developDataModel permission applied to BIAuthor role.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
If it's already there, as it is on the BIAuthor role, great, but if not, you'll need to add it to the applicable role.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li>Click the <b>Edit</b> icon.</li>
<li>Click the <b>Add</b> icon under Permissions.</li>
<li>Type "oracle.bi.publisher" in the <b>Resource Name</b> field and leave the "starts with" drop-down selection.</li>
<li>Click the blue search button.</li>
<li>Select "oracle.bi.publisher.developDataModel" in the list and click <b>Continue</b>.</li>
<li>Click the <b>Select</b> button to finish.</li>
</ol>
<div>
After that user logs out/in again, they should see the following screen when developing a new report:</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://dl.dropboxusercontent.com/u/9595394/Captured/n4ZA0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="312" src="https://dl.dropboxusercontent.com/u/9595394/Captured/n4ZA0.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Building a BI Publisher report directly from an OBIEE subject area.</td></tr>
</tbody></table>
This new capability in 11.1.1.7 is pretty useful, as I'll highlight in future posts, and now you know how to make sure the right users in your organization have it.Kevin McGinleyhttp://www.blogger.com/profile/02276177251315867919noreply@blogger.com0