Patch is here and can be downloaded from MOS.

Once more it’s a 7-pack patch and here are the patch numbers and direct links:

Patch 14285344: Patch (3 of 7) Oracle Business Intelligence Publisher
Patch 14415773: Patch (5 of 7) Enterprise Performance Management Components Installed from BI Installer
Patch 14405222: Patch (6 of 7) Oracle Business Intelligence
Patch 14409674: Patch (7 of 7) Oracle Business Intelligence Platform Client Installers and MapViewer

Documentation’s here: https://updates.oracle.com/Orion/Services/download?type=readme&aru=15499675



With the
release of the BP1 SampleApp V207, I’ve taken a moment to dissect
the usage of the D3.js calendar contained within since it is one of the
examples frequently pointed out to showcase new visualisation capabilities.
Let’s dive a bit deeper into this to understand the way the D3 calendar works and what is necessary to embed this
in any other OBIEE installation.
As-Is in
the Answers Criteria block, the analysis is quite straight-forward. “Color Low”
and “Color High” being simply presentation variables grabbing the values passed
from the “Red / Green Color Limit” prompts on the dashboard page.
The actual
functionality of the D3 calendar is contained and controlled by the two narrative
views of the analysis which I will be calling the “Context Narrative” and “Content
Narrative” respectively for the purpose of this post:


Key here are
the four JavaScript variables which will be used by the code within the content
narrative below. These are filled by the values collected from the 1st
line of the analysis data set (Rows to display = 1). Generally, when analysing
the D3.js examples, it is hugely helpful to add a simple table view to the
analysis in order to see what the data stream actually brings along from the OBI
server since most examples use mixtures of column references and variables.

IMPORTANT: year_range2 must always be the end year +1!
You don’t
have to provide these values through dashboard prompts and simply read the from
the data set, but having a means to restrict the data displayed is always comfortable.



<script type=”text/javascript” src=”/analyticsRes/d3/d3.v2.js”></script>
    <link type=”text/css” rel=”stylesheet” href=”/analyticsRes/d3/lib/colorbrewer/colorbrewer.css”/>
    <link type=”text/css” rel=”stylesheet” href=”/analyticsRes/d3/examples/calendar/calendar.css”/>

    <div id=”my_chart”></div>
    <script type=”text/javascript”>
var margin = {top: 19, right: 20, bottom: 20, left: 19},
    width = @{Width}{720}- margin.right – margin.left, // width
    height = @{Height}{136} – margin.top – margin.bottom, // height
    cellSize = @{CellSize}{12}; // cell size

var day = d3.time.format(“%w”),
    week = d3.time.format(“%U”),
    percent = d3.format(“.1%”),
    format = d3.time.format(“%Y-%m-%d”);

var color = d3.scale.quantize()

var svg = d3.select(“#my_chart”).selectAll(“svg”)
    .data(d3.range(year_range1, year_range2))
    .attr(“width”, width + margin.right + margin.left)
    .attr(“height”, height + margin.top + margin.bottom)
    .attr(“class”, “RdYlGn”)
    .attr(“transform”, “translate(” + (margin.left + (width – cellSize * 53) / 2) + “,” + (margin.top + (height – cellSize * 7) / 2) + “)”);
    .attr(“transform”, “translate(-6,” + cellSize * 3.5 + “)rotate(-90)”)
    .attr(“text-anchor”, “middle”)
var rect = svg.selectAll(“rect.day”)
    .data(function(d) { return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
    .attr(“class”, “day”)
    .attr(“width”, cellSize)
    .attr(“height”, cellSize)
    .attr(“x”, function(d) { return week(d) * cellSize; })
    .attr(“y”, function(d) { return day(d) * cellSize; })
    .text(function(d) { return d; });
    .data(function(d) { return d3.time.months(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
    .attr(“class”, “month”)
    .attr(“d”, monthPath);

    var csv =[];


What happens
here that I can influence?
controls the size of the rendered calendar. Parameters are passed from the dashboard
prompt via presentation variables. If you don’t want users to be able to choose
this, simply put static values.
Date format
is controlled here. VERY IMPORTANT: you must match the date format in this part
of the script to the date format provided within the data set:
means “format
= d3.time.format(“%Y-%m-%d”);”
If your
date picture is for example DD.MM.YYYY (e.g. 14.08.2012), then you need to
adjust the script to:
format = d3.time.format(“%d.%m.%Y “);

the colour limits (.domain) as retrieved by the dashboard prompts.

the display of the year number in front of the rectangles representing the
Leave the
rest as-is.
retrieves the values for date and measure from the data set (per row!). Leave
this as-is.
  var data = d3.nest()
    .key(function(d) { return d.Date; })
    .rollup(function(d) { return d[0].Metric/100; })

  rect.filter(function(d) { return d in data; })
      .attr(“class”, function(d) { return “day q” + color(data[d]) + “-9”; })
      .text(function(d) { return d + “: ” + percent(data[d]); });

function monthPath(t0) {
  var t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0),
      d0 = +day(t0), w0 = +week(t0),
      d1 = +day(t1), w1 = +week(t1);
  return “M” + (w0 + 1) * cellSize + “,” + d0 * cellSize
      + “H” + w0 * cellSize + “V” + 7 * cellSize
      + “H” + w1 * cellSize + “V” + (d1 + 1) * cellSize
      + “H” + (w1 + 1) * cellSize + “V” + 0
      + “H” + (w0 + 1) * cellSize + “Z”;

What happens
here that I can influence?
For the SampleApp
example, this transforms the values retrieved from the data set into an index representation
for transformation into a percentile representation in the tooltip display.
If you want absolute
values, simply change
“.rollup(function(d) {
return d[0].Metric/100; })”
“.rollup(function(d) {
return d[0].Metric; })”

This colours the date
rectangles and the actual tooltip with date information and the added percentile
representation of the measure. Here, if you want absolute values, simply change
“.text(function(d) {
return d + “: ” + percent(data[d]); });”
“.text(function(d) {
return d + “: ” + data[d] });”
Leave the rest as-is.
So what do you need
all-in-all to transplant this into any OBIEE implementation?

1.) The
D3 libraries contained in the d3 and d3-cloud folders. Quickest way – if you
have the SampleApp lying around – is to just grab them from the analyticsRes
folder of the VirtualBox and slap them into your own analyticsRes

2.) An
analysis on the date (day!) grain with some measure. Since you can either
hard-code the time ranges, size and colour limits, those two are really the
bare minimum for this D3 calendar to work.
That’s it. Bob’s your

UPDATE: Since the D3.js libraries are only dependent of the final browser interpreting the generated code (IE8 will NOT work!), you can transplant this into any version of OBIEE that you fancy. This functionality is NOT tied to OBIEE


 The long awaited “Oracle Business Intelligence Enterprise Edition 11g: A Hands-On Tutorial” (Packt publishing) by Christian Screen, Haroun Khan and Adrian Ward was finally released two weeks ago (Amazon) and I got the hard copy delivered today (haven’t tried the Kindle version yet…).

As I have been hanging around Oracle BI and its various ancestors since quite a while I was eagerly looking forward to this one – as well as Marks forthcoming book – for several reasons:
First of all it always boggled my mind as to just how someone would go about packing the OBIEE 11g “basics” into a couple of hundred pages when almost each topic on its own (WLS, security, infrastructure, RPD et.) would easily fill a complete book.
Secondly, as I split my time between projects and training I’m alway interested to see the different approaches taken to convey certain messages, teach certain topics and dispell certain sales claims.
Last but not least…I simply can’t spend that much time on writing these things together (see immediately below).

First impression after a cursory glance at the table of contents and browsing some chapters: thank the heavens that someone took the time to write all of this up an give me a whooping 600+ bound pages to slap people with rather than just saying “RTFM” 🙂 …especially when there wasn’t really any “M” of this kinds o far.

Going end-to-end from explaining the basic architecture, through the installation, the RPD and webcat, action framework and on to OLAP/Essbase integration, the book covers all the basic subjects with a seriously nice hat-tip “Reporting Databases” in chapter 7.
That last one definitely being a chapter which made me smile since more often than not one can see people storming off to “do business intelligence” (read: draw some reports and extryct some lists) without thinking about the basics: the data and the way it is modelled. Always reminds me of a mantra in the old Siebel Analytics courses: “Model first!”

The books is clearly written with the KISS principle in mind and manages to stick to that principle very nicely. The structure’s clear and proper and some of the graphs are especially funny for us old-timers as they point way back to NQuire. Links to detailled descriptions in the official Oracle documentation are provided where necessary and should never be disregarded. This being a hard-copy and OBIEE evolving at a steadily increasing pace, those can come in very handy when analysing a certain component or behaviour in a specific version of the product.

Also, the book provides good links to supporting material; including the complete database, web catalog and styles and skins used for the examples in the book. A very nice touch since this will allow anyone to reproduce things step-by-step rather than having to adapt the books content to his/her own situation or vice versa which is a huge plus for people newly hopping on to the OBIEE train.

I’ve kept it quite high-level since I suspect everyone is clever enough to read the detailled outline in the provided links here and since my judgement is quite simple: if you’re an OBIEE starter: get it. If will help you as a go-to place or aide-mémoire for most “how did this work again?” questions.
If you’re coming from 10g and looking forward to migrating to 11g: get it. It does a good job of painting the big picture, explaining the architecture, the components and how it all works together, thereby taking the edge off “the beast that is 11g” (admit it guys, it can be overwhelming).

Personally, I will definitely use it as supporting material / a hand-out for my beginners courses, bootcamps and onboarding of new team members like I do with Kimballs bible.

So kudos to Christian, Haroun and Adrian! Along with last weeks release of the new BP1 Sampleapp v207 this will provide good material for the next couple of rainy days (read: me getting into troubles for hanging around work topics even at home ;-)).
Next up: Marks book. Really looking forward to that one now!


It has been 19 months since the GA of OBIEE
11g and its third incarnation ( is celebrating its one-month-birthday
today. Time to make a point on the support situation for all OBIEE 10g
implementations out there:
The last 10gR3 versions ( will
reach the end of the Permier Support lifecycle in 4 months, July 2012.
The full documentation for lifetime support
of Fusion Middleware products can be found here, on the Oracle website
(last updated February 2012). The screenshot above can be found on page
13 of the pdf.
So to wrap up: the product has had more than
one and a half years to mature, Oracle provided us with two new version
since the release and with the end of premier support quickly coming up,
this is really the moment to start thinking about upgrading your 10g solutions!

When hooking up OBIEE 11g to an LDAP, make sure to check some factors on the LDAP side of things as well. Not all errors have to come from your configuration in WLS:

  1. LDAP users intended to replace “OracleSystemUser”, “weblogic” and “BISystemUser MUST” all reside in the same base DN that’s used to search for users in the LDAP config
  2. They also MUST all be of the same objectClass as the one referenced in the LDAP config
  3. Creating “technical users” to distinguish them from “human users” and putting them in different branches and / or storing them as different object classes (e.g. “account” or rather than “person”)

First thing you should get is an LDAP browser with which to connect to the LDAP server to check validity of the connectivity ccount (i.e. the “Principal” for LDAP connectivity) as well as structures and object types. This will save you a lot of pain and suprising behaviour due to “ceative” LDAP management.



OBIEE became available yesterday evening (CET) first on edelivery and in the meantime on OTN as well. Here’s a link library of the most important and interesting sources.


Overview and explanatory blog posts:

“New Features with OBIEE”

“OBIEE Now Available for Download – Release Highlights”
“OBIEE : MDS XML Repositories, and Integration with Source Control”

Michael Verzijl
“OBIEE Released – Short overview”

“OBIEE 11g R1.6 New Admin Feature”

Alex Hansal
“OBIEE is here”

“OBIEE new features/enhancements”

Official Documentation

Maintenance Release Guide (List of Bugs Fixed) for Oracle Business Intelligence Enterprise Edition (OBIEE) [ID 1412748.1]

Documentation Library
New Features OBIEE
New Features OBIEE for Users
(h/t @lex!)

This is just a first list and will grow over time. If you have new, interesting links to add, please put them in the comments and I’ll update the list.



I recently deployed a new RPD to one of my BI servers and after restarting the coreapplication, wasn’t able to log on anymore – the login process hung at “Singing in…” indefinitely.

After some investigation, I found out what had happened:
1.) The new RPD used connections to a datasource situated on a different database (other than the primary DWH) which were utilised in new initialization blocks which fired upon login (no “deferred execution”).

2.) The TNSNAMES on the BI server machine had contained all necessary connectivity information until the night before, but had been reset to a default configuration during the night for some reason and only retained the primary DWH.

3.) This caused the login process to hang indefinitely without any meaningful errors being logged and hence nothing was visible in Enterprise Manager.

4.) Restoring the TNSNAMES with all relevant DB entries removed the error and login was possible again.

Conclusion: never assume that your infrastructure setup is a “given” and won’t change.