Monday, July 15, 2013

Installing OBIEE patch set 11.1.1.7.1 on Windows

Please note OBIEE Bundle Patch 11.1.1.7.151020 is available. You might prefer it.

First download the single big patch file of  Patch 16556157 and the small file of  Patch 16569379 as described in OBIEE 11.1.1.7.1 Bundle Patch is available .
Unzip them. You should have 2 directories named by the patch number.
Now in the directory 16556157, you have 6 directories and a useless readme_16556157.htm.
In sub-directory 16453010, you have the real readme.htm with the "what's new" and the installation guidelines.

The first thing we are advised to do is to back up the Oracle BI system, including the following:
  •     The <Oracle BI Home>\bifoundation\server directory.
  •     The <Oracle Instance>\bifoundation\OracleBIServerComponent\coreapplication_obis1\repository directory.
  •     The <Oracle BI Home>\bifoundation\jee\mapviewer.ear\web.war\WEB_INF\conf\mapViewerConfig.xml file, if you have modified it.
There is a tip: The location of the Oracle BI Home directory and the Oracle Instance directory depend on where Oracle BI was originally installed, and on the platform. For example:
        On UNIX, the Oracle BI Home directory might be prod_mwhome/Oracle_BI1
        On Windows, the Oracle BI Home directory might be c:\prod_mwhome\Oracle_BI1
In my case it's D:\or\MWHOME\Oracle_BI1\bifoundation\server and D:\or\MWHOME\instances\instance1\bifoundation\OracleBIServerComponent\coreapplication_obis1\repository.
I prefer to backup D:\or\MWHOME\instances\instance1\bifoundation\OracleBIPresentationServicesComponent\coreapplication_obips1\catalog as well.

In point 2 of my version of readme, there is a little mistake, you are advised to download each patch separately... You won't find them, there are all part of the big patch file 16556157.

In point 4 you are advised to stop the BI System and told how to do it, step by step. It's all very nice but to me it looks simpler just to run "Stop BI Services" from the Start/All Programs/Oracle Business Intelligence menu. I guess wee see the full details due to Linux needs (and anyway, it's very educational).

Point 5 advises to clear cache: from <Oracle BI Home>\bifoundation\web\catalogmanager\configuration\ (in my case D:\or\MWHOME\Oracle_BI1\bifoundation\web\catalogmanager\configuration\) you should delete 2 files (if they exist) org.eclipse.osgi  &  org.eclipse.equinox.app.

As you remember we have directory 16556157 with 6 sub-directories. Copy or move the sub-directories to <Oracle BI Home> (in my case D:\or\MWHOME\Oracle_BI1). That's 2.5 GB to copy.
Copy there the extracted directory 16569379 as well. (much nicer the 11.1.1.6.X with the special instruction for the jdeveloper patch.)

Open CMD prompt as Administrator on <Oracle BI Home>. 

The readme states:

On UNIX: If you are using a command shell derived from the C shell, then set the environment variables by entering the following:
setenv ORACLE_HOME $PWD
setenv PATH $ORACLE_HOME/bin:$PATH
setenv JAVA_HOME $ORACLE_HOME/jdk
setenv PATH $JAVA_HOME/bin:$PATH
setenv PATH $ORACLE_HOME/OPatch:$PATH
 
On Windows: If the Oracle BI Home directory is C:\prod_mwhome\Oracle_BI1, then set the environment variables by entering the following:
set ORACLE_HOME=C:\prod_mwhome\Oracle_BI1
set PATH=%ORACLE_HOME%\bin;%PATH%
set JAVA_HOME=%ORACLE_HOME%\jdk
set PATH=%JAVA_HOME%\bin;%PATH%
set PATH=%ORACLE_HOME%\OPatch;%PATH%
 (in my case the first line is set ORACLE_HOME=D:\or\MWHOME\Oracle_BI1)
DON'T leave empty spaces in the set, such as set ORACLE_HOME=   D:\or\MWHOME\Oracle_BI1. 
Right Click does the paste action in CMD window.
After you run the set statements, enter each patch directory and run  opatch apply. Wait for the  "Opatch Succeeded" and repeat in the next directory.
 
For example I started with 16453010:
And followed with the rest.
cd..\16849017
opatch apply
cd..\16916026
opatch apply
cd..\16850553
opatch apply
cd..\16869578
opatch apply
cd..\16842070     
opatch apply
 cd..\16569379
opatch apply
The last one requests you to confirm the instance is shut down.

You are advised to check all patches were applied using opatch lsinventory:

The next part has some manual labor (I use the readme numbers starting with 11):

11. Copy the BIPublisherDesktop32.exe and BIPublisherDesktop64.exe files from the <Oracle BI Home>\clients\bipublisher\repository\Tools directory to the prod_mwhome\user_projects\domains\bifoundation_domain\config\bipublisher\repository\Tools directory.
In my case, from D:\or\MWHOME\Oracle_BI1\clients\bipublisher\repository\Tools to D:\or\MWHOME\user_projects\domains\bifoundation_domain\config\bipublisher\repository\Tools.
(Should I copy ExcelAnalyzer.exe as well?)

12. Copy the msmdacc64.dll file from the <Oracle BI Home>\clients\bipublisher\repository\Admin\DataSource directory to the prod_mwhome\user_projects\domains\bifoundation_domain\config\bipublisher\repository\Admin\DataSource directory.
There seems to be a problem here since the source does not exist. I don't know if it's a documentation bug or missing file. 

13.  Remove the jsp_servlet subdirectory associated with Oracle BI Publisher (if it exists), as follows:

  A.  Go to the directory containing the jsp_servlet subdirectory (using a file manager application or the command line). If it exists, then the jsp_servlet subdirectory is located in one of the directories below the <Middleware Home>/<Domain Home>/servers/bi_server1/tmp/_WL_user/bipublisher_11.1.1 directory.

    For example:
        On UNIX: If the Middleware Home directory is /prod_mwhome and the Domain Home directory is /user_projects/domains/bifoundation_domain, then go to the following directory:
        /prod_mwhome/user_projects/domains/bifoundation_domainservers/bi_server1/tmp/_WL_user/bipublisher_11.1.1
        On Windows: If the Middleware Home directory is C:\prod_mwhome and the Domain Home directory is \user_projects\domains\bifoundation_domain, then go to the following directory:
        C:\prod_mwhome\user_projects\domains\bifoundation_domainservers\bi_server1\tmp\_WL_user\bipublisher_11.1.1

B.  Look in each directory below <Middleware home>/<Domain home>/servers/bi_server1/tmp/_WL_user/bipublisher_11.1.1, and remove any jsp_servlet subdirectory that you find.

  14. If you backed up mapViewerConfig.xml because it had been modified, then copy the backed-up file to its original location at <Oracle BI Home>\bifoundation\jee\mapviewer.ear\web.war\WEB_INF\conf\.

Now you should be able to start the server, but before you do, there is one more part not in the readme file.

 You might remember the post of Abhinav Agarwal  Smart View Version to use with OBIEE 11.1.1.7.1
You are advised there to download the new SmartView here. Both zip files seem to be the same. They contain both SmartView files (the 32 and 64 bit).

The readme there states:
"With the availability of Oracle Business Intelligence Enterprise Edition release 11.1.1.7.1, it will no longer be possible to make use of the default Oracle Smart View client installer which is available through the Oracle BI EE Home Page. For this release only, it will be necessary to access an updated version of the Oracle Smart View client installer version 11.1.2.3.000_16909989 (from My Oracle Support), or later.

This updated version can be used to replace the default Oracle Smart View installer in the default Oracle BI EE Home Page location

/<middleware>/Oracle_BI1/clients/epm/SmartView/SmartView.exe
/<middleware>/Oracle_BI1/clients/epm/SmartView/SmartView-x64.exe
2.    Make backup copies of smartview.exe and version.xml before deploying the replacement files.

3.    Download the Smart View zip file from My Oracle Support.

4.    Unzip the file.

5.    Copy smartview.exe and version.xml to the location of the Workspace installation, typically: C:\Oracle\Middleware\EPMSystem11R1\common\epmstatic\wspace\SmartView"

Well you don't have to go to support... you just downloaded the zip file.
Backup  <Oracle BI Home>\clients\epm\SmartView (In my caseD:\or\MWHOME\Oracle_BI1\clients\epm\SmartView),  extract the content of the Zip file to that directory. 

You might want to delete the patch installation files from <Oracle BI Home> and free the 2.5GB of disk space.

Now you can Start up the server. Bon Voyage.



P.S.

I just noticed there is a nice post HERE by Robin Moffatt from Rittman Mead, about "Patch OBIEE the quicker way – with OPatch napply" and they use the 11.1.1.7.1 example.


P.S.S.

You might also be interested in:

PATCH 17606196 for OBIEE 11.1.1.7.1 - IE10 & Chrome 30 solution

Exalytics X3-4 is available

Oracle published Exalytics X3-4 availability here, with twice as much memory and 2.4 TB of Flash storage:

From the press release it seems to support OBIEE 11.1.1.7, Endeca 3.0 and EPM 11.2.3.
That reminds me; In the OBIEE patch 11.1.1.7.1 there is a new feature "Support for TimesTen Parallel Insert", it seems to be ideal for Exalytics.

Here are some quotes:

The new Exalytics X3-4 system features 2 TB of main memory, 2.4 TB of flash storage, and 5.4 TB of hard disk. Oracle also released system upgrades to increase memory capacity for existing Exalytics X2-4 customers, and updated software for all Exalytics customers.

The software foundation for Oracle Exalytics X3-4 includes:
Oracle Business Intelligence Foundation Suite 11.1.1.7 delivers more than 200 enhancements across the suite and many features targeted exclusively for Oracle Exalytics. Examples of benefits for Exalytics customers include extremely fast ‘hot-data’ recommendations from the database and high-volume bursting with Oracle BI Publisher, to generate hundreds of thousands of personalized reports and documents for business users in time periods that were previously unachievable. In addition to these, Oracle Essbase, a component of Oracle Business Intelligence Foundation Suite, also benefits from Flash memory and expanded main memory. Customers can expand planning across the enterprise, compress planning cycles, and deliver relevant, data driven insights to all lines of business.
Oracle Endeca Information Discovery 3.0 enables rapid insights into new sources of data including unstructured content in social media, websites, content management systems, raw text from documents, email, and more. By correlating this data to the structured data in data warehouses and enterprise applications, users will be able to more accurately manage data and meaning form unstructured sources, ultimately driving better business decisions and innovations.
Oracle Hyperion Enterprise Performance Management (EPM) System Release 11.1.2.3 is the latest release of Oracle’s industry-leading enterprise planning, reporting and financial close applications. With updates to user experience, added functional capabilities and new powerful integrations, this new release empowers organizations to plan for profitable growth and report with confidence. Delivering faster and more granular profitability analysis, Oracle Hyperion Profitability and Cost Management is now certified to run on Oracle Exalytics In-Memory Machine and pre-configured to enable multidimensional reporting. This release also includes direct integration of Oracle Business Intelligence Enterprise Edition on Oracle Exalytics with Hyperion Financial Management to deliver rich, pre-built analytics on consolidated financial results.




This is a link to the the updated certification matrix (Some browsers don't "like" this link since it points to Excel file).


Monday, July 8, 2013

OBIEE dual Y line chart / graph using Javascript

In the new 305 SampeApp VM (Virtual Machine) available here  there is a sample of Dual Y line chart in dashboard 3.2, page Dyal Y Axis.
I wanted to find out how it is done, since it seems safer than using external engine such as  Google, described here. (There is also a post named OBIEE dual Y bar using BI Publisher and you might want to see:OBIEE - Dual Y axis line and Dual axis Bar charts: the easy, unsupported and not recommended way).
I could see on the chart, those are highchart.com java scripts. I don't know the legal aspect, but just for the sake of testing I copied the scripts folder from the VM to my local installation.
In case you don't have AnalyticsRes set up on your BI Server, please do, as described here.
So I copied the SampleApp/scripts folder under AnalyticsRes on the VM to the equivalent on my computer (MWHOME\instances\instance1\bifoundation\OracleBIPresentationServicesComponent\coreapplication_obips1\analyticsRes\SampleApp\Scripts). It is ~1MB of scripts.

In OBIEE I created an Analysis based on Sample Sales Lite:

 and copied the Narrative definition from the SampleApp. I couldn't  see it in the results tab but in the "show results how it will look in the Dashboard" It looked interesting:
Off course the legend and the scale legend was all wrong and needed fixing.

This was the original Narrative:

Header:

<script type='text/javascript' src='/analyticsRes/SampleApp/Scripts/highcharts/JQuery/jquery-1.8.2.min.js'></script>
<script src='/analyticsRes/SampleApp/Scripts/highcharts/highcharts.js'></script>
<script src='/analyticsRes/SampleApp/Scripts/highcharts/modules/exporting.js'></script>

<script type='text/javascript'>
$(function() {

var options = {
           chart: { renderTo: 'container2', zoomType: 'xy' },
                                                title: { text: 'Evolution Three different scale on the same chart' },
                                                subtitle: { text: 'Source: OBIEE SampleApp' },
                                                xAxis: [{ categories: [] }],
                                                yAxis: [
                                                                { labels: { formatter: function() { return this.value +' USD'; }, style: { color: '#89A54E' } }, title: { text: 'Unit Price', style: { color: '#89A54E' } } },
                                                                { gridLineWidth: 0, title: { text: 'Process Time', style: { color: '#AA4643' } }, labels: { formatter: function() { return this.value +' days'; }, style: { color: '#AA4643' } }, opposite: true },
                                                                { labels: { formatter: function() { return this.value +''; }, style: { color: '#89A54E' } }, title: { text: '# of Orders', style: { color: '#89A54E' } } }
                                                ],
                                                tooltip: { formatter: function() {var unit = { 'Temperature': '°C', 'Sea-Level Pressure': 'mb','test':'' }[this.series.name]; return ''+this.x+':'+this.y ; } },
                                                legend: { layout: 'vertical', align: 'left', x: 120, verticalAlign: 'top', y: 80, floating: true, backgroundColor: '#FFFFFF'},
                                                series: [
                                                                {name: 'Unit Price', type: 'spline', color: '#AA4643', yAxis: 1, marker: { enabled: false }, dashStyle: 'shortdot', data : []},
                                                                {name: 'Process Time', color: '#89A54E', type: 'spline', data: [] },
                                                                {name: '# of Orders', color: '#3ADF00', type: 'spline', data: [],  yAxis: 2 } ]
                                                };


                                               
                                               
Body:

options.series[0].data.push(parseFloat("@2".replace(" ", "")));
options.series[1].data.push(parseFloat("@3".replace(" ", "")));
options.series[2].data.push(parseFloat("@4".replace(" ", "")));
options.xAxis[0].categories.push('@1');                                               



Postfix:

var chart = new Highcharts.Chart(options);
});
</script>
<div id='container2' style='min-width: 850px; height: 400px; margin: 0 auto'></div>



we can see the 3 Javascripts being used:
'/analyticsRes/SampleApp/Scripts/highcharts/JQuery/jquery-1.8.2.min.js'
'/analyticsRes/SampleApp/Scripts/highcharts/highcharts.js'
'/analyticsRes/SampleApp/Scripts/highcharts/modules/exporting.js'


 The last one "exporting.js", is optional. It is responsible for the print and export options on the right top.




So it seems all changes need to be done in the header.

I'm OK with the internal Left Axis, but I want to rename it to Revenue.
So it's
 { labels: { formatter: function() { return this.value +' USD'; }, style: { color: '#89A54E' } }, title: { text: 'Revenue', style: { color: '#89A54E' } } },
instead of:
{ labels: { formatter: function() { return this.value +' USD'; }, style: { color: '#89A54E' } }, title: { text: 'Unit Price', style: { color: '#89A54E' } } },

the Right Axis was described here:
{ gridLineWidth: 0, title: { text: 'Process Time', style: { color: '#AA4643' } }, labels: { formatter: function() { return this.value +' days'; }, style: { color: '#AA4643' } }, opposite: true },
And I changed it to 
{ gridLineWidth: 0, title: { text: 'Billed Quantity', style: { color: '#AA4643' } }, labels: { formatter: function() { return this.value +' Units'; }, style: { color: '#AA4643' } }, opposite: true }, 

the opposite:true is a good hint, where it is located.

There are actually 2 Axis on the left so the leftmost of them was changed from:
{ labels: { formatter: function() { return this.value +''; }, style: { color: '#89A54E' } }, title: { text: '# of Orders', style: { color: '#89A54E' } } } 
to: 
{ labels: { formatter: function() { return this.value +'USD'; }, style: { color: '#89A54E' } }, title: { text: 'Discount', style: { color: '#89A54E' } } } 

Now comes the harder part, the tooltip:
tooltip: { formatter: function() {var unit = { 'Temperature': '°C', 'Sea-Level Pressure': 'mb','test':'' }[this.series.name]; return ''+this.x+':'+this.y ; } },
I have no idea what the Temperature part does, on the other hand I'm happy with the result, so Ill leave it unchanged.

What is left is to change the labels to fit our series (the floating window on the left).
From:
legend: { layout: 'vertical', align: 'left', x: 120, verticalAlign: 'top', y: 80, floating: true, backgroundColor: '#FFFFFF'},
 series: [ 

{name: 'Unit Price', type: 'spline', color: '#AA4643', yAxis: 1, marker: { enabled: false }, dashStyle: 'shortdot', data : []},
{name: 'Process Time', color: '#89A54E', type: 'spline', data: [] },
{name: '# of Orders', color: '#3ADF00', type: 'spline', data: [],  yAxis: 2 } ]


 I prefer the legend location on the top and a bit to the left.
To:
legend: { layout: 'vertical', align: 'left', x: 60, verticalAlign: 'top', y: 1, floating: true, backgroundColor: '#FFFFFF'},
series: [ {name: 'Revenue', type: 'spline', color: '#AA4643', yAxis: 1, marker: { enabled: false }, dashStyle: 'shortdot', data : []},
{name: 'Billed Quantity', color: '#89A54E', type: 'spline', data: [] },
{name: 'Disscount Amount', color: '#3ADF00', type: 'spline', data: [],  yAxis: 2 }]


So the result is:

The complete Narrative is now (of course remember to check the "Contains HTML Markup"):

Header:

<script type='text/javascript' src='/analyticsRes/SampleApp/Scripts/highcharts/JQuery/jquery-1.8.2.min.js'></script>
<script src='/analyticsRes/SampleApp/Scripts/highcharts/highcharts.js'></script>
<script src='/analyticsRes/SampleApp/Scripts/highcharts/modules/exporting.js'></script>
<script type='text/javascript'>
$(function() {
var options = {
           chart: { renderTo: 'container2', zoomType: 'xy' },
                    title: { text: 'Sample of Three different scale on the same chart' },
                                                subtitle: { text: 'My Sample' },
                                                xAxis: [{ categories: [] }],
                                                yAxis: [
              { labels: { formatter: function() { return this.value +' USD'; }, style: { color: '#89A54E' } }, title: { text: 'Revenue', style: { color: '#89A54E' } } },
              { gridLineWidth: 0, title: { text: 'Billed Quantity', style: { color: '#AA4643' } }, labels: { formatter: function() { return this.value +' Units'; }, style: { color: '#AA4643' } }, opposite: true },
              { labels: { formatter: function() { return this.value +'USD'; }, style: { color: '#89A54E' } }, title: { text: 'Discount', style: { color: '#89A54E' } } }
                                                ],
               tooltip: { formatter: function() {var unit = { 'Temperature': '°C', 'Sea-Level Pressure': 'mb','test':'' }[this.series.name]; return ''+this.x+':'+this.y ; } },
                 legend: { layout: 'vertical', align: 'left', x: 60, verticalAlign: 'top', y: 1, floating: true, backgroundColor: '#FFFFFF'},
                           series: [
                                {name: 'Revenue', type: 'spline', color: '#AA4643', yAxis: 1, marker: { enabled: false }, dashStyle: 'shortdot', data : []},
                                {name: 'Billed Quantity', color: '#89A54E', type: 'spline', data: [] },
                               {name: 'Disscount Amount', color: '#3ADF00', type: 'spline', data: [],  yAxis: 2 } ]
                           };


Body:

options.series[0].data.push(parseFloat("@2".replace(" ", "")));
options.series[1].data.push(parseFloat("@3".replace(" ", "")));
options.series[2].data.push(parseFloat("@4".replace(" ", "")));
options.xAxis[0].categories.push('@1');                                               



Postfix:

var chart = new Highcharts.Chart(options);
});
</script>
<div id='container2' style='min-width: 850px; height: 400px; margin: 0 auto'></div>




Looks better, but there is some work to be done.




So since stealing java scripts from Oracle VM is not easy (And not the best policy); I wanted to be sure I can download the relevant scripts myself.

So I downloaded:
1. A newer version of jQwuery from jquery.com, specifically, Download the compressed, production jQuery 1.10.2.
2. Downloaded Highcharts 3.0.2 from http://www.highcharts.com/download
 extracted HighCharts.
Replaced the files at analyticsRes, had to do some minor modifications to the Narrative (jquery file is 1.10.2 now and not 1.8.2. Slightly different File Name).

And .... All is working fine.