Hyperion Planning Advanced development tips...
Top Six Advanced Planning Tips Jessica Cordova
Cameron Lackpour
[email protected]
[email protected]
http://www.arcepmconsulting.com/ Oracle Certified Developer
http://camerons-blog-for-essbasehackers.blogspot.com/
@CameronLackpour
Top Six Advanced Planning Tips
Who is Jessica? Jessica Cordova
Hyperion Essbase/Planning Oracle Certified Developer 17 years of hands-on experience
Hyperion Enterprise, Hyperion Essbase, Hyperion Planning, FDM
Web-Analysis, SmartView and Financial Reports
Core Values
Honesty/Integrity
Service excellence
Knowledge transfer
Who are you?
Experienced Planning ● Administrators ● Developers ● Consultants
What we will cover
Good practices galore ● ● ● ● ●
Focused aggregations Inherited security Fixing Planning’s filters Automating migrations Integrating Task Lists, Process Management, and Forms ● Designing your Planning app for success
Who is Cameron? Cameron Lackpour
Oracle EPM practitioner
ODTUG board member
20 years experience with Hyperion Products
Essbase, Planning, ODI, Financial Reports
Core Values
A practiced ability to take on way too many projects
Quality work
Knowledge sharing
What we will not cover
Why your particular Planning implementation hurts so much (or so good) Every nuance and feature of Planning ● We’d have to rename Kscope to the Jessica and Cameron Conference ●
Fun or an agony heretofore unknown? You decide.
Brand extensions (Capex, Workforce, Project Planning, PSPB, etc., etc., etc.)
What we will cover
Too much of a good thing Advanced tips = details + time More than 50 minutes worth of content So what to do? ● Delete? ● Gloss over?
Or let you choose Whatever is not covered will be in a webinar We pinky promise
What’s on the menu? A
B
C
Forms, Task Lists, Process Management
Forms, Task Lists, Process Management
Automated LCM migrations
Focused Aggregations
Bringing METAREAD to Planning
Planning for success
Automated LCM migrations
Automated LCM migrations
Inherited security model
Either A, or B, or C This is a true direct democracy, so your vote counts!
How I learnt to love Calculation Manager, or…
FOCUSED AGGREGATIONS
Love and hate, mostly hate
Once upon a time, I hated Business Rules ● Horrific interface ● Horrific code ● Horrific performance
Calc scripts > Business Rules
The good ● Tokenized (stole the idea from Tim Tow) calc script generator in Excel ● Write once, create many, manual copy ● My code was much faster
The bad ● Painful to manage ● Lots of calcs ● Lots of $$$ for me, so not so bad
But then everything changed with System 9
Point of View and Page dimensions addressable in Business Rules Business rules could be driven by the form Less data = fewer blocks = faster time Love is in the air Or is it?
The most expensive bit
Level 0 isn’t where most of the pain lies ● FIX ({varEntity}, etc.) is very useful ● ● ●
No more calc scripts No more code generator Way less pain
● But aggregating the data is still slow
Level 0 calcs are the base of budgeting Aggregated data for analysis and allocations
Even more intelligent calc
Need to calculate only the blocks that have changed ● Intelligent Calc does not work well with budgeting apps
We can’t tell what has changed But we can figure out what might change
What needs to be aggregated?
It’s right there in the POV
How do I selectively aggregate?
Use Calculation Manager variables ● FIX for level 0 ● @ANCESTORS of POV to aggregate
@ANCESTORS and @IANCESTORS are the key ● Walk the hierarchy to the dimension top ●
Do this for each dimension
● FIX on the calculated blocks ●
Do this for each dimension
● Looks ugly but is fast, fast, fast
Only effected intersections are aggregated Fewer blocks = faster speed
What does it look like?
Non aggregating dimensions Aggregate ancestors of Entity Within the inclusive ancestors of Entity, aggregate ancestors of Segments
Is it faster? Oh yes Type
Time
Compared to focused agg
CALC ALL
10.654 seconds
0.36%
AGG of Entity and Segments
0.61 seconds
6.2%
Focused aggregation
0.038 seconds
N/A
Dealing with shared members
@ANCESTORS will not handle shared member hierarchies ● In fact it will ignore shared members altogether
@ALLANCESTORS and @IALLANCESTORS are the solution
Mostly similar code
Non aggregating dimensions Aggregate all ancestor hierarchies of varAppEntity
Within all ancestors hierarchies of varAppEntity, aggregate all ancestor hierarchies of varAppSegments
It’s all in the blocks Type
Sparse calcs
Sparse calc cells
CALC ALL
• 23,357 writes • 111,640 reads
• 106,950,000
FIX and AGG
• 2,330 writes • 6,871 reads
• 9,309,100
Focused aggregation
First FIX • 8 writes • 68 reads Second FIX • 54 writes • 207 reads Total: • 62 writes • 275 reads
First FIX • 36,632 Second FIX • 247,270 Total: • 283,902
Blog posts to read
http://camerons-blog-for-essbasehackers.blogspot.com/2012/03/why-i-hate-andlove-calculation-manager.html http://camerons-blog-for-essbasehackers.blogspot.com/2012/03/why-i-hate-andlove-calculation-manager_18.html
Reuse and recycle with scripts
And tack aggregation onto every form
So always use focused aggregations?
Why wouldn’t you? ● Slightly painful to write ● Awfully fast to execute
Except of course where it doesn’t work ● Forms that stick sparse dimensions onto rows and columns ● Partial focused aggregations can lessen the pain
Otherwise, the answer is, “YES!” And yes, I love Calculation Manager
How not to have 52,292 individual security assignments (really)…
INHERITED SECURITY
Never, never, never, ever do individual assigns
Never Do you like pain? ● Physical ●
From excessive rework as people move in and out of Planning and you remove old users and assign the replacement users to each and every dimension.
● Mental ●
See above
There Is A Better Way
Understanding security in Planning
Access control ● The rules do not change, much, over time ● Individual planners change, a lot, over time
Provisioned roles ● See above
That Better Way is called “Groups”
The key ● Security and roles do not change ● Who gets that security and role does change
The better way ● No assignments to usernames ● All assignments to groups ●
Group hierarchy makes it better
Users come, users go ● Planning security is static ● Some Shared Services group membership changes
It’s that easy
Don’t be put off by the initial overhead
Shared Services groups ● Yes, you have to create lots of native groups ●
Can use LDAP/MSAD groups, but why?
● Subgroups get assigned to those groups ● Users are then assigned to subgroups
Planning’s access (dimensions, forms, business rules, etc.) gets assigned to groups Ta da, you’re done ● Forever (mostly)
Ongoing maintenance
Never go into Planning to change access Only go into Shared Services to ● Add or remove users from groups ● Add or remove groups
Refresh from Planning Script the whole thing if you are lazy/clever ● Good developers (and admins) are always lazy
Naming convention
Technology_AppName ● PLN_CalcTest
Technology_AppName_PlanType ● PLN_CalcTest_Consol
Technology_AppName_PlanType_Entity ● PLN_CalcTest_Consol_Americas ● PLN_CalcTest_Consol_APAC ● PLN_CalcTest_Consol_EMEA
Reduce maintenance through inheritance
PLN_CalcTest
PLN_CalcTest_Consol
PLN_CalcTest_Americas
PLN_CalcTest_APAC
PLN_CalcTest_EMEA
Provisioning by group Group
Role(s)
PLN_CalcTest
Essbase • Server Access CalcTest (Planning application) • Planner • Ad Hoc User Reporting and Analysis • Explorer • Viewer
PLN_CalcTest_Consol
N/A
PLN_CalcTest_Americas
N/A
PLN_CalcTest_APAC
N/A
PLN_CalcTest_EMEA
N/A
PLN_CalcTest_Consol Object
Member
Access
Function
Account
Statistics
Write
IDESC
IncomeStatement
Write
IDESC
BalanceSheet
Write
IDESC
CashFlow
Write
IDESC
Ratios
Write
IDESC
Plan
Write
Member
Forecast
Write
Member
Actual
Read
Member
Current
Write
Member
Working
Write
Member
Final
Read
Member
Target
Write
Member
Variance
Read
Member
Scenario
Version
PLN_CalcTest_Americas Object
Member
Access
Function
Entity
E01/North America
Write
IDESC
E02/Latin America
Write
IDESC
E05/Corporate HQ
Write
IDESC
PLN_CalcTest_EMEA Object
Member
Access
Function
Entity
E03/EMEA
Write
IDESC
PLN_CalcTest_APAC Object
Member
Access
Function
Entity
E04/APAC
Write
IDESC
Other objects Object
Name*
Group
Access
Forms
Financials Revenue Expenses Allocation
PLN_CalcTest_Consol OR PLN_CalcTest_Consol_Americas, *APAC, *EMEA
Read
Business Rules
AggAll AggPlan CalcRev ClrBS ClrFinal ClrTrgts
PLN_CalcTest_Consol OR PLN_CalcTest_Consol_Americas, *APAC, *EMEA
Launch
*Forms
within folders inherit access
Query the security for TestPlanner2 -Purpose: Security report by object, group, and user -Modified: 14 October 2011 -Notes: Remove comment at penultimate line to change object type -See HSP_OBJECT_YPE for all object types. -SELECT OT.TYPE_NAME AS 'Object Type', O.OBJECT_NAME AS 'Object Name', O3.OBJECT_NAME AS 'Group Name', O2.OBJECT_NAME AS 'User Name', (CASE AC.ACCESS_MODE WHEN 1 THEN 'Read' WHEN 3 THEN 'Write' WHEN -1 THEN 'Deny' END) AS 'Read/Write', (CASE AC.FLAGS WHEN 0 THEN 'Member' WHEN 5 THEN 'Children' WHEN 6 THEN 'IChildren' WHEN 8 THEN 'Descendants' WHEN 9 THEN 'IDescendants' END) AS 'Hierarchy function' FROM HSP_OBJECT O, HSP_ACCESS_CONTROL AC, HSP_OBJECT_TYPE OT, HSP_USERSINGROUP UG, HSP_USERS U, HSP_OBJECT O2, HSP_OBJECT O3, HSP_OBJECT_TYPE O4 WHERE O.OBJECT_ID = AC.OBJECT_ID AND O.OBJECT_TYPE = OT.OBJECT_TYPE AND O3.OBJECT_TYPE=O4.OBJECT_TYPE AND O3.OBJECT_ID = UG.GROUP_ID AND UG.USER_ID=U.USER_ID AND U.USER_ID=O2.OBJECT_ID AND AC.USER_ID = UG.GROUP_ID AND O2.OBJECT_NAME = 'TestPlanner2' ORDER BY 'Object Type', 'Group Name', 'Object Name'
Dimensions, folders, etc.
So why is this all worth while?
Hypothetical ● TestPlanner3 just got fired ● A planner named JessicaC just got hired
TestPlanner3 used to do EMEA forecasts How does an admin do the switch? 1. Remove TestPlanner3 from PLN_CalcTest_Consol_EMEA 2. Add JessicaC to PLN_CalcTest_Consol_EMA 3. Refresh filters from Planning 4. That’s it
Here it is in Planning ●
JessicaC can only see E03/EMEA
And in the Essbase filter fJessicaC Access
Member Specification
Read
"Target","Working","Variance","Final",@IDES("E03"),"Actu al","Forecast","Plan","Current",@IDES("CashFlow"),@ID ES("Statistics"),@IDES("BalanceSheet"),@IDES("Ratios" ),@IDES("IncomeStatement")
None
@IDES("Account"),@IDES("Scenario"),@IDES("Version") ,@IDES("Entity")
What are the filtered security lessons?
The client with over 50 thousand security assignments? ● Don’t Be That Guy
Use the power of inheritance to define security Use the power of group-assigned security to make security maintenance simple Make your design work for you, not the other way round
Why oh why oh why doesn’t Planning have…
METAREAD FILTERS
Here it is in Planning ●
JessicaC can only see E03/EMEA
And in the Essbase filter fJessicaC Access
Member Specification
Read
"Target","Working","Variance","Final",@IDES("E03"),"Actu al","Forecast","Plan","Current",@IDES("CashFlow"),@ID ES("Statistics"),@IDES("BalanceSheet"),@IDES("Ratios" ),@IDES("IncomeStatement")
None
@IDES("Account"),@IDES("Scenario"),@IDES("Version") ,@IDES("Entity")
But what’s wrong with that filter?
In Planning, Entities by write access only But in Essbase, all Entities are visible, although only EMEA can be read. It’s a READ filter
Check out Essbase’s Member Selection ●
Even though JessicaC only has read/write access to EMEA, Essbase shows all Entity members
How oh how oh how does this get fixed?
Add a MetaRead filter in EAS Not a long term fix, but does it work?
Access
Member Specification
Read
"Target","Working","Variance","Final",@IDES("E03"),"Actu al","Forecast","Plan","Current",@IDES("CashFlow"),@ID ES("Statistics"),@IDES("BalanceSheet"),@IDES("Ratios" ),@IDES("IncomeStatement")
None
@IDES("Account"),@IDES("Scenario"),@IDES("Version") ,@IDES("Entity")
MetaRead
"Target","Working","Variance","Final",@IDES("E03"),"Actu al","Forecast","Plan","Current",@IDES("CashFlow"),@ID ES("Statistics"),@IDES("BalanceSheet"),@IDES("Ratios" ),@IDES("IncomeStatement")
Pretty, isn’t it?
Planning security refresh deletes MetaRead Access
Member Specification
Read
"Target","Working","Variance","Final",@IDES("E03"),"Actu al","Forecast","Plan","Current",@IDES("CashFlow"),@ID ES("Statistics"),@IDES("BalanceSheet"),@IDES("Ratios" ),@IDES("IncomeStatement")
None
@IDES("Account"),@IDES("Scenario"),@IDES("Version") ,@IDES("Entity")
Fix it with a little script
What does the script need to do? ● Refresh Planning ● ●
Application Filters
● Apply MetaRead filter to Planners
How do we do this?
Automate refresh but tack on MetaRead ● CubeRefresh.cmd ● Dynamically generated MaxL to apply Read to MetaRead
Error trap ● ‘Cause you should, always
Local copies of CubeRefresh.cmd and StartMaxL.cmd ● Both need to EXIT ● A much more civilized location for both scripts
What are the steps? 1. 2. 3.
4. 5.
Force Planning refresh with CubeRefresh.cmd Extract Read filters to a text file Import text filters into array Convert to MetaRead through MaxL Apply filters
Parameterized Refresh_Planning.cmd Parameter
Value
Planning encrypted password file
C:\Oracle\Middleware\user_projects\ epmsystem1\Planning\planning1\passw ord.txt*
Planning application
calctest
Planning admin username
hypadmin
Refresh or create
/R
Filter switches
/FS
Essbase server
%computername%
First half of private key
735853931
Second half of private key
1645952239
*File
can be anywhere
Command line C:\Refresh_Planning password.txt calctest hypadmin /R /FS %COMPUTERNAME % 735853931,1645952239
Tiny Oracle EPM code change #1 ModCubeRefresh.cmd @echo off SET EPM_PLANNING_INSTANCE=C:\Oracle\Middleware\user_projec ts\epmsystem1/Planning/planning1 call "%EPM_PLANNING_INSTANCE%\setHPenv.bat" "%JAVA_HOME%\bin\java" %HP_JAVA_OPTIONS% %JAVA_OPTIONS% com.hyperion.planning.HspCubeRefreshCmd %1 %2 %3 %4 %5 %6 %7 /COMMAND:CubeRefresh.cmd REM Added this line to get CubeRefresh to EXIT on finish EXIT
Tiny Oracle EPM code change #2 startMaxl.cmd @ECHO OFF @REM This file is created to startMaxl rem Set ESSBASEPATH set ESSBASEPATH=C:\Oracle\Middleware\EPMSystem11R1\common\Ess baseRTC-64\11.1.2.0 set ARBORPATH=%ESSBASEPATH% set PATH=C:\Oracle\Middleware\EPMSystem11R1\bin;%ESSBASEPATH% ;%PATH% %ESSBASEPATH%\bin\essmsh.exe %* REM Added this line to get MaxL to EXIT on finish EXIT
Refresh_Planning.cmd is the framework
Logs and error handles Calls and manages ● ModCubeRefresh.cmd ● startMaxl.cmd ● Create_MetaRead_Filters.wsf
Kick off the refresh in a new window REM start /wait /min modcuberefresh.cmd f:c:\tempdir\MetaReadRefresh\password.txt /A:calctest /U:hypadmin /R /FS /DEBUG >>%log%
START /WAIT /MIN ModCubeRefresh.cmd -f:%1 /A:%2 /U:%3 %4 %5 /DEBUG >>%log%
Write the filters to disk REM Write filters to disc START /WAIT /MIN startmaxl.cmd -D write_filters_to_disc.mshs %7,%8 REM If error, go to end, else write IF ERRORLEVEL == 1 (SET errormsg=Error! - Read of filters from Essbase failed & GOTO ERROR)
write_filters_to_disc.mshs /* Create log file that will contain the filter contents spool on to 'Write_Filters_To_Disc.log';
*/
/* Log on to the server using the: userid, password, and servername login $key 4759364321386283573059330813218914075800 $key 8517954660334668312042358713305933081321 on $computername;
*/
/* Set the column width to 1000 characters to allow the filter plenty of room. */ set column_width 1000 ; /* Show those filters display filter row all ; /* End the spooling. */ spool off ;
/* exit ;
End of code.
*/
*/
Dynamically create MaxL script REM CSCRIPT Create_MetaRead_Filters.wsf /Application:%2 /FilterFile:Write_Filters_To_Disc.log /OutputFile:/MetaRead_Add_Filters.msh CSCRIPT Create_MetaRead_Filters.wsf /Application:%2 /FilterFile:Write_Filters_To_Disc.log /OutputFile:Metaread_Add_Filters.msh REM If the output file doesn't exist, an error has occurred IF NOT EXIST MetaRead_Add_Filters.msh (SET errormsg=Error! Creation of MaxL include file failed %2 & GOTO ERROR)
Metaread_Add_Filters.msh ALTER FILTER 'CalcTest'.'Consol'.'fTestPlanner2' ADD META_READ ON '"Variance","Target","Working","Final",@IDES("E04"),"Actual","For ecast","Plan","Current",@IDES("BalanceSheet"),@IDES("IncomeStatem ent"),@IDES("Ratios"),@IDES("CashFlow"),@IDES("Statistics")' ; ALTER FILTER 'CalcTest'.'Consol'.'fTestPlanner3' ADD META_READ ON '"Final","Working","Variance","Target",@IDES("E03"),"Actual","Pla n","Forecast","Current",@IDES("CashFlow"),@IDES("Statistics"),@ID ES("Ratios"),@IDES("BalanceSheet"),@IDES("IncomeStatement")' ; ALTER FILTER 'CalcTest'.'Consol'.'fTestPlanner1' ADD META_READ ON '"Final","Target","Variance","Working",@IDES("E02"),@IDES("E01"), "Forecast","Actual","Current","Plan",@IDES("BalanceSheet"),@IDES( "Ratios"),@IDES("Statistics"),@IDES("IncomeStatement"),@IDES("Cas hFlow")' ; ALTER FILTER 'CalcTest'.'Consol'.'fJessicaC' ADD META_READ ON '"Variance","Target","Working","Final",@IDES("E03"),"Forecast", "Plan","Current","Actual",@IDES("CashFlow"),@IDES("Statistics") ,@IDES("Ratios"),@IDES("BalanceSheet"),@IDES("IncomeStatement") ' ;
Run the nested (msh) code REM Execute add metaread MaxL script START /WAIT /MIN startmaxl.cmd -D call_metaread_add_filters.mshs %7,%8 REM MaxL creates a file whether there is an error or not. When there is no error, the file has a length of zero bytes. REM Use the below FOR loop to get the length of the MaxL STDERR output for %%a in (call_metaread_add_filters.err) do ( set length=%%~za )
REM If the log file doesn't have a length of zero bytes, an error has occurred IF NOT %length%==0 (SET errormsg=Error! - Execution of MaxL include file for METAREAD ADD failed & GOTO ERROR)
Full logging
Let’s go prove that this works
Insert movie here
Essbase is now METAREAD
This is what Planning should have had all along Same metadata behavior in Essbase and Planning data sources The bad news is it’s still not there The good news is it’s easy to fix The code is available here: ● https://cameronl.opendrive.com/files?71326909_ozcGn
What have we learnt?
There is Planning, and then there is Planning ● Business rules can be fast by rolling up only needed hierarchies ● Planning security should never be directly assigned ●
Yeah, I’m looking at you. Don’t you feel a little bit guilty?
● Sooner or later, Oracle will apply METAREADs to Essbase filters ●
In the meantime, it’s easy to script around
Automating Migrations
GOOD BYE MANUAL MIGRATIONS!!
LCM (Life Cycle Management) ● An effortless migration feature accessible via Shared Services designed for your enjoyment. With LCM you can migrate: ●
Applications in the same environment
●
Migrate across environments
●
Repositories, individual artifacts or dimensions
● Enable auditing for tracking import/export by date and by artifacts ● AUTOMATE migrations from definition files across environments using the LCM Utility .
GOOD BYE MANUAL MIGRATIONS!!
LCM Utility Highlights
Limitations
● Schedule automatic Back-ups
● LCM is not a replacement for RDBMS Backups for EPM Repositories
● Synchronizing environments (QA, DEV,DR) ● Restoring artifacts requires less or no involvement of the organization’s infrastructure team ● LCM administrator role
● Data Migration is not supported ● Application release must be the same ● Captures new users and new application provisioning. It is additive by nature.
GOOD BYE MANUAL MIGRATIONS!!
What applications can be migrated? ● Shared Services
● Planning
● EPMA
● Financial Management
● Reporting And Analysis
● Performance Scorecard
● Essbase
● Profitability and Cost Management
GOOD BYE MANUAL MIGRATIONS!!
Automate Planning application across environment ● Planning the migration process ●
Full Back-up of target application
●
Do not use the following Windows OS reserved names for files or folders: ●
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9
● The following applications are necessary for migrating Hyperion Planning: • Shared Services • Planning
• EPMA • Reporting and Analysis
GOOD BYE MANUAL MIGRATIONS!!
Automate Planning application across environments ● Considerations ● Application versions must be the same ●
The following properties Must match: ●
Start year
●
Base time period
●
Currency settings
● Migration load sequence Matters: ●
Shared Services
●
EPMA
●
Planning
●
Reporting And Analysis
GOOD BYE MANUAL MIGRATIONS!!
Shared Services Migration Limitation ● LCM will add new users/groups and application provisioning ● LCM does not remove user provisioning, groups or change group ● What do we do in this instance?? ●
Delete existing users and groups from the target environment
● To synch shared services successfully you will need to: ●
Export Users/Groups from the source environment
●
Export Users/Groups from the target environment
●
Delete Users/Groups from the target environment
●
Import Users/Groups from the source environment
●
Update Administrative passwords in target environment
GOOD BYE MANUAL MIGRATIONS!!
Create Migration Definition files in Shared Services as follows: ●
Expand Foundation Application -> Select Shared Services
●
Select the following:
GOOD BYE MANUAL MIGRATIONS!! ● Migration Status Report is displayed
GOOD BYE MANUAL MIGRATIONS!! ● By default, the application artifacts and migration definition files are generated and saved under:
\\Oracle\Middleware\user_projects\epmsystem1\import_export\
● The migration definition files are saved in the root of the migration application folder
GOOD BYE MANUAL MIGRATIONS!!
Edit Migration properties ● Enter user password and user name (password is encrypted upon execution) ● Insert the import operation “delete” ● Save migration definition file
GOOD BYE MANUAL MIGRATIONS!!
Automating Shared Services Migration in a batch script
GOOD BYE MANUAL MIGRATIONS!!
Automating Planning Migration in a batch script ● Export Migration artifacts and definition file from source environment ● Copy file system artifacts and migration source definition files to target environment ● Import application
GOOD BYE MANUAL MIGRATIONS!!
Migration status report logs ● \\Oracle\Middleware\user_projects\epmsystem1\diagnostics\logs\migration\re ports)
What have we learnt?
Migrations are no longer a bear ● Create migration definition files within shared services ● Application version must be the same in the target environment ● LCM does not remove user provisioning, groups or change group ●
Delete existing users and groups from the target environment
● Integrate windows batch and LCM utility
Integrating Process Management, Forms and Task List
Integrating Process Management, Forms and Task List
Process Management • Workflow
Data Forms • Control Promotion
Task List • Planning Guide
Process Management
Planning Workflow Process ● Process Management ●
Ownership and accountability
●
Define approval path
●
Pre-defined promotional path ●
● ● ●
● Pre-defined primary and secondary dimension’s promotional path example:
EASTVP
Promote->Approve/Reject->Sing-off
Assign ownership to secondary dimensions Support different approval structures by scenario Promotional status e-mail notification
NYOPSMGR NYUSER2
NYDEPTMGR
NYUSER1
NYSLSMGR
Process Management (Cont’d)
Where do I Start? ● Define Planning Unit Hierarchy Approvals ●
A Planning unit is comprised of: ●
Entities
●
Secondary dimension
●
Assign owners
●
Assign reviewers
Process Management (Cont’d)
Define Planning Unit Hierarchy as follows: ● Select Administration>Approvals>Planning Unit Hierarchy
Process Management (Cont’d)
Define Entity Approval Dimension ● In the example below, a Custom Approval Hierarchy is enabled for descendants of USA Sales
Process Management (Cont’d)
Define Primary and Sub-hierarchy ● The primary dimension is Segments and sub-hierarchy is Relative Generation 3 of Seg01
Process Management (Cont’d)
Define/Assign Owners
Process Management (Cont’d)
Version control and efficiency ● Can this be maintained externally and imported? ●
YES
●
Planning Web and Outline Load Utility
● The required field parameters are as follows:
Process Management (Cont’d)
Planning Unit Hierarchy Scenario and Version assignment ● Select Administration>Approvals>Planning Unit >Scenario and Version Assignment
Data Form Validation Rules
Data Form Validation Rules ● Enforce business policies ●
Validation rules can prevent planners from promoting plans not aligned with the organization's guidelines i.e. Travel Expenses. ●
Validation rules can be added to a row, cell, column or grid
●
Change cell color and include violation message when conditions are not met
●
Build validation threshold limits
●
Change promotional path to designate a reviewer/owner for approval
Data Form Validation Rules (Cont’d)
Assign Data Form Validation Rule ● Right click in Row area and select Add/Edit Validation Rules
Data Form Validation Rules (Cont’d)
Define Data Validation Rule Properties ● If the Account Member is Descendants of Travel and the Current Cell Value is greater than 5k
● Then highlight the cell Red and Do Not Promote
Task List
Task List ● Guide users through the planning process • Data Forms • URL’s
• Instructions • Documents
● Notification features include: ●
Due dates ● Alerts ●
Tasks approaching due dates
●
Overdue tasks
● Status Reports
Task List (Cont’d)
Task List – aka “To Do List”
Task List (Cont’d)
Promotion Failed due to Invalid data
Select Failure Message
Task List (Cont’d)
Task List (Cont’d)
Correct Value and Save
Promote New Owner
What have we learnt?
No more excuses ● Accountability ● ●
Pre-defined promotional path on primary and secondary dimensions Implement validation rules to prevent promoting plans not aligned with organization’s guidelines
● Control ●
How and When? ●
The task list is your friend (easy as 123) ● Enable due dates and alerts
Designing Your Planning Application for Success
Designing Your Planning Applications for Success
Internal Preparation
Efficient Application Design
Success
Internal Preparation
Internal planning is the Key to Success ● Clear defined project objective ● Identify resources
●
Stakeholders
●
Business Process Owners
●
IT Infrastructure Resources
●
System administrators
Be informed ● Know your data ●
Data sources required to facilitate input
● Training ● Identify calculations that need to be processed before/after input ● Frequency
Internal Preparation (Cont’d)
Data Validation ● Lack of resources may delay the project
Approved Application Design ● Include thorough Quality Assurance and Test Plans ●
●
Pilot testing ●
Get commitment from participants in advance
●
Develop detail test plans
●
Collect feedback
●
Conduct a second pilot test
Performance testing
Internal Preparation (Cont’d)
Project Management ● Internal Business Project Manager ● External Hyperion planning technical Project Manager
Application Design
Why not have it all in one Planning application? ● Planning is not a reporting tool ● Each tool is uniquely designed to serve its purpose
● The objective is to design your planning applications for success ● The planning application should be used for planning and budgeting related tasks only
Application Design (Cont’d)
Please read the warning label Warning!!
Failure to adhere to the following design considerations may result in adverse physical/mental side effects
● Separate apps may be necessary for separate business areas
● Exclude irrelevant dimensions ● Incorporate true driver-based planning early in the development effort ● Standardized “intelligent” member labels
● Provision security groups for efficiency ●
Do not provision individual users
Application Design (Cont’d)
Dimension Design ● For optimal performance consider the following: ●
Outline consolidation
●
Minimize the number of stored dimensions
●
Assign Label Only to organize account groups i.e. Stat accounts
● If possible, avoid: ●
Sparse member formulas
●
Large flat sparse dimensions
Application Design (Cont’d)
Less is more!! ● Analyze the planning level details i.e. ●
Is there value in planning at the transaction level? ●
Look for opportunities to purge accounts or merge dimensions
●
Leverage Supporting Detail as an option to itemize
●
Leverage Smart List and Attributes
●
Fewer dimensions will result in optimal performance
Application Design (Cont’d) ● Modified Hour Glass ●
Calculation performance may be improved by changing the order of standard dimensions to a modified hourglass design. Accounts Time Smallest Dense Smallest Sparse Agg Largest Sparse Dimension Agg Non-Agg Sparse Dimensions Attribute Dimensions
Entity (Dense) Time (Dense) Smallest Sparse Agg Largest Sparse Dimension
Application Design (Cont’d)
Optimize Calculation Rules ● Leverage outline consolidation where possible ● Do not calculate more than what is required ● Evaluate the consolidation capabilities granted to each user-group ● Focused Aggregations ●
@ANCESTORS and @IANCESTORS
Application Design (Cont’d)
Optimize Calculation Rules ● Only calculate necessary dimensions i.e. ●
CALCDIM - Calculates the outline formulas and consolidations associated with each member ●
FIX (Margin) CALC DIM (Customer, Product); ENDFIX
●
AGG – Calculates ●
Sparse Dimensions
●
Ignores all member formulas
●
Consolidates only parent child relationships
Application Design (Cont’d)
Optimize Calculation Rules ● Eliminate unnecessary passes through the database by using FIX and IF statements on focused calculations. ●
General Rule: ●
Use FIX statement for members of sparse dimensions
●
Use IF statements for members of dense dimensions
● Add DATACOPY command to create data blocks necessary to improve processing time ● Include conditional logic to address potential zero values
Application Design (Cont’d)
Web-Form Design ● Keep data forms small ● Row and Column containing dense dimensions only result in one data block
● Page and Point of View - contain sparse dimensions only ● Enable Suppress Missing Blocks when sparse dimensions are in rows ● Utilize Task Lists to guide users through the planning process
Application Design (Cont’d)
Web-Form Design ● Business Rule form options: ●
“Run on Save” and enter run-time prompts”
●
“Run on Load” executes business rule or calculation upon opening the form
●
“Run on Save” and select ”Use Member on Data Forms”
● Limit the use of “Run on Load” as it may result in poor response time ● Response time should not exceed 3 second
● Leverage Global Variables/Run Time Prompts ● Consider scheduling a calculation process to calculate all the dimensions
Application Design (Cont’d)
Fragmentation ● Data fragmentation will result in poor response time. Data fragmentation occurs when: ●
Users constantly Read/Write to database
●
Executing Calculation Rules
●
Incremental data loads and poorly designed data load rules
●
Large number of Dynamic Calc and Store members
●
Databases that use an isolation level of uncommitted access with commit block set to zero
●
Large Sparse dimensions
Application Design (Cont’d)
Fragmentation ● To confirm fragmentation, check the Average clustering ratio: ●
Higher value means lower fragmentation
●
Lower value means higher fragmentation
Application Design (Cont’d)
Reducing and Removing Fragmentation: ● Reducing ●
Optimize data loads
●
Optimize calculation scripts
● Removing ●
Export and Reload (Efficient)
●
Full Database Restructure (Time Consuming)
Application Design (Cont’d)
Optimize Data loads ● Rows Sort Field Order - from left to right in file: ●
Sparse dims first, from top to bottom of outline order.
●
Dense dims second, from top to bottom of outline order
●
OR Export data in column format to view optimal order for loading
● Use a dense dim in data columns i.e. period ● Remove excess white space ● Replace zero values string with “#MI”
Application Design (Cont’d)
Yearly Maintenance ● Lean Metadata ●
Review metadata for usage
●
Keep the metadata lean for efficiency
● Lean Data ●
Create a Historical application
●
Clear unnecessary/historical data
What have we learnt?
Success ● Internal preparation and teamwork ● ●
● ●
Define project scope Identify resources Communication Training
● Design ●
Less is More ● ● ●
● ●
Do not include irrelevant dimensions Do not include unnecessary members in forms Do not calculate more than required
Establish intelligent member labels in advance User and provisioning security groups for efficiency
Q&A
Thank You
Jessica Cordova Oracle Certified EPM Developer http://www.arcepmconsulting.com/
[email protected] Cameron Lackpour
[email protected]
http://camerons-blog-for-essbasehackers.blogspot.com/