MDX and ASO, a Dynamic [Calculation] Love Story Dynamically Calculated Investment Returns John...
-
Upload
noreen-harrington -
Category
Documents
-
view
219 -
download
2
Transcript of MDX and ASO, a Dynamic [Calculation] Love Story Dynamically Calculated Investment Returns John...
MDX and ASO, a Dynamic [Calculation] Love Story
Dynamically Calculated Investment Returns
John Anderson, Architect
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
Many years of full lifecycle implementation with Oracle EPM
Oracle|Hyperion Essbase certified Industry Experience includes Aerospace &
Defense, Life Sciences, Financial Services Accomplished dad – first child is six weeks old
and kicking
Introduction: About John
Oracle Platinum Partner Functional and Technical experts focused at the
convergence of Enterprise Performance Management, Data Management, Business Intelligence, and Social Business Technologies
Professional services firm dedicated to helping progressive enterprises dramatically improve business analytics…win with data
Introduction: About Cervello
Learn some MDX equivalents of BSO formulas Think about dynamically answering user
questions Takeaway some confidence to implement
calculations in ASO
Introduction: Goals for Today
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
Large investment manager $B’s in assets 100’s of investment ‘products’ Multiple business units
The Important Part: The Client
The system must answer these two questions● What is the Aggregate Performance of funds across
any/all attributes of our business?● How do I find the time-weighted return for these
aggregate assets?● And how do I provide answers for non-standard time
requests that I can’t always anticipate?
The Important Part: The Requirements
Standard (1, 3, 5Yr, etc)…EASYAd hoc requests (18Mth, 30Mth, etc)…NOT SO EASY
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
Existing environment● Newly built Data Warehouse for all Fund data and
attributes● Newly built Data Mart for OBIEE reporting of Fund-
level assets and performance Existing data
● Fund-level assets provided monthly● Fund-level performance provided monthly with fixed
set of time-horizons (1 month, 3 month, YTD, and 1,3,5 year and life-to-date)
The Interesting Part: Environment
First question: OBIEE or Essbase?● Detailed reporting already being done with OBIEE● However, aggregate calculations proved too complex
and cumbersome…Essbase it is!
The Interesting Part: Technology Choice
Second question: BSO or ASO?● This sounds calculation intensive (the time-weighted
part anyways), and the comfort zone is BSO, but…● Reporting required 27 dimensions!
● 17 had to be stored dimensions due to slowly-changing data relationships, 10 could be attribute dimensions
● ASO…let’s give it a shot!
Performance of a fund is a ratio of the change in assets● This month / last month = performance growth● Actually is very complex (cash in/out flows) – out of
scope of this model Provided data is this month’s ending assets
after cash flows ($), and this month’s performance (%)
So, how do you aggregate a ratio?
The Interesting Part: Agg Performance
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
The Fun Part: Agg Performance
How do you agg a ratio? You don’t. Instead, re-create the pieces to make it easier.
Then, member formula on aggregate data…
First, level 0 calc...
The Answer
*Disclaimer: a BSO cube was used for this and other level 0 calcs for a variety of reasons
$ % $
$ $ %
Voila! Requirement #1 satisfied…now we have aggregate views of performance across any business attribute. But…● This only works for 1 month performance…what
about other time horizons?
The Fun Part: Agg Performance
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
Aggregate views of 1 month performance have been described, but what about time-weighted returns (3mth, 6mth, etc)?
How do we provide a big enough selection of time-weighted options to satisfy current and future anticipated reporting needs?
The Interesting Part: Time-weighting
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Build using ASO and MDX The Useful Part: Key Takeaways
Agenda
User selectable dimension ‘Performance Horizon’
The Fun Part: Dynamic Selection
Dynamically calculates based on selection POV
Time-weighted Performance math:( [ ( 1 + (Asset Prod / Prior Asset ) cur mnth /100 ) * ( 1 + ( Asset Prod / Prior Asset ) 1 mnth ago /100 ) * ( 1 + ( Asset Prod / Prior Asset ) 2 mnths ago /100 ) …. N months ] – 1 ) * 100
The Fun Part: Logic Breakdown
(Curr month) (month shift 1) (month shift N)…
Isolate the repeating term once, and create enough time-shifted terms to satisfy the greatest
Performance Horizon
which can be thought of as…
Let’s assume a max of 18Mth Performance Horizon Build time-shifted measures through 17 months ago
The Fun Part: Outline Construction
Multiplication consolidation operators!!
(Curr month)
(time shifted measures)
Solve Order
1) Curr month (30)
2) Time-shift (40)
3) Consolidation (45)
ASO Formula
The Fun Part: Time Shifting - QTD
/* 001_MAGO_CUM_G */CASE
/* If member is QTD and is 2nd or 3rd mnth of a quarter */WHEN (Count(Intersect( {[QTD_PERF_HRZN]}, {PERF_HRZN_DIM.CurrentMember} ) ) = 1) AND (Count(Intersect( {[P02],[P03],[P05],[P06],[P08],[P09],[P11],[P12]}, {TIME_DIM.CurrentMember} ) ) = 1)
THEN ( [CUM_G_MTH_TERM], [TIME_DIM].currentmember.lag(1) )
BSO equivalent
IF…ELSEIF
IF(@ISMBR())
@SHIFT(mbr,-1)
ASO Formula
The Fun Part: Time Shifting - YTD
/* Else If member is YTD and is from Feb thru Dec */WHEN (Count(Intersect( {[YTD_PERF_HRZN]}, {PERF_HRZN_DIM.CurrentMember} ) ) = 1) AND (Count(Intersect( {MemberRange([P02],[P12])}, {TIME_DIM.CurrentMember} ) ) = 1)
THEN ( [CUM_G_MTH_TERM], [TIME_DIM].currentmember.lag(1) )
BSO equivalent
IF(@ISMBR())
@SHIFT(mbr,-1)
ASO Formula
The Fun Part: Time Shifting
/* Else If member is 2Mth horizon or greater, and is not QTD or YTD */WHEN (Count(Intersect( {MemberRange([002_MTH_PERF_HRZN],[002_MTH_PERF_HRZN].LastSibling)}, {PERF_HRZN_DIM.CurrentMember} ) ) = 1) AND NOT (Count(Intersect( {[QTD_PERF_HRZN],[YTD_PERF_HRZN]}, {PERF_HRZN_DIM.CurrentMember} ) ) = 1)
THEN /* If member is the month of January go to Dec of Prior Year */ IIF ( Count(Intersect( {[P01]}, {TIME_DIM.CurrentMember} ) ) = 1,
( [CUM_G_MTH_TERM], [YEAR_DIM].currentmember.lag(1), [TIME_DIM].currentmember.lead(11) ), ( [CUM_G_MTH_TERM], [TIME_DIM].currentmember.lag(1) ) )
/* Else populate with '1' to allow for multiplication to return results */ELSE 1END
BSO equivalent
@IRSIBLINGS()
IF…ELSE
@MDSHIFT(mbr,-1,Year,,11,Time,)
Rinse, and repeat for each time-shift measure
In real world #s, 3Mth and 17Mth returns look like:
The Fun Part: The Results
The Answer= all that – 1 * 100
Curr Month
Time-shifted measures
Multiply by ‘1’ for prior months not needed…e.g. 3Mth return needs only 2 prior months
Introduction The Important Part: Business Requirements The Interesting Part: Design Challenges The Fun Part: Implementation using ASO and
MDX The Useful Part: Key Takeaways
Agenda
Solve order is key in complex formulas – think about this ahead of time and allow room for future expansion
The Useful Part: Solve Order
A late addition during build
Don’t be afraid to use additional outline members to break up logic into bite-sized pieces● ASO can handle large numbers of outline members● Smaller pieces of logic can be easier to maintain and
debug
The Useful Part: Logic Breakdown
“wait, what does this do again?”
Calculate ‘across’ at the same level● ex: Asset Performance at upper levels = same level
product divided by same level prior assets● ex: Measure “Prior Assets” = @PRIOR(“Assets”)
Remember the other lesser-used consolidation operators (multiplication, division, etc)● Outline math is powerful and fast
The Useful Part: Other Tips
Consider an ‘analysis’ dimension when it makes sense (think ‘Performance Horizon’)
You can find MDX equivalents of BSO functions if you look for them – think Dynamically!!
The Useful Part: Final Thoughts
Questions?
John [email protected]