Date post: | 09-Jan-2017 |
Category: |
Technology |
Upload: | finitsolutions |
View: | 668 times |
Download: | 17 times |
www.finitsolutions.com
Finit Solutions Introduction
Finit as a company:
Who we are…Why? How?
www.finitsolutions.com- 2 -
Finit Overview
• Founded in 2002
• 75+ employees in 20+ states, 14 dedicated to the OneStream practice
– Mostly CPAs, MBAs
– We have extensive CPM product and financial reporting backgrounds
• 50+ Planning / Essbase Clients
• 80+ HFM Clients
– Managed several of the largest EPM projects in the U.S.
– Including the largest roll-out of HFM in North America
• 15 OneStream Clients
– Lead the implementation of the first 3 live OneStream customers• AAA Life (Consolidation & Budgeting), Guardian and Henniges
• Market Leader in ARM/FCM
• World Leader in FDM implementations and custom solutions
www.finitsolutions.com- 3 -
• We make and deliver personalized financial reporting solutions and experiences.
– By listening, questioning, and analyzing
– By building relationships
…not company to company, but person to person.
– We are Makers and Doers
WHY is Finit Here?
www.finitsolutions.com- 4 -
We Run Finit like a Family• Invest in our employees
• All owners actively involved in the business
• No debt or external owners
– Prioritize the customer, not profitability
• Long term stability
– Hire employees, not subcontractors
• Compensation model based on client satisfaction
HOW do we achieve our beliefs?
www.finitsolutions.com- 5 -
Our values, on which we ask you to provide consultant feedback:
Finit Values
www.finitsolutions.com- 7 -
About the Presenter
Phil Brosnan([email protected])
2+ Years of OneStream experience
• Led the first live Enterprise to OneStream project
17+ years in Automotive Finance
• Traditional roles: Cost Accountant to Finance Director
• System implementations: MfgPro, SAP, EssBase, Global HFM (1,200+ users).
Based in Detroit
www.finitsolutions.com
I didn’t know you could do that!
Cool pieces of OneStream functionality you might not be using (but should).
Phil Brosnan – Finit Solutions
www.finitsolutions.com- 9 -
Objectives
• Many presentations are awesome, but don’t give you anything tangible to implement in your App.
This presentation
• See 10 pieces of OneStream functionality
• Learn a couple things you didn’t know
• Take at least one tangible item back to your project.
www.finitsolutions.com- 10 -
Problem
• You need a list of certain members:
– All IC Entities, IC Accounts, foreign entities, etc…
• You can make Business Rules for Member lists, but they are moderately complicated.
1. Easy member lists
www.finitsolutions.com- 11 -
Solution
• .where member expansion is super-easy.
• Almost limitless when combined with Text fields
– E#Root.base.where(Currency <> USD)
– E#Root.descendants.where(IsIC = True)
– UD1#Top.base.where(Text1 = HR)
– .where((Text1 = HR) and (Text2 contains Blue))
• User defined dims have 8 text fields (use them!)
1. Easy member lists
www.finitsolutions.com- 12 -
Usage
• E#allorgs.base.where(Currency <> USD)
• E#allorgs.base.where(Text1 = [SAP GL])
1. Easy member lists
www.finitsolutions.com- 13 -
Problem
• Confirmation rules that need to validate both positive and negative variances
• Can be a little complicated:If args.ConfirmationRuleArgs.DisplayValue > 100 Then
Return False ‘Fail
Else If args.ConfirmationRuleArgs.DisplayValue < -100 Then
Return False ‘Fail
Else
Return True ‘Pass
2. Using VB.Net Math functions
www.finitsolutions.com- 14 -
Solution
• Use VB.Net Math functions to simplify rules:If Math.Abs(args.ConfirmationRuleArgs.DisplayValue)>100
• Math.Abs Returns the absolute value of a number.
• Math.Max Returns the larger of two numbers.
• Math.Round Returns a rounded number
• Math.Sign Returns the sign of the value
• Many others as well
2. Using VB.Net Math functions
www.finitsolutions.com- 15 -
Usage
• The Math functions are just the tip of the VB.NET iceberg.
• Lots of resources available on line:
– http://www.microsoftvirtualacademy.com/training-courses/vb-fundamentals-for-absolute-beginners
– http://www.dotnetperls.com/keyword-vbnet
– Just Google it.
2. Using VB.Net Math functions
www.finitsolutions.com- 16 -
Problem
• For design and usability purposes, you want a blank row in a cube view.
3. Truly blank rows in a cubeview
www.finitsolutions.com- 17 -
Solution
• You could set white text on a white background, or mess with Row height/padding/etc…
• Easier is to use the “Transparent” color
• Can be used on just the text, or both the text and background.
3. Truly blank rows in a cubeview
www.finitsolutions.com- 18 -
Usage
• Works in CubeView, Report, and Excel (mostly).
• Credit to Michelle Johnson at Graco for this one!
3. Truly blank rows in a cubeview
www.finitsolutions.com- 19 -
Problem
• Exchange rates are stored outside the cube.
• Can’t report on exchange rates in a Cube View.
• There is an XFGet…, but not end-user friendly.
4. Pull Exchange Rates into Cube
www.finitsolutions.com- 20 -
Solution
• Create Dynamic Calc formula to pull exchange rates into the cube.
• Actual Formula is in the appendix
4. Pull Exchange Rates into Cube
www.finitsolutions.com- 22 -
Problem
• Two separate cubes:
– Main Cube and Sales Analysis or HR or Project cubes
• How do you link key accounts across the cubes?
– Net Sales and Std Cost for the Sales Analysis Cube
– Headcount and Salary expense for an HR cube
5. Cross-cube calculations
www.finitsolutions.com- 23 -
Solution
• Cross-cube calculations:CB#Main:A#Headcount = CB#HR:A#TotalHeads
• Normal formula rules apply:
– If a dimension is left out of the formula (ie: flow or UD2 above), it runs for every member of that dim.
– So, if your dims are different in the 2 cubes, make sure you pick that up in your formula.
CB#Sales:A#CustSales:UD1#noCustomer =
CB#Main:A#NetSales:UD1#TopCostCenter
5. Cross-cube calculations
www.finitsolutions.com- 24 -
Usage
• See “50100 – Health Ins” from Golfstream
5. Cross-cube calculations
Houston Houston Heights New York
Cube Account
GolfStream 50200 - Base 100,000 100,000 100,000
Drivers Health 11% 11% 8%
GolfStream 50200 - Base 11,000 11,000 8,000
www.finitsolutions.com- 25 -
Problem
• You want to give users a starting point:
– Copying from a prior forecast as a starting point
– Loading a headcount file from HR
– Loading prior year as the start point for Budget
• But, you want users to be able to change data
– And you want to track the changes.
6. Loading data to O#BeforeAdj
www.finitsolutions.com- 26 -
Solution
• Use O#BeforeAdj for the data entry form
• Form will show the baseline data (in O#Import)
• When the user changes the value, Onestreamsqueezes the difference into O#Forms
6. Loading data to O#BeforeAdj
www.finitsolutions.com- 27 -
6. Loading data to O#BeforeAdj
Type into BeforeAdj member
Difference saved to Forms member
Data previously copied into Import member from other scenario
Import 1000
Forms -
BeforeAdj 1000
Typed 1200 into BeforeAdj
Import 1000
Forms -
BeforeAdj 1200
200
1
2
3Squeeze diff to Forms
www.finitsolutions.com- 28 -
Usage
• Demo
6. Loading data to O#BeforeAdj
www.finitsolutions.com- 29 -
Problem
• You want to load an excel budget template into OneStream thru workflow (not XFSetCell).
• The file has 12 columns (one per month).
– Or, cost centers in columns
– Or, segments in columns
– Or, accounts in columns, etc…
7. Load Matrix Excel file thru WF
www.finitsolutions.com- 30 -
Solution
• Matrix Load file
• Multiple columns in the xfd range.
• Amounts are in the matrix’d columns, not in Amt.
7. Load Matrix Excel file thru WF
A# IC# T#:[]:[]:[2015M1] T#:[]:[]:[2015M2] T#:[]:[]:[2015M3]
GrossSales None 100.00 200.00 300.00
www.finitsolutions.com- 31 -
Usage
• Demo an Excel file, with the xfd range
• There are examples in the Reference Document
7. Load Matrix Excel file thru WF
www.finitsolutions.com- 32 -
Problem
• The main hierarchy has foreign entities rolling to a foreign parent:
• But, you want to see PlantA and PlantB in USD.
8. Auto translate to a currency
North America (USD)
Mexico Legal (MXN)
Mexico PlantA (MXN)
Mexico PlantB (MXN)
www.finitsolutions.com- 33 -
Solution
• The old way would be to force translate, or
• Create an alt hierarchy to trigger the translation
• But in 3.5, use “Auto Translation Currencies”
8. Auto translate to a currency
Mexico_in_USD (USD)
Mexico PlantA (MXN)
Mexico PlantB (MXN)
www.finitsolutions.com- 34 -
Usage
• Demo
8. Auto translate to a currency
www.finitsolutions.com- 35 -
Problem
• You want to limit (or extend) the entities that have confirmation rules run.
• Example: Balance Sheet only balances at the Legal entity level, not at every entity (plants).
9. Control confirmation entities
www.finitsolutions.com- 36 -
Solution
• Workflow Calculation Definitions also control confirmations
1. Will consolidate and also confirm
2. Will consolidate, but won’t confirm
3. Won’t consolidate, but will confirm
9. Control confirmation entities
www.finitsolutions.com- 37 -
Usage
Result
9. Control confirmation entities
www.finitsolutions.com- 38 -
Problem
• Where do Beginning Balances come from?
• OneStream always pulls from the same scenario
– 14 Budget rolls to 15 Budget to 16 Budget, etc…
• BUT, what if that’s not what you want?
10. BegBal from a different scenario
Scenario Jan
-14
… Dec
-14
Jan
-15
… Sep
-15
Oct
-15
No
v-1
5
Dec
-15
Jan
-16
… Dec
-16
Jan
-17
… Dec
-17
Actual
Q3 Forecast
Budget '15 Budget from '14 Actual 16 Bud from Fcst 17 Bud from Bud
www.finitsolutions.com- 39 -
Solution
• Custom Business Rule that can be called from any member formula.
• Custom Business Rule that can be called from Cube Views and Quick Views.
• Copy of the BR is in a separate file.
• Simple maintenance (In the Scenario text field)2014=Actual, 2015=Forecast, 2016=Budget
10. BegBal from a different scenario
www.finitsolutions.com- 40 -
Usage
• Demo
10. BegBal from a different scenario
www.finitsolutions.com- 41 -
Business Rule
• The Business Rule to run this functionality is available from Fint.
• Please contact anyone on the Sales team for a copy
– Jeremy Bulman ([email protected])
– Joe Mizerk ([email protected])
– Greg Barrett ([email protected])
10. BegBal from a different scenario
www.finitsolutions.com- 42 -
Business Rule
• The Business Rule to run this functionality is available from Fint.
• Please contact anyone on the Sales team for a copy
– Jeremy Bulman ([email protected])
– Joe Mizerk ([email protected])
– Greg Barrett ([email protected])
www.finitsolutions.com- 43 -
APPENDIX
Code samples and configuration settings
www.finitsolutions.com- 44 -
Dim viewMember As ViewMember = ViewMember.GetItem(api.Pov.View.MemberPk.MemberId)
If viewMember.IsAnnotationType Then
'Return an empty string if this is a text-based dataCell.
Return ""
Else
Dim destCurrId As Integer = api.Pov.Cons.MemberPk.MemberId
If destCurrId = Currency.USD.Id Then
Return 1.0
Else
Dim rateType As FxRateType = api.FxRates.GetFxRateTypeForRevenueExp() 'AverageRate
'Dim rateType As FxRateType = api.FxRates.GetFxRateTypeForAssetLiability() 'ClosingRate
Dim cubeId As Integer = api.Pov.Cube.CubeId
Dim timeId As Integer = api.Pov.Time.MemberPk.MemberId
Dim sourceCurrId As Integer = Currency.USD.Id
Dim rate As Decimal = api.FxRates.GetCalculatedFxRate(rateType, cubeId, timeId, sourceCurrId, destCurrId)
Return rate
End If
End If
The EndRate formula would be the same, except pulling the rate type for AssetLiability.
AvgRate formula
www.finitsolutions.com- 45 -
Call from inside a Member Formula:
If api.Time.IsFirstPeriodInYear() Then
Dim priorScenarioBR As New OneStream.BusinessRule.Finance.PriorScenario.MainClass
Dim priorScenario As String = priorScenarioBR.FindPriorScenario(si, api, args, _api.Pov.Scenario, api.Pov.time)
api.Data.Calculate("F#BegBalMth=F#EndBal:S#" & priorScenario & ":T#PovPrior1“)
Else
api.Data.Calculate("F#BegBalMth=F#EndBal:T#PovPrior1")
End If
Call from inside a CubeView member filter:
T#PovPriorYearM12:getdatacell("BR#[PriorScenario,|POVScenario|,|PovYear|]")
T#PovPriorYearM12:getdatacell("BR#[PriorScenario,Budget,2015]")
The Business Rule is available. Contact the Finit Sales team for details.
PriorScenario business rule