45
www.finitsolutions.com Finit Solutions Introduction Finit as a company: Who we are…Why? How?

OneStream Functionality You Might Not be Using (But Should Be)

Embed Size (px)

Citation preview

Page 1: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com

Finit Solutions Introduction

Finit as a company:

Who we are…Why? How?

Page 2: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 3: OneStream Functionality You Might Not be Using (But Should Be)

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?

Page 4: OneStream Functionality You Might Not be Using (But Should Be)

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?

Page 5: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 5 -

Our values, on which we ask you to provide consultant feedback:

Finit Values

Page 6: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 6 -

Question and Answer

Page 7: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 8: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 9: OneStream Functionality You Might Not be Using (But Should Be)

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.

Page 10: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 11: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 12: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 12 -

Usage

• E#allorgs.base.where(Currency <> USD)

• E#allorgs.base.where(Text1 = [SAP GL])

1. Easy member lists

Page 13: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 14: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 15: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 16: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 17: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 18: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 19: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 20: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 21: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 21 -

Usage

4. Pull Exchange Rates into Cube

Page 22: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 23: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 24: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 25: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 26: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 27: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 28: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 28 -

Usage

• Demo

6. Loading data to O#BeforeAdj

Page 29: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 30: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 31: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 32: OneStream Functionality You Might Not be Using (But Should Be)

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)

Page 33: OneStream Functionality You Might Not be Using (But Should Be)

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)

Page 34: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 34 -

Usage

• Demo

8. Auto translate to a currency

Page 35: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 36: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 37: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 37 -

Usage

Result

9. Control confirmation entities

Page 38: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 39: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 40: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 40 -

Usage

• Demo

10. BegBal from a different scenario

Page 41: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 42: OneStream Functionality You Might Not be Using (But Should Be)

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])

Page 43: OneStream Functionality You Might Not be Using (But Should Be)

www.finitsolutions.com- 43 -

APPENDIX

Code samples and configuration settings

Page 44: OneStream Functionality You Might Not be Using (But Should Be)

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

Page 45: OneStream Functionality You Might Not be Using (But Should Be)

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