You are on page 1of 23

5 Things You Cant Do in Hyperion Planning

(and how to do them . . . )


How to Color Outside-the-Lines with Hyperion Planning

Jake Turrell
Hyperion Architect

Focused on Enterprise Performance Management (EPM), Business


Intelligence (BI), Data Warehousing, and Analytical applications.
Texas-based for over 11 years.
50+ Professionals
Oracle Platinum Partner
Oracle Database / Data Warehousing / BI / EPM / Hyperion
Oracles highest certification level

Corporate culture based on 100% commitment to customer success.


Led by veteran management team.

Seasoned, professional, former Oracle / Siebel / Hyperion consultants with


market leading OBIEE, BI Applications, Hyperion Applications, and Essbase
(BSO & ASO) knowledge and experience.
Internal Infrastructure Practice:
Hundreds of installations / migrations.

All Hyperion veterans with over 10 years of experience.

Strong project leadership & proactive account management


Full service solution provider with extensive post-implementation support
capabilities and offerings
2

Agenda

Creating Your Own Workflow States and Actions

Launching a Report from a Web Input Form

Creating a Button on a Web Input Form


Launching a Report Using Custom JavaScript
Passing Members from the Form to the Report

Launching a Web Input Form from a Report

Hyperion Workflow Out-of-the-Box


Creating Custom States
Creating Custom Actions
Understanding the Tables behind Workflow

Using Related Lines


Handling the Incoming Form Request using Custom JavaScript

Drilling to Relational Details from a Web Input Form


(without using EIS, Essbase Studio, FDM, MaxL, APIs, etc.)
Setting up a Custom Web Page that Queries a Relational Database
Calling that Web Page from a Web Input Form or Report
Passing the Appropriate Context to the Query

Referencing DTS Members in a Formula

What is Dynamic Time Series?


Why Cant I Directly Use These Members in Formula?
How Can I Indirectly Use Them in a Formula?
3

Agenda
Who should attend this session?
This session is a collection of tips and tricks on advanced Hyperion Planning development techniques.
Any developer wishing to extend Hyperion Planning beyond its out-of-the-box capabilities should
attend.

What am I getting myself into?


Some of the techniques described in this session involve making changes directly to the Hyperion
Planning repositories and JavaScript files. Remember that changes made directly to the repositories
generally require the Hyperion Planning service to be restarted prior to usage. Changes made to
JavaScript files usually require the browser to be refreshed.
Always backup your repositories and files before making changes.

Workflow Out of the Box


Version Differences
Hyperion Plannings process management has been enhanced significantly in version
11.1.2. There are now three templates for workflow. Each template enables a slightly
different process:
BottomUp
Distribute
FreeForm

(aka Rule List #1)


(aka Rule List #2)
(aka Rule List #3)

Rule list numbers are referenced in tables we will modify when


creating custom states and actions. Rule lists are defined in the
HSP_RULE_LIST table (in version 11.1.2 only).

The FreeForm template is the same process used by prior versions of Hyperion
Planning, where there are no pre-defined promotion paths. We will use this template in
subsequent examples so that they are applicable to both 11.1.2 installations and prior
versions.
All tables illustrated in this presentation are from version 11.1.2.

Workflow Out of the Box


The Planning Unit
Workflow in Hyperion Planning centers around the Planning Unit. Planning Units are
made up of:
Scenario
Version
Entity (This can be expanded in version 11.1.2.)

Each Planning Unit has a State. (For example, 1st Pass)

States are modified when a user takes an Action. (For example, Promote)

Old
State

Action

New
State
6

States
States Out of the Box (version 11.1.2)
The following workflow states are supported by Hyperion Planning out-of-the-box:

Table: HSP_PM_STATES
Database: This table is in the Hyperion Planning application repository, not the Planning
system repository.

Actions
Actions Out of the Box (version 11.1.2)
The following workflow actions are supported by Hyperion Planning out-of-the-box:

Table: HSP_PM_ACTIONS
Database: This table is in the Hyperion Planning application repository, not the Planning
system repository.
8

Rules
Rules Link States and Actions
The following table illustrates how states and actions are linked by rules. These rules
define the actions that can get a planning unit into a particular state, and the actions that
can take a planning unit out of a particular state:

Table: HSP_PM_RULES
Database: This table is in the Hyperion Planning application repository, not the Planning
9
system repository.

Creating a New State & Action


Step 1: Create a new 2nd Pass State
Add a new state to the HSP_PM_STATES table using the query below:
INSERT INTO HSP_PM_STATES (STATE_ID, NAME, MODIFIABLE, AFFECTED, PRECEDENCE, COLOR, EDITABLE_BY, VIEWABLE_BY)
VALUES (9, 'LABEL_PM_STATE_2ND_PASS', 0, 1, 6, 'NULL', 2, 2);

Step 2: Create a new Send to 2nd Pass Action


Add a new action to the HSP_PM_ACTIONS table using the query below:
INSERT INTO HSP_PM_ACTIONS (ACTION_ID, NAME, MODIFIABLE, PROPAGATE_TO, POSITION)
VALUES (20, 'LABEL_PM_ACTION_SEND_TO_2ND_PASS', 0, 3, 20);

Step 3: Link the new State and Action


Add new relationships between the state and action to the HSP_PM_RULES table using
the queries below:
Going from 1st Pass to 2nd Pass . . .
INSERT INTO HSP_PM_RULES (FROM_STATE_ID, CHANGABLE_BY, ACTION_ID, TO_STATE_ID, NEW_OWNER, PM_RULE_LIST_ID,
EFFECT_ID, APPLY_AT)
VALUES (1, 2, 20, 9, 3, 3, 2, -9);
Going from 2nd Pass to Approved
INSERT INTO HSP_PM_RULES (FROM_STATE_ID, CHANGABLE_BY, ACTION_ID, TO_STATE_ID, NEW_OWNER, PM_RULE_LIST_ID,
EFFECT_ID, APPLY_AT)
VALUES (9, 1, 5, 3, 3, 3, 2, -9);
10

Test Custom Workflow


Promote a Planning Unit to 2nd Pass
To test the new State and Action, the Hyperion Planning application must be restarted.

11

Launching Reports from Forms


( . . . and passing POV member context)
This example will illustrate how to launch a report from a web input
form. To make the report dynamic, we will pass the members from
the web input form to the report.

Point of View Members

The user selects a cell and presses the


Show Report button.
Dimension members are passed from
the form to the reports POV.

The reports POVs are not pre-defined.


The report opens automatically with the
correct POVs.

12

Launching Reports from Forms


( . . . and passing member context)
There are several steps to linking a form to a report, if member context
is to be passed:
1. Build the report in FR. Make sure that the members being passed are defined in the POV of the report.
2. Create the button on the report.

3. In the customCellEnterPost() section of the ValidateData.js file, create global variables to hold the selected
cell row and column numbers. These are necessary because once the button is pressed on the form,
there is no way to determine the last selected row and column on the grid (because the focus immediately
shifts to the button and off of the cell). This step was not required in version 11.1.1.3, but is required in
11.1.2. It appears that there are some subtle changes in how 11.1.1.3 and 11.1.2 handle grid/cell focus.
4. Write a function to determine which members are associated with the selected cell. Using the pre-built
function getMembersOfCell() (from the ValidateDataHelper.js file) wont work here, because in addition to
getting a list of members, we need to know which member goes with which dimension. There is no prebuilt function that answers this question.
5. Develop the function that creates the URL that launches the FR report (and passes the member context).
This is the function that is tied to the forms button.

13

Launching Reports from Forms


( . . . and passing member context)
Build the Report in FR.

14

Launching Reports from Forms


( . . . and passing member context)
Create the button on the report.

Create global variables for the selected cell row and column.

Note that there is no var in this variable declaration.


That is what makes these global variables in JavaScript.

15

Launching Reports from Forms


( . . . and passing member context)
Determine which members belong to which dimensions in the selected
cell.

Note that you will need to verify the object_ID from the
HSP_Object table for each dimension being passed to
the report. These appear to be consistent for standard
dimensions, but I wouldnt guarantee it.

16

Launching Reports from Forms


( . . . and passing member context)
Write the function that launches the report.

17

Launching Forms from Reports


( . . . and passing page member context)
This example will illustrate how to launch a web input form from a
report using related lines.

Note that the account in the report is


underlined. This indicates that it has
related content, which in this case is a
URL to the web input form.
The web input form intercepts the URL
in the customOnLoad() function in the
ValidateData.js file and replaces FR
attributes with web input form page
member details.

18

Drilling to Relational Details


This example will illustrate how a web input form can query a
relational database for details behind a balance.
Disclaimer
This example uses JavaScript to query SQL Server. JavaScript runs on the client, not on
the server. It is not a best practice to query a database directly from software running on
the client. A better practice would involve using Java and AJAX to query the database
and pass the results to a web page.
Step 1: Create a web input form that displays balances.
Step 2: Add a button on the web input form using the ValidateData.js file.
Step 3: Write a JavaScript function that queries the relational database.
Step 4: Link the button to the function in Step 3.
Step 5: Test!
19

Drilling to Relational Details

20

Dynamic Time Series


This example will illustrate how to reference Dynamic Time Series
(DTS) members in a member formula.
DTS members allow users to calculate YTD, QTD, etc on-the-fly, without storing the
values in the Essbase database.
DTS are virtual members. As such, they cannot be explicitly referred to in a member
formula.
Unfortunately, there are times when a developer might need special processing for
DTS members (for example, using custom time-based averages).
While it is not possible to directly reference these members in a formula, it is possible
to reference them by omission.

21

Dynamic Time Series


Given the formula below, we see that we can indirectly refer to a
DTS member in a formula.

Formula

Results

22

Q&A

23