3. 3
About Brian Marshall
VP of Delivery
20+ years IT and EPM/BI Experience
15+ years with US-Analytics
150+ projects with US-Analytics
Presented at Kscope every year since 2010
Frequent blogger at EPMMarshall.com
4. 4
About US-Analytics
Dallas-based, Hyperion-focused for over 18 years with continuous business growth
We are nimble and respond quickly to customers’ needs
Over 500 clients and over 1,000 successful Hyperion engagements
Seasoned business and technical acumen with EPM and BI initiatives
Over 65 professionals with 12+ years each of Hyperion experience and certifications
Active leaders in the Oracle community
Founder of Hyperion Professional Women's Forum, advisory board leadership, conference
presentations, webinars, EPM Speaker of the Year at Kaleidoscope in 2015 and 2014
Corporate culture of integrity with 100% customer commitment
Managed services
Managed services team is Dallas based, each with 10+ years of experience
Proven processes for all aspects of managed services
5. ABOUT
US-ANALYTICS
Managed Services
Upgrades & Migrations
Implementations
Infrastructure
Process & Advisory
Services
Big Data
Data Governance
Business Intelligence
Financial Close & Consolidation
Planning & Forecasting
Solutions
Data Integration
Training
Accolades
– Original Oracle Hyperion and Pillar Partner
– Oracle Hyperion Financial Management 11
– Oracle Hyperion Planning 11
– Oracle Essbase 11
– Oracle Data Relationship Management 11
2013, 2014, 2015
2015 Oracle TOLA
EPM Partner of the Year
6. 6
On-Premise vs. PBCS
PBCS is Hyperion Planning + 4 years of constant development
Very few features exist in on-premise that aren’t already available in PBCS
The interface between the two applications has been the biggest deviation in the
technologies
With that new interface have come a megaton of new features that may never make
it to the on-premise code-base
On-Premise features that PBCS doesn’t include (yet):
▶Hybrid Essbase (not yet officially supports, but works great)
▶Essbase Ad-hoc functionality
▶Access to the Planning Repository
PBCS features that PBCS doesn’t include (and may never):
▶This list includes somewhere around 100 features of significance
▶This list grows with every release of PBCS
▶On-Premise will get a patch eventually…but we still don’t know which features will make it
in
7. 7
What Can We Get?
Smart Push
Dimension-based Smart Lists
Year deletion
ASO Essbase Ad-Hoc Functionality (take that PBCS!)
8. 8
What Can’t We Get?
I’d need 10 slides to capture the answer to this question…but here are some of
the highlights:
▶Form Exclusions, Ranges, and Formatting
▶Smart Forms
▶Periods based on Plan Types
▶Valid Intersections (this one is huge)
▶Attribute Dimensions in Forms and Smart View (also huge)
▶Navigation Flows
▶Localization
▶Groovy
▶To see more details, I have a blog post on this very topic:
‒ https://www.epmmarshall.com/pbcs-vs-premise-hyperion-planning-new-features/
9. 9
Smart Push
So how do we get Smart Push working in on-premise Planning?
We build a complex set of rules that call rules that call rules that eventually
move some data.
There are a few ways to get there…one way looks like this:
Just a few steps…
Form
Business Rule
(on save)
MaxL Script
Data
Export
Business Rule MaxL Script Load Rule
10. 10
Smart Push
Ok…but maybe this would be better:
That’s more like it…
Form
Business Rule
(on save)
MDXDataCopy
11. 11
Introduction
MDXDataCopy
One of the many functions that is included with Calculation Manager
Magically copies data from one cube to another using MDX…my favorite
language of all time
Requires some setup:
▶Generate a calcmgr encryption key
▶Encrypt your username using that key
▶Encrypt your password using that key
▶Build your calculation script or business rule to execute the script
This is definitely not the same thing as the keys you generate using MaxL
12. 12
Setup
MDXDataCopy
First, log into your CalcMgr server
Open a command prompt and ensure that java is in your path:
▶ path e:OracleMiddlewarejdk160_35bin
Next, change directory to the path where you find calcmgrCmdLine.jar:
▶ cd OracleMiddlewareEPMSystem11R1commoncalcmgr11.1.2.0lib
Generate a key:
▶ java -jar calcmgrCmdLine.jar –gk
▶ For me, this generated the key i8V9DF5ed7J66CgE9fyEbf
Memorize that key and use it to encrypt your username:
▶ java -jar calcmgrCmdLine.jar -encrypt -key i8V9DF5ed7J66CgE9fyEbf admin
▶ For me, this generated the encrypted username yGnSWsRl9n7IJibBn5DlpqUYggM1VwKc1EC4GFSubmshYRMGwBmntj6JIJ7jNG6T
Now use the same key to encrypt your password:
▶ java -jar calcmgrCmdLine.jar -encrypt -key i8V9DF5ed7J66CgE9fyEbf GetYourOwnPassword
▶ For me, this generated the encrypted password MkAWnNRVgYxnuINAaOV8vIJLdxp8qU00lPqgVP+VeMLHwUHDPa2Ibj9QHtuqvVjb
13. 13
The Function
MDXDataCopy
The MDXDataCopy function has the following parameters:
▶ Key that we just generated
▶ Username that we just encrypted
▶ Password that we just encrypted
▶ Source Essbase Application
▶ Source Essbase Database
▶ Target Essbase Application
▶ Target Essbase Database
▶ MDX column definition
▶ MDX row definition
▶ Source mapping
▶ Target mapping
▶ POV for any dimensions in the target, but not the source
▶ Number of rows to commit
▶ Log file path
That is a ridiculous number of parameters…
14. 14
Finally…the actual data copy
MDXDataCopy
So what does the actual code look like?
RUNJAVA com.hyperion.calcmgr.common.cdf.MDXDataCopy
"i8V9DF5ed7J66CgE9fyEbf"
"yGnSWsRl9n7IJibBn5DlpqUYggM1VwKc1EC4GFSubmshYRMGwBmntj6JIJ7jNG6T"
"MkAWnNRVgYxnuINAaOV8vIJLdxp8qU00lPqgVP+VeMLHwUHDPa2Ibj9QHtuqvVjb"
"VisionM"
"Plan1"
"VMASO"
"VMASO"
"{[Jul]}"
"CrossJoin({[No
Account]},CrossJoin({[FY16]},CrossJoin({[Forecast]},CrossJoin({[Working]
},CrossJoin({[No Entity]},{[No Product]})))))"
""
""
""
"-1"
"e:mdxdatacopy.log";
16. 16
Gotchas and Code
Clearly this is hard-coded
Easy to pop into CalcMgr and add in some parameters
Depending on the form layout, you will likely need more than one, if not many
versions of this script to properly support all of your forms
But overall…pretty awesome
17. 17
Dimension-Based Smart Lists
Dimension-based Smart Lists are one of the easier things to replicate from
PBCS
In PBCS, every member has a new alias that contains the ID for the member in
the HSP_OBJECT table
First we need to mimic that:
Now that we have an alias table to reference we can use that to also create
our Smart List:
Dim
Extract
Query the
Repository
Outline Load
Utility
Update the
Aliases
Outline Load
Utility
Modify
Extract
SL
Extract
SL
Deletes
Outline Load
Utility
Dim
Extract
Outline Load
Utility
Update the
Aliases
18. 18
Setup
Dimension-Based Smart Lists
Before we actually get our Smart List created, we need to make sure that we
can reference back to the members in the dimension
To do this, we will query the Planning Repository to product a list of all of the
dimension members along with their OBJECT_ID
We will then add an alias table to the application so that we can store this
information
This OBJECT_ID will then be used to create or update the alias so that all
members will have this property
You can also do this via DRM or your favorite MDM solution rather than using
the repository
19. 19
Alias Query
Dimension-Based Smart Lists
Once, the alias has been added, we need a query to get the OBJECT_ID and
put it into an alias:
SELECT
mo.OBJECT_NAME AS [Product]
,po.OBJECT_NAME AS [Parent]
,'SL_' + CAST(mo.OBJECT_ID AS VARCHAR) AS [Alias: SL_Alias]
FROM
HSP_MEMBER m
INNER JOIN
HSP_OBJECT mo ON
m.MEMBER_ID = mo.OBJECT_ID
INNER JOIN
HSP_OBJECT do ON
m.DIM_ID = do.OBJECT_ID
INNER JOIN
HSP_OBJECT po ON
mo.PARENT_ID = po.OBJECT_ID
WHERE
do.OBJECT_NAME = 'Product'
20. 20
Demo
Let’s execute the query
Once we have the results, we’ll update the alias
This can all be automated, but for demo purposes…we will do it manually
21. 21
Delete The Smart List
Dimension-Based Smart Lists
When we update a dimension, we may add or delete members
We don’t really know which operations have occurred
Because we don’t know…we just remove the Smart List
22. 22
Demo
Let’s have a look at the file and then perform the delete
SmartList Name, Operation, Label, Display Order, Missing Label, Use Form Missing Label, Entry ID, Entry Name, Entry Label
SL_Product,deletesmartlist,,,,,,,
23. 23
Create The Smart List
Dimension-Based Smart Lists
Now that we have deleted the Smart List…let’s re-create it
First, let’s build a query to get the dimension info for the Smart List
SELECT
'SL_Product' AS [SmartList Name]
,'addentry' AS [Operation]
,'' AS [Label]
,'' AS [Display Order]
,'' AS [Missing Label]
,'' AS [Use Form Missing Label]
,m.MEMBER_ID AS [Entry ID]
,mo.[OBJECT_NAME] AS [Entry Name]
,mo.OBJECT_NAME AS [Entry Label]
FROM
HSP_MEMBER m
INNER JOIN
HSP_OBJECT mo ON m.MEMBER_ID = mo.OBJECT_ID
INNER JOIN
HSP_OBJECT do ON m.DIM_ID = do.OBJECT_ID
INNER JOIN
HSP_OBJECT po ON mo.PARENT_ID = po.OBJECT_ID
WHERE
do.OBJECT_NAME = 'Product'
24. 24
Demo
Now let’s use the results of the query to re-create the Smart List
Again, this will be manual for demo purposes
This can easily be automated using the outline load utility
25. 25
Gotchas and Code
There are a lot of steps to this code as well…but generally speaking not a lot
of gotchas
26. 26
Deleting Years
PBCS has a handy button for this purpose…but On-Premise requires basic SQL
code
The good new is…we’ve been doing this for years…long before PBCS even
existed
Finally…something that doesn’t require 20 steps…
Update
HSP_Calendar
Delete From
HSP_Member
Delete from
HSP_Object
Restart
Planning
27. 27
Gotchas and Code
This one is pretty simple…
SELECT * FROM HSP_CALENDAR --First Year is 2009 and current year is 50002
SELECT * FROM HSP_OBJECT WHERE OBJECT_NAME = 'FY09' --Search for FY09...who needs consistency anyway
SELECT * FROM HSP_OBJECT WHERE OBJECT_NAME = 'FY10' --Find FY10 ID
UPDATE HSP_CALENDAR SET FIRST_YEAR = '2010'
DELETE FROM HSP_MEMBER WHERE OBJECT_ID = (SELECT OBJECT_ID FROM HSP_OBJECT WHERE OBJECT_NAME = 'FY09')
--Get rid of member first...foreign key constraint
DELETE FROM HSP_OBJECT WHERE OBJECT_NAME = 'FY09' --now get rid of object
28. 28
ASO Plan Types with Essbase Ad Hoc
In Hyperion Planning, you can access Essbase using an Ad-Hoc connection in
Smart View
This works great with BSO, and even has check box during refresh to build
your security filters
ASO on the other hand…not really
So how do we do this?
▶First, patch Planning (this only works on 11.1.2.4.04+)
▶Update your Planning application properties to deploy an ASO cube
▶Backup and Delete your ASO cube in EAS
▶Restart Planning and Redeploy
▶Run the magical script included in the addendum
29. 29
After the Patch
ASO Plan Types with Essbase Ad Hoc
We update the properties of the application and restart planning:
30. 30
After the Patch
ASO Plan Types with Essbase Ad Hoc
Now we have to back up our ASO cube…
▶Log into your Essbase server and backup the entire directory
Then we delete the application in EAS
▶Yes…I said delete your application
Then we refresh our application in Planning
Finally, we restore our backed up artifacts
31. 31
Gotchas and Code
Like many things in On-Prem…lots of steps
We actually found a few bugs in Essbase that had to be worked around to get
this working
We had to rebuild the Planning security model in Essbase…that was fun…
▶Using MaxL, we extract the current filters from the model
▶We then use the results to build a MaxL script the removes those filters
▶Finally we create a new set of filters using the security from the Planning Repository
‒ This is somewhere around 1 million lines of code…at least it felt like it
I’ll upload the code for this one as it is waaaaay too big to fit here