A quick post to advertise Oracle's BI Tech Demos youtube channel !
Very good content and good information, even if a lot isn't available to the public and/or only on NDA basis. Extremely valuable peek into the future though so you can see what's upcoming.
The 100 facets of Oracle Business Intelligence
OBIEE, OBI Apps, ODI, Informatica, Essbase, BI Publisher...you name it. The OBI suite entails them all and more. I will talk mainly about its technical aspects, interesting findings and noteworthy solutions, but will definitely throw in some random weirdness.
Wednesday, April 3, 2013
Oracle BI Tech Demos youtube channel
Monday, November 26, 2012
OBIEE 11.1.1.6.6 Patch Released
OBIEE 11.1.1.6.6 (aka 11.1.1.6.0 BP6) is out and until MOS hosts a proper tracking note, here is the list of all patches making up this patch set with direct links.
Patch 15844023 Patch 11.1.1.6.6 (1 of 7) Oracle Business Intelligence Installer
Patch 15844066 Patch 11.1.1.6.6 (2 of 7) Oracle Real Time Decisions
Patch 14800665 Patch 11.1.1.6.6 (3 of 7) Oracle Business Intelligence Publisher
Patch 15843961 Patch 11.1.1.6.6 (4 of 7) Oracle Business Intelligence ADF Components
Patch 15844096 Patch 11.1.1.6.6 (5 of 7) Enterprise Performance Management Components Installed from BI Installer 11.1.1.6.x
Patch 14791926 Patch 11.1.1.6.6 (6 of 7) Oracle Business Intelligence
Patch 15839347 Patch 11.1.1.6.6 (7 of 7) Oracle Business Intelligence Platform Client Installers and MapViewer
As always: don't forget JDEV patch 13952743
Cheers!
Patch 15844023 Patch 11.1.1.6.6 (1 of 7) Oracle Business Intelligence Installer
Patch 15844066 Patch 11.1.1.6.6 (2 of 7) Oracle Real Time Decisions
Patch 14800665 Patch 11.1.1.6.6 (3 of 7) Oracle Business Intelligence Publisher
Patch 15843961 Patch 11.1.1.6.6 (4 of 7) Oracle Business Intelligence ADF Components
Patch 15844096 Patch 11.1.1.6.6 (5 of 7) Enterprise Performance Management Components Installed from BI Installer 11.1.1.6.x
Patch 14791926 Patch 11.1.1.6.6 (6 of 7) Oracle Business Intelligence
Patch 15839347 Patch 11.1.1.6.6 (7 of 7) Oracle Business Intelligence Platform Client Installers and MapViewer
As always: don't forget JDEV patch 13952743
Cheers!
Labels:
11.1.1.6.0 BP6,
11.1.1.6.6,
OBI,
obiee,
patch
Tuesday, October 30, 2012
OBIEE 11.1.1.6.5
While I was off, Oracle released OBIEE 11.1.1.6.5 which is another bugfixing patch set which doesn't bring in new functionality but irons out quite a few quirks.
Here you can find the main MOS article detailling the patches making up this patch set as all bugs fixed in it.
By the way...make sure you don't forget JDEV patch 13952743.
Cheers!
Here you can find the main MOS article detailling the patches making up this patch set as all bugs fixed in it.
By the way...make sure you don't forget JDEV patch 13952743.
Cheers!
Monday, September 24, 2012
11.1.1.6.4 patch has been released for OBIEE
Patch 11.1.1.6.4 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 14538078: PATCH 11.1.1.6.4 (1 OF 7) ORACLE BUSINESS INTELLIGENCE INSTALLER
Patch 14538128: PATCH 11.1.1.6.4 (2 OF 7) ORACLE REAL TIME DECISIONS
Patch 14285344: Patch 11.1.1.6.4 (3 of 7) Oracle Business Intelligence Publisher
Patch 14538164: PATCH 11.1.1.6.4 ( 4 OF 7) ORACLE BUSINESS INTELLIGENCE ADF COMPONENTS
Patch 14415773: Patch 11.1.1.6.4 (5 of 7) Enterprise Performance Management Components Installed from BI Installer 11.1.1.6.x
Patch 14405222: Patch 11.1.1.6.4 (6 of 7) Oracle Business Intelligence
Patch 14409674: Patch 11.1.1.6.4 (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
Cheers!
Once more it's a 7-pack patch and here are the patch numbers and direct links:
Patch 14538078: PATCH 11.1.1.6.4 (1 OF 7) ORACLE BUSINESS INTELLIGENCE INSTALLER
Patch 14538128: PATCH 11.1.1.6.4 (2 OF 7) ORACLE REAL TIME DECISIONS
Patch 14285344: Patch 11.1.1.6.4 (3 of 7) Oracle Business Intelligence Publisher
Patch 14538164: PATCH 11.1.1.6.4 ( 4 OF 7) ORACLE BUSINESS INTELLIGENCE ADF COMPONENTS
Patch 14415773: Patch 11.1.1.6.4 (5 of 7) Enterprise Performance Management Components Installed from BI Installer 11.1.1.6.x
Patch 14405222: Patch 11.1.1.6.4 (6 of 7) Oracle Business Intelligence
Patch 14409674: Patch 11.1.1.6.4 (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
Cheers!
Labels:
11.1.1.6,
11.1.1.6.4,
11g,
obiee,
patch
Tuesday, August 14, 2012
D3.js calendar configuration in OBIEE 11g
With the
release of the 11.1.1.6.2 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
SampleApp:
Checking
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:
Context narrative:
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.
VERY 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.
Content narrative:
Prefix:
<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()
.domain([cl1,cl2])
.range(d3.range(9));
var svg = d3.select("#my_chart").selectAll("svg")
.data(d3.range(year_range1, year_range2))
.enter().append("svg")
.attr("width", width + margin.right + margin.left)
.attr("height", height + margin.top + margin.bottom)
.attr("class", "RdYlGn")
.append("g")
.attr("transform", "translate(" + (margin.left + (width - cellSize * 53) / 2) + "," + (margin.top + (height - cellSize * 7) / 2) + ")");
svg.append("text")
.attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)")
.attr("text-anchor", "middle")
.text(String);
var rect = svg.selectAll("rect.day")
.data(function(d) { return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("rect")
.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; })
.datum(format);
rect.append("title")
.text(function(d) { return d; });
svg.selectAll("path.month")
.data(function(d) { return d3.time.months(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("path")
.attr("class", "month")
.attr("d", monthPath);
var csv =[];
<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()
.domain([cl1,cl2])
.range(d3.range(9));
var svg = d3.select("#my_chart").selectAll("svg")
.data(d3.range(year_range1, year_range2))
.enter().append("svg")
.attr("width", width + margin.right + margin.left)
.attr("height", height + margin.top + margin.bottom)
.attr("class", "RdYlGn")
.append("g")
.attr("transform", "translate(" + (margin.left + (width - cellSize * 53) / 2) + "," + (margin.top + (height - cellSize * 7) / 2) + ")");
svg.append("text")
.attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)")
.attr("text-anchor", "middle")
.text(String);
var rect = svg.selectAll("rect.day")
.data(function(d) { return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("rect")
.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; })
.datum(format);
rect.append("title")
.text(function(d) { return d; });
svg.selectAll("path.month")
.data(function(d) { return d3.time.months(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("path")
.attr("class", "month")
.attr("d", monthPath);
var csv =[];
What happens
here that I can influence?
This
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:
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 ");
Specifies
the colour limits (.domain) as retrieved by the dashboard prompts.
Controls
the display of the year number in front of the rectangles representing the
year:
Leave the
rest as-is.
Narrative:
csv.push({"Date":"@1","Metric":"@2"});
Simply
retrieves the values for date and measure from the data set (per row!). Leave
this as-is.
Postfix:
var data = d3.nest()
.key(function(d) { return d.Date; })
.rollup(function(d) { return d[0].Metric/100; })
.map(csv);
rect.filter(function(d) { return d in data; })
.attr("class", function(d) { return "day q" + color(data[d]) + "-9"; })
.select("title")
.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";
}
</script>
.key(function(d) { return d.Date; })
.rollup(function(d) { return d[0].Metric/100; })
.map(csv);
rect.filter(function(d) { return d in data; })
.attr("class", function(d) { return "day q" + color(data[d]) + "-9"; })
.select("title")
.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";
}
</script>
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; })”
to
“.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]); });”
to
“.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
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
uncle.
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 11.1.1.6.
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 11.1.1.6.
Labels:
11g,
D3.js,
presentation server,
sampleapp
Subscribe to:
Posts (Atom)