Showing posts with label CONFIGURATION. Show all posts
Showing posts with label CONFIGURATION. Show all posts

Friday, September 23, 2011

OBIEE11g Blocking Analyses Based on Criteria

Yes if done this for 10g (see:http://obiee101.blogspot.com/2008/06/obiee-blocking-request-based-on.html). Just wanted to check if this still works in 11g.

Start by locating your answerstemplates.xml. If you don’t have a CustomMessages diretory create one and place it there (or take a change on loosing your stuff during a update Knipogende emoticon . )

There are several blogposts with nice “documentation” copies. For this article I checked every function personally. (Including the “one” I couldn’t get to work…..)

Find the webmessage for kuiCriteriaBlockingScript:

image

Since we don’t want to edit our template al the time forcing a restart we put in an external reference to a javascript called: mycriteriablocking.js

<WebMessage name="kuiCriteriaBlockingScript" translate="no">
    <HTML>
        <script type="text/javascript" src="fmap:mycriteriablocking.js" />
    </HTML>
</WebMessage>

image

in the ORACLE_INSTANCE\bifoundation\OracleBIPresentationServicesComponent\coreapplication_obipsn\analyticsRes directory we place a javascript (.js) file called mycriteriablocking.js.

just a warning. this is very very sensitive on typo’s Knipogende emoticon

Start with a simple formula:

// This is a blocking function. It ensures that users select what
// the designer wants them to.
// http://obiee.blogspot.com
function validateAnalysisCriteria(analysisXml)
{
   return true;
}

image

- Force the usage of a specific “Subject Area”

function validateAnalysisCriteria(analysisXml)
{
// create a new validator
var tValidator = new CriteriaValidator(analysisXml);
// Only use Sample Sales Lite or Sample Targets Lite
if (    tValidator.getSubjectArea() != "Sample Sales Lite" &&
        tValidator.getSubjectArea() != "Sample Targets Lite" )
      return "You can only use Sample Sales Lite or Sample Targets Lite!";
//We come here if everything checks out
   return true;
}

- Force the usage of a specific ”Table”

function validateAnalysisCriteria(analysisXml)
{
// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

// Table must exists
if (    !tValidator.tableExists("Time")     )
        return "Each report must have a Time Dimension";
//We come here if everything checks out
   return true;
}

- Force the usage of a specific “Column”

function validateAnalysisCriteria(analysisXml)
{
// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

// Column must exists
if (     !tValidator.columnExists("Time", "Per Name Year")   )    
        return "Each report must have a Year column from the time dimension";
//We come here if everything checks out
   return true;
}

- If one Column is used the other is compulsory

function validateAnalysisCriteria(analysisXml)
{
// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

// If we use one column then also the other should be there
if (    !tValidator.dependentColumnExists("Time", "Per Name Qtr" , "Time", "Per Name Year"))
        return "A quarter with out a Year is pretty useless!";
//We come here if everything checks out
   return true;
}

- If one Column is used a specific column is compulsory

!!! According to the documentation this should work?? I wasn’t able to create a working example (yet)….. Bedroefde emoticon… !! (If you have one lying around for 11g please let me know……)

function validateAnalysisCriteria(analysisXml)
{
// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

// If we use a random column from a table a specific column should be there
if (    !tValidator.dependentColumnExists("Base Facts", "", "Time", "Per Name Year"))
        return "Facts should always be presented together with a year";
//We come here if everything checks out
   return true;
}

- A column should be at least in the filter:

function validateAnalysisCriteria(analysisXml)
{

// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

if (    !tValidator.filterExists("Time", "Per Name Year"))
        return "A Year filter must be applied";
//We come here if everything checks out
   return true;
}

- If a column is used the other should be in the filter:

function validateAnalysisCriteria(analysisXml)
{

// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

if (    !tValidator.dependentFilterExists("Base Facts","Revenue" , "Time", "Per Name Year"))
        return "Revenue needs a year filter";
//We come here if everything checks out
   return true;
}

- A minimum numbers of selection should be in the filter

function validateAnalysisCriteria(analysisXml)
{

// create a new validator
var tValidator = new CriteriaValidator(analysisXml);

// Count the number of elements in the filter var n = (tValidator.filterCount( "Time", "Per Name Year")); if ((n <2))
    return "Please select at least 2 years in your filter";
//We come here if everything checks out
   return true;
}

Till Next Time

Thursday, April 28, 2011

OBIEE Making your laptop available for Wi-Fi

If you want to do a demo for customer showing the mobile capabilities for OBIEE you need a Wi-Fi access point. Since most organisations don’t allow ‘experiments’ on there Wi-Fi here is how you can set up an Windows 7 laptop as a Wi-Fi gateway.

Open a command line box on your laptop and enter:

netsh wlan set hostednetwork mode=allow ssid=ObiLaptopWireLess key=OBIEE123

image

image

Open the network centre and look for the new entry

image

image

It’s probably called something like ‘Wireless Network Connection 2’

image

Open the connection and select the Sharing tab on the incomming connection:

image

image

Select a Network to use for the connection:

image

On the networking tab select only the IPv4 protocol:

image

Open a command box to start the network:

image

netsh wlan start hostednetwork

image

Change the name to something meaningful:

image

Till Next Time

Tuesday, April 19, 2011

OBIEE11g PROJECT_INACCESSIBLE_COLUMN_AS_NULL

The PROJECT_INACCESSIBLE_COLUMN_AS_NULL in the NQSConfig.ini file controls how security-sensitive columns are displayed to unauthorized users.

If this parameter is set to YES, then a NULL expression replaces the original column expression in the query and secured columns are hidden from unauthorized users in analyses.

If this parameter is set to NO, then when a user attempts to run a report that contains a secured column the user is not authorized to see, an unresolved column error occurs.

image

Till Next Time

Monday, April 11, 2011

OBIEE11g DEFAULT_PRIVILEGES

By default every group or user defined in the RPD has read rights to each new element you add. This can be a bit of a pain in the a$$$ if you have a lot elements which each try own security group. Better to develop the RPD so that you have to grant each group access to a element.

This can be set in the NQSconfig.ini file:

image

Till Next Time

Thursday, April 7, 2011

OBIEE11g Setting Multi User Development Options

When you are working on a MUD or Multi User Development RPD you can set some extra options.

In the MUD directory create a new option file for each master repository. It’s a TXT file called [RPD_NAME].opt fi: paint.opt. (be aware CaseSensitive!)

Set the properties of the file to hidden:

image

open the file in a text editor:

Add the following (INI style):

[Options]

BuildNumber = Yes

Admin = admin1;admin2

Mandatory Consistency Check = Yes

Equalize During Merge = Yes

image

Option

Description

BuildNumber

When set to Yes, the build version of the Administration Tool is displayed in the MUD history.

Admin

Lists multiuser development administrators. Administrators must be defined in the option file before they can delete MUD history.

Administrators are defined by their computer/network login names. When multiple administrators exist, administrator names are separated by semicolons. For example:

Admin=jsmith;mramirez;plafleur

Mandatory Consistency Check

When set to Yes, the publish step performs a consistency check. Publishing cannot proceed unless there are no errors in the given repository.

Equalize During Merge

When set to Yes, the multiuser development merge process performs mandatory equalization during MUD merges.

Note that setting this option to Yes affects the performance of the merge process.

Mandatory Consistency Check &  Equalize During Merge can be experienced as a real pain in b*&t for developers because it forces them that everything is ok when checking in. I advise it only projects which are close to deployment for production to ensure some basic error checking.

Till Next Time

Thursday, March 31, 2011

OBIEE11g Controlling Table, Pivot and Charts behaviour

In 11g it is still controlled by the instanceconfig.xml. You can edit the file and restart the system to see the effect.

Especially the MaxVisible.. parameters are of interest when you seem to “miss” data on the screen on large reports.

Be aware these are system wide controls, so don’t change the DefaultRowsDisplayed just for one report!

<ServerInstance>
<Views>
<Table>
<MaxVisiblePages>1000</MaxVisiblePages>
<MaxVisibleRows>500</MaxVisibleRows>
<MaxVisibleSections>25</MaxVisibleSections>
<DefaultRowsDisplayed>30</DefaultRowsDisplayed>
</Table>
<Pivot>
<MaxVisibleColumns>300</MaxVisibleColumns>
<MaxVisiblePages>1000</MaxVisiblePages>
<MaxVisibleRows>500</MaxVisibleRows>
<MaxVisibleSections>25</MaxVisibleSections>
<DefaultRowsDisplayed>30</DefaultRowsDisplayed>
</Pivot>
<Charts>
<MaxVisibleColumns>2000</MaxVisibleColumns>
<MaxVisiblePages>1000</MaxVisiblePages>
<MaxVisibleRows>2000</MaxVisibleRows>
<MaxVisibleSections>25</MaxVisibleSections>
<JavaHostReadLimitInKB>4096</JavaHostReadLimitInKB>
</Charts>
</Views>
</ServerInstance>



Till Next Time

Monday, March 28, 2011

OBIEE11g preventing online RPD changes

I personally think it’s never a good idea to allow online changes to the RPD by default. Especially not on production environments. In OBIEE11g you can set the online editing of the RPD in

Enterprise Manager>Business Intelligence > Coreapplication > Capacity Management > Performance:

image

Click on lock and Edit Configuration:

image

Press close:

image

(un)Check the box:

image

Click Apply:

image

Press activate Change:

image

Wait a bit:

image

Press Close:

image

Go to the restart page by pressing:

image

Press Restart:

image

Till Next Time

Thursday, January 28, 2010

OBIEE Performance tuning

Lately I get a lot of OBIEE “performance” tuning questions.

FI: Our client is downloading a report with 4 million rows and the server get’s very slow our even crashes……….

Or: Out client has a report with 2 million rows and 20 columns with a sort option on each column…….

First: I said it before and will say it again and again…..

OBIEE is not an ETL tool. It is NOT designed to handle large amounts of non aggregated data. It’s designed to handle dimensional structured data with sufficient aggregation tables.

So please please stop hammering in nails with an plush screwdriver!

image

Of course there are some tuning possibilities you might want to explore.

WORK_DIRECTORY_PATHS

From the OBIEE documentation:

Specifies one or more directories for temporary space.
Each directory listed needs to be an existing fully-qualified, writable directory pathname, with double quotes ( " ) surrounding the pathname. Specify mapped directories only. UNC path names and network mapped drives are allowed only if the service runs under a qualified user account. To change the account under which the service is running, see the corresponding topic in the Oracle Business Intelligence Enterprise Edition Deployment Guide.
Specify multiple directories with a comma separated list. Valid values are any fully qualified pathname to an existing, writable directory.
For optimum performance, temporary directories should reside on high performance storage devices.
If you specify more than one directory, they should reside on different drives.
Syntax: WORK_DIRECTORY_PATHS = "<full_directory_path_1>" [,"<full_directory_path_2>"{, "<full_directory_path_n>"}] ;


Example 1: WORK_DIRECTORY_PATHS = "C:\Temp" ;
Example 2: WORK_DIRECTORY_PATHS = "D:\temp", "F:\temp" ;


NOTE: Specifying more than one directory per drive does not improve performance because file I/O takes place through the same I/O controller. In general, specify only one directory per disk drive.
Specifying multiple directories on different drives improves the overall I/O throughput of the Oracle Business Intelligence Server because internally, the processing files are allocated using a roundrobin algorithm that balances the I/O load across the given disk drives.

Rule of thumb: Invest in fast drives, consider virtual / RAM drives.

SORT_MEMORY_SIZE

From the OBIEE documentation:

Specifies the maximum amount of memory to be used for each sort operation. Multiple operations can each use memory up to the value specified. The limit for SORT_MEMORY_SIZE is determined by the physical memory of the server machine and on the number of sort operations that might occur simultaneously. Specify KB for kilobytes, MB for megabytes, and no units for bytes.
Example: SORT_MEMORY_SIZE = 4 MB ;

The size specified by SORT_MEMORY_SIZE sets the upper limit on how large the sorting buffer can be in the Oracle Business Intelligence Server. When this limit is exceeded, data is sorted in allotments of the size set by SORT_MEMORY_SIZE and the sorted sets are merged together. For example, suppose SORT_MEMORY_SIZE is set to 4 MB and the size of the data to be sorted is 32 MB. The server performs the sort once per each 4 MB of data, for a total of eight sort operations,
and then merge the results into a single result set. This technique allows the Oracle Business Intelligence Server to sort data of indefinite size.
The merge process itself is generally not costly in terms of resources, but it does include a read and write of each result set in a temporary file. To reduce the time this takes, increase the SORT_MEMORY_SIZE. This parameter can be tuned over time by taking into consideration the data size of the query and the number of concurrent users.

Rule of thumb: Don’t go overboard with this value, 10mb for a hundred concurrent users is 1 Gb of server memory. Don’t let OBIEE push other processes into the swap memory of the OS.

 

SORT_BUFFER_INCREMENT_SIZE

From the documentation:

Specifies the increment that the sort memory size is increased by as more memory is needed. As more memory is required, the size increases by the value specified until it reaches the value of
SORT_MEMORY_SIZE.
Example: SORT_BUFFER_INCREMENT_SIZE = 256 KB ;

This parameter defines the increment by which SORT_MEMORY_SIZE should be reached. For example, suppose SORT_MEMORY_SIZE is set to 4 MB and the data to be sorted is just one megabyte. As data is fed into the sort routine, the size of the sort buffer increases only by the increment size, rather than the full size allowed by SORT_MEMORY_SIZE. This mechanism allows the Oracle Business Intelligence Server to sort smaller result sets efficiently without wasting memory.

Rule of thumb: 5 – 10 % of the SORT_MEMORY_SIZE

 

VIRTUAL_TABLE_PAGE_SIZE

From the documentation:

Several operations—sort, join, union and database fetch—can require memory resources beyond those available to the Oracle Business Intelligence Server. To manage this condition, the server uses a virtual table management mechanism that provides a buffering scheme for processing these operations. When the amount of data exceeds the VIRTUAL_TABLE_PAGE_SIZE, the remaining data is buffered in a temporary file and placed in the virtual table as processing
continues. This mechanism supports dynamic memory sizes and ensures that any row can be obtained dynamically for processing queries.
When VIRTUAL_TABLE_PAGE_SIZE is increased, I/O operations are reduced. Complex queries may use 20 to 30 virtual tables, while simple queries may not even require virtual tables. The
default size of 128 KB is a reasonable size when one considers that the size for virtual paging in Windows NT is 64 KB. This parameter can be tuned depending on the number of concurrent users and the average query complexity. In general, setting the size higher than 256 KB does not yield a corresponding increase in throughput due to the 64 KB size limit of Windows NT system buffers, as each I/O still goes through the system buffers

Rule of thumb: Trust the documentation, more then 256 KB is not necessary.

All the parameters are set in the NQSConfig.INI File

Till Next Time

Wednesday, August 19, 2009

Wednesday, October 8, 2008

OBIEE Portal customization part 2 "the portalcontent"

After the Login screen (http://obiee101.blogspot.com/2008/09/obiee-making-custom-log-on-and-log-off.html) and the portalbanner (http://obiee101.blogspot.com/2008/09/obiee-portal-customization-part-1.html) it's time for the portalcontent. Most of this screenpart is controlled by portalcontent.css.
Active Tab:


Appearance: portalcontent.css => .TabHiFont
Inactive Tab:
Appearance: portalcontent.css => a.TabDimFont
Space between tabs:

Appearance: portalcontent.css => .TabSep
Thickness of the bar below the tabs:

Appearance: portalcontent.css => .TabLineTable
Tab Background image's

Appearance: .TabHiCell, .TabHiSep, .TabDimCell, .TabDimSep
Minibuttons:

Appearance: portalcontent.css => .minibuttonOn
Dashboard Sections:



Of course this posting doesn't include all possible CSS settings but it gives you a good starting point.

Till Next Time
This article was original written for the Ciber Knowledge Blog:

Wednesday, September 24, 2008

OBIEE making a custom Log On and Log Off screen

One of the first things a customer see when using OBIEE is the log on screen. So it’s important to make this a customer personal as possible. Most information on the web for this personalization is based on altering the bglogon.jpg.


Besides it possible being a copyright infringement, you run run the risk that you loose al your work on the next system upgrade. The content and appearance of the Log On and Log off screen is based on a couple of files which are highly customable. First of all make your own custom Style and Skin. (If you can’t remember how have a looke here). In the ..\OracleBI\web\app\res\sk_MyCompagny\b_mozilla_4 you will find logon.css which controls the look and feel. In the .LogonTable part you will find a reffence to the background image, you can change this to your own personal image:



(WOW: if you are on OC4J_BI be sure to keep all changes in sync with the files in ..\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\sk_MyCompagny\b_mozilla_4)

The rest of the screen is diffeded into 6 parts:



HeadLine:



Appereance: logon.css => .Headline, content: ProductMessages.xml => kmsgProductGeneral {Info on making your own customMessages can be found here}.

InfoText:



Appereance: logon.css => .InfoText, content: system generated.

Subtitle:



Appereance: logon.css => .Subtitle, content: logonmessages.xml => kmsgAuthenticateRemembermyIDandpassword

Logon Credentials



Appereance: logon.css => .PromptTable and .PromptCaption, content: logonmessages.xml => kmsgAuthenticateUser, kmsgAuthenticatePassword, kmsgAuthenticateLogOn

Select a language

Appereance: logon.css => .SAWLogonInput, content: logonmessages.xml => kmsgSelectALanguage (Note: the availble langauges are controlled by the instanceconfig.xml)

Copyright:


Appereace: logon.css => .Footer (font-size is overruled), content:productmessages.xml => kmsgProductGeneral, utilmessages.xml => kmsgNQuireLegalCopyright
Log Off Screen



Background: logon.css => .Logontable "background-image"

HeadLine:






Subtitle



Appereance: logon.css => .Headline, content: ProductMessages.xml => kmsgProductGeneral
Appereance: logon.css => .Subtitle, content: logonmessages.xml => kmsgAuthenticateSSOThankYouHaveLoggedOff, kmsgAuthenticateThankYouHaveLoggedOff, kmsgAuthenticateThankYouWereLoggedOffText

Till Next Time

This article was original written for the Ciber Knowledge Blog:
http://knowledge.ciber.nl/weblog/?p=132