Reference variable expressions within Oracle BI Answers

Variables such as System or Session can be referenced witin Oracle BI Answers. To reference a variable with a expression, the following syntax is available for referencing the Login User Name:



This can be used within a Narrative View to display information about the current User or Session:


The following can be used as example:

[b]User Name:[/b] @{user.displayName}{default} <BR>
[b]User Name:[/b] @{biServer.variables['NQ_SESSION.USER']} <BR>
[b]Roles:[/b] @{biServer.variables['NQ_SESSION.ROLES']} <BR>
[b]Group:[/b] @{biServer.variables['NQ_SESSION.GROUP']} <BR>
[b]Group:[/b] @{biServer.variables['NQ_SESSION.WEBGROUPS']} <BR>


For further reference, check the official Documentation:

OBIEE: BY clause for group by

Within Oracle BI Answers (and only within BI Answers; not within the rpd metadata model), the BY clause can be used in conjunction with a Aggregate function to specify the level at which the metric should be aggregated (group by).

As an Example, the following Analysis displays the shipped amount per Year and product type:


Within certain scenarios, it may be useful to add a level of aggregation at a particular level within a Report. This can be achieved with the BY clause. This clause can be added with a aggregation function such as MIN, MAX, SUM etc. within the BI Answers formula editor:


SUM("Base Facts"."7- Shipped Amount" BY "Time"."T05 Per Name Year")

This, creates a group by for the measure at the level of year, regardless of other aggregation levels intended by the Report e.g. at the level of year and produt type:


However, this clause should only be used with caution for possible incorrect or unintended results.

Within the .rpd, the concept of Level-Based Measures can be used to achieve the same Results.

Bug: creation of Windows service for Oracle BI within installation

During the installation of Oracle BI 12c (Version a Windows service called “Oracle Business Intelligence [bi]” is automatically created to start & stop the BI services (Weblogic + BI Domain) as a Windows service e.g. to auto startup the BI Services in case the complete windows server is re-booted.

For the current version a bug exist which configures the Environment variables incorrectly when the Oracle BI installation is not done to the C:\ drive, but another hard drive within the server, such as D:\ . The issue only applies to starting and stopping the BI Services via the Windows Service method and not to starting/stopping via from the start.cmd command line (as the Windows service points to a different start script located in the directory and does not use the regular bitools/bin/start.cmd script). The incorrect setting of the Environment variables prevents the Windows service from starting the BI Services and the following error is written to the windows services log file:

BI_PRODUCT_HOME set as c:\windows\system32
ORACLE_HOME set as C:\Windows
The system cannot find the path specifiedimage
This is caused by an within the start.cmd script which is called from the Windows service “Oracle Business Intelligence [bi]” and located in the following directory:


The script uses the windows shell command pushd and popd to write the current working directory into the session, but doesn’t catch if the installation is done to a different drive from C:\ when performing a cd (change directory) command. This can be seen by the fact that the BI_PRODUCT_HOME and ORACLE_HOME are referencing (pointing) to the patch of the windows cmd tool C:\windows\system32 rather then the correct Oracle BI installation directory.

As a workaround the pushd and popd have been removed from the start.cmd script and the path has been specified for path Environment variables BI_PRODUCT_HOME & ORACLE_HOME.

SET BI_PRODUCT_HOME=D:\Oracle\Obiee12c\bi\
SET ORACLE_HOME=D:\Oracle\Obiee12c
SET default_biDomainHome=%ORACLE_HOME%\user_projects\domains\bi

after saving the file like above the Windows service uses the correct environment variable path, as seen by comparing both highlighted areas below:

Oracle BI 12c: File locations

important file locations for Oracle BI 12c:

module location
scripts directory /opt/oracle/obiee/user_projects/domains/bi/bitools/bin
Repository (RPD) /opt/oracle/obiee/user_projects/domains/bi/bidata/service_instances/
Web Catalog /opt/oracle/obiee/user_projects/domains/bi/bidata/service_instances/
NQSConfig.INI /opt/oracle/obiee/user_projects/domains/bi/config/fmwconfig/biconfig/
instanceconfig.xml /opt/oracle/obiee/user_projects/domains/bi/config/fmwconfig/biconfig/
tnsnames.ora /opt/oracle/obiee/user_projects/domains/bi/config/fmwconfig/
AdminServer log /opt/oracle/obiee/user_projects/domains/bi/servers/
Managed Server logs /opt/oracle/obiee/user_projects/domains/bi/servers/
BI Server logs /opt/oracle/obiee/user_projects/domains/bi/servers/obis1/logs
Presentation server logs /opt/oracle/obiee/user_projects/domains/bi/servers/obips1/logs

Oracle BI EE 12c: Configuring first Oracle Database connectivity with TNS Names after installation

In case the oracle Database should be used by Oracle BI, the database connectivity must be configured after the installation using the Oracle Database driver and TNS Names configuration.

For the server machine

On the Server (where Oracle BI EE 12 is installed), the Installation routine of Oracle BI automatically ship’s a Instant Client Version of the Oracle Database Client (Database driver).
The files of the driver are located within the following directory:

On Linux/Unix On Windows Description oci.dll Client code library oraociei10.dll OCI Instant Client data shared library orannzsbb10.dll Security library

The TNS Names configuration that should be used by the Oracle BI Server has to be specified by the sqlnet.ora and tnsnames.ora which need to be placed within the following directory:


The following shows a example of the sqlnet.ora file:

And the following shows a example of the tnsnames.ora fiile:

Using above files the Oracle BI server should be able to connect to the database specified within the TNS Names file.

For the developer machine

The Oracle BI 12c Administration Tool (BI Developer Studio) requires the above (example) configuration files for sqlnet.ora and tnsnames.ora to be placed within the following directory of the client developer machine:

The TNS Name specified within the tnsnames.ora may then be used within the Connection Pool definition of the Oracle BI Metadata either by using the defined name or by using the fully qualified TNS Names entry. When refreshing the count of a database object such as a Table, the Oracle BI Server should then be able to retrieve the row count and display the row count within the Oracle BI Administration Tool:


In case of bug fixing, the log of the Oracle BI Administration Tool is located within the following path:


Target Levels: What do they steer and what not? Part 3/3

Within this third and final article I’ll extend the Target Level Concept with the selection Rules feature.The first article of the series introduces and explains the concept of Target Levels. The second article showed how Target Level linked the Segment Designer, the Campaign Load and the Campaign Execution (Launch).

Target Level and Selection Rules

For this, I’ll re-use the same Segment as before:

The concept of Selection Rules allows to associate another Target Level (as a kind of secondary Target Level) to the selected (Primary) Target Level, to influence or constrain the Load of the Campaign Members with related items to the Primary Target Level for the Campaign Membership. For complex scenarios this helps to specify additional logic within the segment, in case the segment should not only include filtering logic for the Target Level, but also a wider logic for the Campaign participation. In this case another Target Level.

Use Case example for Selection Rules

For a Campaign, the target group consists of Individuals (Contacts) where the current Assets (e.g. a cell phone contract) should also be listed in the Campaign participation and Campaign export. However, the Assets of the individual should be constrained to only include contracts which have a end date within the next 3 Month (hence not all Contracts of the Target Level = Individual).

Since the Scenario contains Contacts as well as the Assets belonging to the Contact. The concept of Selection Rules must be used here. Without a selection Rule the Contacts which have a ending Asset are identifiable using the “normal” segmentation criteria, but the Asset Number of the respective ending Contract could not be associated with the Campaign Load (participation) of the Contact.
Thus, selection Rules are used in scenarios where another Target Level item should be associated as Secondary Target Level with the Target Level of the Segment.

Without a selection rule the following SQL is generated for the Campaign Load:

SQL statement without selection Rule.

The Selection Rule is added to the Segment to associate the Account (Company) to the Contact Target Level for the Campaign Load:
The Selection Rule also contains a constrained for the Secondary Target Level to only include Accounts within a certain Region.
This Example might be used as a Scenario within the Health-care Industry where a Doctor (Contact) might work for multiple Hospitals (Accounts) and only Hospitals within a certain Region should be Addressed for the Contact (Doctor).

After adding the Selection Rule the following SQL is generated for the Campaign Load:

SQL statement with Selection Rule.

Since a Selection Rule has been added to the Segment, the counts of the Segment Designer do not match anymore with the Campaign Load counts (as seen in previous article both are independent) as the selection Rule Expression is only evaluated for the Campaign Load but not within the Segment Designer:

The logic added with the Selection Rule for the Segment can be phrased as:

Only address Contacts (Target Level) having an Account within a certain Account Region (Selection Rule).

The Target Level concept and count presented within the Segment designer does not “protect” Members from disappearing from the load:

  • When the metadata logic of the Load List is different to the logic of the Segmentation Catalogue metadata (previous article)
  • When a Selection Rule is added to a Segment (Selection rule expression is only evaluated/executed on the Campaign Load)

When loading the Segment using the correct Load List Format (to load Accounts as well as Contacts) the Contact is loaded not with all possible Accounts but only the constrained and relevant Accounts to the Campaign Membership Table. The constraining of related items to the Target Level can only be achieved by using Selection Rules. Otherwise this logic would need to be added to the Export List requiring a different Export List for the Segment.

Selection Rule expression are only evaluated for Load List Formats (Campaign Load) but not the Segment Designer (Segmentation Catalogue).

To summarize

Selection Rule expression are only evaluated for Load List Formats (Campaign Load) but not the Segment Designer (Segmentation Catalogue) leading to a scenario where the count of the Segment Designer will not match the count of the loaded Segment to the Campaign Membership.


For a summary of the SQL generation for the Segment designer, Campaign Load and Campaign Launch, click here.

Target Levels: What do they steer and what not? Part 2/3

This is the second Post about the influence of Target Levels. The realm of the first post was limited to the Segment Designer. This post will focus on the Load of Segments to Siebel in conjunction with the Load List Format and compare this behaviour again with the Segment Designer.

Target Level and Segment Designer

As already described in the previous Post, the Segment designer allows counting the target level members according to the segmentation criteria of the segment, the count of each block and the the gross count is displayed, hence indicating the members which are part of the segment and will be loaded into the campaign as members once the campaign is loaded.

The SQL statement generated by the Oracle BI server can be inspected from the Marketing Job Log View:

selecting the “Get Count” Marketing Job:

The below SQL statement was generated by the Oracle BI Server for the Segment Designer to count the Target Level Members within the Business Analytics Warehouse:


Target Level and Campaign Load

When loading the Segment into the Siebel Campaign, the segment is “invoked” and the Members currently fulfilling the criteria are loaded to the Campaign Membership (S_CAMP_CON Table).

The Oracle BI server will write a text file to the Siebel Shared File system and Siebel will load the text file using a EAI Workflow to the Campaign Membership (S_CAMP_CON Table).


To provide the text file in the expected format by the Siebel EAI Workflow, the Oracle BI server provides the Load List Formats designer to provide the means of loading the individual members to the Campaign Membership Table so that they are participating within the Campaign.

The generated text file contains the individual members and has the following format (adhering to the Load List format definition):

The Load List Format itself is defined on a special Subject area and Business Model for each Target Level, such as Contacts / Accounts:

Every Segment is linked to a single Load List Format via the Advanced Options Tab of the Segment designer:

Once the Campaign is loaded Siebel sends a SOAP request to the Oracle BI server to execute the segment and generate the text file with the Campaign Members using the Write List Job (visible with the Marketing Job View):


The Marketing Job is executed by the Oracle BI server with the following statement to the Business Warehouse for the same sample Segment as before:

When comparing the SQL statements executed from the Segment designer with the SQL Statement for the Campaign load it can be seen that they are not the same. This is partially due to the different nature since within the Segment designer, the User is interested in the count, hence a SELECT COUNT(*)while the load requires the individual records, hence no aggregation.
Even though the statements are not the same, the logic (in terms of underlying Tables and Joins) for the Load List format (plus underlying RPD Metadata definition) is matching the logic of the Segmentation Catalogue. Thus, the generated text file and the segment count have the same count of Members (# of Records) for the Segment:

To summarize: The Target Level links the Segmentation catalogue with the Load and Export List Formats, but the generation of SQL statements is independent for the areas and only depends on the metadata definition on which they are based:

Since the generated statements for the Segmentation Designer (based on the Segmentation Catalogue) is independent of the generated statement for the Campaign Load (based on the Load List Format) it’s possible to create a Scenario in which both do not provide the same results (count for Segment and Load) even though both are linked to the same Target Level. This will be the focus of the next article.

For some scenarios this might be desirable since the Campaign Load Format is aware of the Campaign (it is loaded to) and the Treatment (Channel), thus it would be possible to perform certain additional checks e.g. does the Campaign Member have a valid Address for the Channel. However, this additional “segmentation” logic makes it very hard for a Marketing End User to compare the results of the Segment Designer with the actual Members loaded to the Campaign.

Launching the Campaign

When launching the Campaign the impact of the Target level is also very minor. As described before  The Export List format definition is also based on the BI data model and determines the actual SQL generated on the BI System (Data Warehouse). In order to only generate the respective Members of the Campaign the BI System references the Siebel Transactional Campaign Membership Table (S_CAMP_CON) by passing Parameters from Siebel to the Oracle BI System to identify the respective Campaign via the Campaign Id and Load Number. 

Export List Format, based on Transactional Campaign Membership Table:image

Sample Export Format based on above Subject area to Export the Campaign Members for the Execution of the Campaign e.g. using a external Marketing Agency:

Target Levels: What do they steer and what not? Part 1/3

For effective Marketing Campaign it’s important to define and find the best target group that should receive the Campaign messaging and/or Campaign Offer. Within Oracle Siebel CRM the target group is implemented with the concept of Target Levels.

This first article will focus on the basic’s of the Target Level concept and configuration within the Application (Oracle BI)

The concept and configuration of Target Levels

Target Levels (also referred to as QLI “Qualified List Item”) are used in the Marketing module of Oracle BI to identify and count the members of a segment that should be contacted within a marketing campaign. The complete Marketing Configuration and the Target levels concept in particular adds an additional layer of abstraction over the pre-built BI data model, allowing to re-use the complete data model of the Oracle Business Analytics Warehouse for the purpose of segmentation and campaigns.
The above diagram shows this with a few examples. The Conforming Dimension of e.g. “Customer” is being setup amongst multiple Facts (Orders, Campaigns, Service Requests) as Target Level. The criteria of the star (dimension & facts) are then available for Segmentation as Segmentation catalogue. When using the Segmentation catalogue within the Segmentation designer to define the Segmentation criteria, the Oracle BI Server translates the segment criteria into SQL for performing the counting of the Target level members which are meeting the segmentation criteria.

The Marketing Manager allows to define the Marketing specific configuration (“as additional layer”) by referencing the pre-built Presentation Layer data model for the specific Marketing metadata such as Target Levels, Load List Formats or Export List Formats:

While target levels can technically refer to any logical object of the RPD metadata layer, they should only be defined upon dimensions, since a typical target level such as “customers” might be used/referenced in almost all facts of the warehouse as conforming dimension. Thus, the target level members (e.g. Customers) can be identified and counted within the facts of the Analytical data model.
Technically, the target level is linked with a particular presentation column (field) of the dimension, usually the Primary Key of the Dimension:

Target Level within the Application

The following example shows the required User steps within the Application and the execution by the System (Orcle BI):

  1. choose Target Level Contact (Individuals)
  2. define segment criteria based on Job Title
  3. Translation into SQL for counting of Target Level Members


step 1 & 2 are done by the Marketing User within the Segment Designer

and step 3 handled via the Oracle BI Server by executing the SQL statement within the Oracle Business Analytics Warehouse:


Hence, the Target Level steers the object and column that should be used for counting the (Target Level) Members. The translation to generate the SQL statement within the Oracle Business Analytics Warehouse is done based on the Marketing metadata configuration and the BI metadata model. Below is a example of the “path”:

Target Level within Segment Designer, Load Lists and Export Lists

The Target Level is not only associated with the Segmentation catalogue for building the segment, but also with Load Lists Formats and Export Lists Formats. Where the Load List Format define how the Segment members should be loaded to the Campaign Management System (Siebel Marketing) and the Export Lists what kind of information should be exported to the Campaign Execution (Agency) to address the Segment Member.
For the purpose of Segmentation the Street Address and House number are not important (Segmentation Catalogue), for the load of the Customer as Campaign Member only the Customer Id is relevant (Load List Format), but for the execution the complete Address of the Customer is required, but not the Customer Id (Export List Format).

What is Income|Outcome?

Income|Outcome is a business simulation delivered as part of an in-class training series to teach the basics of business using a round based board game. The teams need to create certain products which are traded with the other teams at the end of each round. Having to high prices might lead to no sales whereas to low prices might secure sales but prohibit the ability to investment into efficiency measure. Teams might also offer deferred payments at a higher prices but these are then only due some rounds later.

class layout

The aim is to illustrate the coherence of business and the impact of business decisions. While there is no prescriptive winning strategy, it highlights the importance for understanding key (financial) indicators such as Cash flow, Receivables, Payables, Profit & Loss or Return on Assets.

VF 1 KPI Return on sale

Oracle also sees this importance’s for their Business Applications which hold all the transactional data and summarizes it as follows:

« Business Intelligence provides the methods to use the information that you have gathered in your E-Business/Siebel/Peoplesoft operational system to drive better business outcomes by executing your business processes more effectively. »

Most of the key (financial) indicators mentioned within the game are pre-calculated for the Oracle Applications with Oracle BI Applications, such as Financial Analytics.