Fellow HFM administrators, power users, and anyone else who has had to fix an HFM rule: have you ever wished you could see, understand, and fix what is going on? Have you ever asked yourself:
Where did that error come from?
Why is this number multiplied 12 times?
Is the override number coming from Sub Calculate or Sub Translate?
Does this condition even do anything?
This calculation is incorrectly running on Revenue accounts.
The calculation is correct but I'm not getting any results...
Oracle Ace Chris Barbieri shares multiple techniques for setting up classic vbscript rules to capture debugging information and how to correct these common problems.
Presenter: Chris Barbieri
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Where Did That Come From? Techniques for Debugging HFM
1. Where did that come from?
Hyperion Financial Management
Techniques for debugging HFM rules
October 16, 2015
Chris Barbieri
2. Finit Overview
• Founded in 2002
• 75+ employees in 20+ states
• Mostly CPAs, MBAs
• 50+ Planning / Essbase Clients
• 80+ HFM Clients
• Managed largest roll-out of HFM in North America
• Market Leader in ARM/FCM
• World Leader in FDM implementations and
custom solutions
4. Why is Finit Here?
• We make and deliver
personalized financial reporting
solutions and experiences.
• Listening, questioning, and
analyzing
• Building relationships … not
company to company, but person
to person.
We are Makers and Doers
5. How do we achieve our beliefs?
The Finit Family
• All owners actively involved in
the business
• No debt or external owners
• Prioritize the customer, not
profitability
• Long term stability
• employees, not subcontractors
• Compensation model based
on client satisfaction
7. Finit Customer Success
Our values, culture, and approach to
becoming a trusted advisor to our
customers has led to
100% customer success
for every Finit client (225+) and every
project (450+)
10. About the Presenter
•
• Global contribution to Oracle EPM community
• Hyperion Financial Management
• Hyperion Enterprise
• 17 years of Hyperion Experience
• Customer / administrator
• Micro Control
• Hyperion Enterprise
• Hyperion Employee
• Pioneer consultant on HFM
• Sr. Product Issues Manager
• Oracle Partner
• HFM Practice Leader
• EPM System Architect
• Thought leader in HFM application and system design and performance
Expert in tropical places and rock & roll ☺
Chris Barbieri
cbarbieri@finitsolutions.com
11. Topics
• Objectives
• Where did that number come from?
• Review of rules and the value dimension
• Getting to the root of the problem
• Debugging Classic Rules
• Write To File
• The art of debugging
12. Trace the Problem
• Symptoms often show up in top entities
• Very difficult to find root cause there
• Drill back to the inflection point: Start from good
• Base Entity
• Walk up the Value dimension
• Base Customs, ICP and Account
• Was the Prior Period okay?
• Identify the problem point by taking a bottom-up
approach
• Don’t forget to check the Calc Status!
13. Walk the Value Dimension
• Create a grid with Entity in rows, Value in columns
Connect the dataConnect the dataConnect the dataConnect the data…………
…with the Calc Status…with the Calc Status…with the Calc Status…with the Calc Status
14. Pay Attention to the Calc Status
• Tracks whether rules have been run since
• Last data change
• System (Metadata/rules) change
• Enables HFM to run rules only where needed
• Utmost importance for trusting the numbers
… “OK” doesn’t mean the logic is correct
Never had dataNever had dataNever had dataNever had data Data has changedData has changedData has changedData has changed System has changedSystem has changedSystem has changedSystem has changed
15. Read Cell Information
• Right-click on a cell to
view Cell Information
• Reveals the full POV
• Displays Calculation Status
• And suggested action
16. Calc Status: Action Required
Status Required Action Objective When Needed
“Changed”
Calculate Run all logic in local
currency
• Data has been changed
• A journal has been
posted/un-posted
“Needs
Translation”
Translate Translate all
accounts from local
currency balances
into target currency
• Foreign currency entity
has had a data or journal
change
“Needs
Consolidation”
Consolidate Add up data from
children, perform
eliminations
• Data from one or more
base entities has
changed
“OK”
(do nothing) Data has been
calculated
• Nothing has changed
since logic was last run
17. Currencies Outside the Hierarchy
• Have a grid like this, and “Translate/Force Translate”?
• Be careful about currencies which are not any parent’s
• “Consolidate” only runs on currencies according to the entity
hierarchy
1) Create a hierarchy
2) Create a task flow
3) Manually ‘babysit’
4) ICP report might
translate these*
1) Create a hierarchy
2) Create a task flow
3) Manually ‘babysit’
4) ICP report might
translate these*
Possible solutionsPossible solutions
18. HFM Sub Routines: Commonly Used
• Calculate
• 80% of business logic
• Calculations for the trial balance
• Bring P&L into Current Year Retained Earnings
• Roll-forwards and Cash Flow
• Translate
• Non-standard translations
• Consolidate
• Vary from out-of the box consolidation and eliminations
• Write eliminations to a custom member
• Apply consolidation methods, including minority interest
• NoInput
• Data entry “mask”
• Dynamic
• Ratios
19. HFM Sub Routines: Less Commonly Used
• Allocate
• Write back from parent entities to base entities
• Equity Pick Up
• Multi-pass consolidation logic
• Input
• Input base level accounts and customs, but in a parent entity
• On-Demand
• Introduced in 11.1.2.3 for Forms
• Transactions
• Introduced in 4.0
• Specifies accounts enabled for intercompany transactions
20. Rule Execution in the Value Dimension:
In the beginning – a base entity
<Entity Curr Adjs><Entity Currency>
<Entity Curr Total>
Aggregation – data not stored
Rule execution – data stored
Data entry and
loads here
Journals
here
Unexpected data
here is the result of:
• Data or journals
• Metadata
attributes
• Sub Calculate
Unexpected data
here is the result of:
• Data or journals
• Metadata
attributes
• Sub Calculate
21. Rule Execution in the Value Dimension:
Next steps– a base entity
<Entity Curr Total>
Aggregation – data not stored
Rule execution – data stored
Journals in parent’s
currency here
Unexpected data
here is the result of:
• Journals
• Metadata
attributes
• Default
translation
• Sub Translate
• Sub Calculate
Unexpected data
here is the result of:
• Journals
• Metadata
attributes
• Default
translation
• Sub Translate
• Sub Calculate
<Parent Curr Adjs><Parent Currency>
<Parent Curr Total>
Zero here means:
• There is no Exchange Rate
• Or a rule has zeroed it out
after translation
22. [Contribution Adjs]
Rule Execution in the Value Dimension:
Contribute to your parent – a base entity
[Parent Adjs]
[Elimination]
[Parent]
[Proportion]
[Contribution Total]
[Contribution]
[Parent Total]
Aggregation – data not stored
Rule execution – data stored
Is [Parent Total] correct?
It’s the starting point for
Sub Consolidate
Unexpected data here is the result of:
• Sub Consolidate
• Methods
• Intercompany eliminations
• Sub Calculate
• [Active]
• Scenario attributes
23. Rule Execution in the Value Dimension:
Moving on up… to the parent entity
<Entity Currency> of the
parent entity =
Sum of [Contribution Total] of
its children
… and the value dimension
begins again for the parent
entity and its siblings
28. Write To File
• Not a standard HFM-provided subroutine
• … but very commonly used
• HFM’s VBScript rules permit more than just HFM
calculations
• Easy for HFM to generate a text file during rule execution
• File created by HFM DCOM user
• System account that runs CASecurity.exe, HsxServer.exe
and HsvDatsource.exe processes
• File can reside any place the DCOM user AND you (human,
HFM user) can Read/Write
• Often directly on the HFM server
• Requires Remote Desktop access
• Or a shared folder available on the network
• Inside the firewall
30. Generate a Simple File
• Make sure the Write To File works
• And that you can access it
• Create a “road sign” that the sub routine will start
• Orient yourself by adding POV details
• Exercise in string concatenation
sPovValue <Entity Currency>
Name of variableName of variable Content of variableContent of variable
32. Add Variables and Comments to Yourself
• The art of debugging is to write intelligible,
actionable notes to yourself
• Give yourself as many clues as possible
Log every variable you’re
using, watch for nulls
Use line numbers for
navigation
Write out each member in
the list
33. Check Your Variables
Page 33
• Capture both the variable name AND its contents
• If you see the variable name followed by nothing,
it means it’s not defined
34. Tip: Working With Text
Page 34
• Text is case-sensitive
“APR” is not equal to “apr”
• Instead use
UCASE(text)
LCASE(text)
StrComp(text1, text2, vbTextCompare) = 0
• Easy to manipulate text
• VBScript functions
Left(text, number of characters)
Right(text, number of characters)
Mid(text, start position, number of characters)
• Concatenate
strName = “Chris” & “ ” & “Barbieri”
• Can’t perform “math” on text
• “<“ or “>” are based on alphanumeric sequence
“APR” is less than “MAR”
“APR” is less than “apr”
35. Now What?
Changed, but still not
expected
Walk the value dimension
Corrected the case problem
36. Dig a Little Deeper
Custom dimensions aren’t
the same for both accounts!
“Taxes” not flagged IsCalculated“Taxes” not flagged IsCalculated
37. Tip: Check Your Sources
• HS.EXP sets data in the same intersections
on the right to those on the left
• All valid intersections
• Be explicit! Balance the seesaw
Account Account
ICP
Customs
=
Account
ICP
Customs
Account
ICP
Customs
=
Which ICP or
Customs will
be written to?
[None]? Tops?
Only [None] was valid for “Taxes” in Customs 2-4
Custom1 Product is the same
Only [None] was valid for “Taxes” in Customs 2-4
Custom1 Product is the same
38. Tweak The Rule
Pull TotalProducts into [None]
Clear out the residual data
Only necessary if the account/custom is not IsCalculatedOnly necessary if the account/custom is not IsCalculated
39. Log File Management Tips
• Output log appends each new text
item
• Including from one session to the next
• Delete the file as needed
• Make it easier to navigate
• Hard to find answers among 10,000
lines of messages
• “Take only what you need”
• Execute calculations as narrowly as
possible
40. Getting Closer
Page 40
Italy has no taxes, as expected
But why is this negative?
And not 35%
Add all customs and ICPAdd all customs and ICP
42. Trick: Set the Targets Equal
Page 42
• Shake out any differences – remove the rate
• Still a difference
• Strip out all Sub Calculate except this one rule
43. Is the Intersection Correct?
Page 43
• Look in a web grid at the cell you’re reading from
44. Found it!
Page 44
• Custom3: needed TotalC3 rather than TotalChannels
• Update the rule
• Hurrah! I’m getting the right intersection
• Add back the other rules and continue
46. Tip: Debug a Number
• Fetch a number from an HFM intersection
• Must use “GetCell” or a variant
• GetCell yields a number in a cell
• GetCellRealData also tells if the number is derived (gray)
• GetCellNoData tells if the cell is empty or not
• Must be ‘one number at a time’
• Can’t embed this inside Call WriteToFile
• Fetch it just before you need it
• Or pass along a variable that should contain a number
• Percentages are common for Allocations:
• fProductAllocationPct
• fChannelRevenue
• fDenominator
47. Life of a Variable
Page 47
• By default, it is only defined for the current subroutine
• By default, it is not passed into other subroutines
Call Useful(sPovEntity, bIsLastPeriod)
Sub Useful(sPovEntity, bIsLastPeriod)
If sPovEntity = “Boston” And bIsLastPeriod = True Then
Do something useful
End If
End Sub
• Could redefine it within each subroutine
• Risk it being defined differently
• Use Public variables for string constants
• Do NOT use Public for POV variables
48. HFM Administrator Guide
Page 48
• Check out Chapter 10 in
the HFM Administrator
Guide
http://docs.oracle.com/cd/E57185_01/
epm.1112/hfm_admin_11124100/fram
eset.htm?launch.html
• Also available online
49. Thank you for attending!
Questions?
Email us for a copy of the slides
or link to the recording
insights@finitsolutions.com
Past webinars:
www.finitsolutions.com/
webinars
Presenter:
Chris Barbieri
cbarbieri@finitsolutions.com
General Questions:
Greg Barrett
gbarrett@finitsolutions.com
Joe Mizerk
jmizerk@finitsolutions.com