Forum Discussion
jacobw
3 years agoNew Contributor III
Minority Interest calculation
Hi community,
Does anyone have a good member formula for calculating income/equity attributable to minority interest on the P&L and balance sheet? My understanding is in our case we can report this in a simple manner with just two additional accounts, one on the P&L and one on the balance sheet.
In my mind the P&L account would work something like the following, if ownership type equals Non-Controlling Interest then multiply net income by (1 - percent ownership).
I'm currently trying the below formula for the P&L account, but not yielding any results. After running a consolidation there is no data in the new account. Any suggestions on how to solve this? Thanks,
Dim dValue As Decimal = api.Entity.PercentOwnership()
Dim objOwnershipType As OwnershipType = api.Entity.OwnershipType()
If objOwnershipType = "Non-Controlling Interest" Then
api.Data.Calculate("A#NCI_Income:I#None:F#PL_LOAD:O#Import:U1#None:U2#None:U3#None:U4#None:U5#None:U6#None:U7#Data_Load:U8#None = A#NetIncome:I#Top:F#Top:O#Top:U1#Top:U2#Top:U3#None:U4#None:U5#None:U6#None:U7#Top:U8#None * (1-"& dValue &")")
End If
3 Replies
- Mike_SabourinContributor II
A little bit different from your example case, because the client's needs didn't include P&L. What we did was create a Non-Controlling Interest account that loops through all the entities and checks the ownership type. When it finds the "NonControllingInterest" type, it stores the percentage of ownership. it runs through and creates a running total of the equity from those entities * the ownership percentage. If you want to adapt this, just replace the TOP_ENTITY member with whatever your topmost entity is and the Min_Int_Acct with the account number you create.
Dim debugSwitch As Boolean = False '<----- Turn on the debug switch To Log debug messages Dim ePOV As String = api.Pov.Entity.Name Dim tPOV As String = api.Pov.Time.Name If ePOV = "TOP_ENTITY" Then Dim entityDimPk As DimPk = api.Pov.EntityDim.DimPk Dim ePovId As Integer = api.Pov.Entity.MemberId Dim topEntityParent = api.Members.GetMemberId(DimType.Entity.Id, "E#TOP_ENTITY") 'Get base Entity members Dim allMembers As List(Of Member) = api.Members.GetDescendants(entityDimPk, ePovId) 'GetAllMembers(EntityDimPk) Dim ScenName As String = api.Pov.Scenario.Name Dim RunTotal As Decimal If Not allMembers Is Nothing Then 'Check to make sure the list is populated For Each objMember As Member In allMembers Dim CurrEnt As String = objMember.Name Dim entId As Integer = objMember.MemberId Dim parList As List(Of Member) = api.Members.GetParents(entityDimPk, entId, False) For Each parMe As Member In parList Dim ParId As Integer = parMe.MemberId Dim IsPar As Boolean = api.Members.HasChildren(entityDimPk, entId) If IsPar = True Then Dim OwnType As String = api.Entity.OwnershipType(entId, ParId, -1, -1).ToString Dim RateMe As Decimal = 1 - (api.Entity.PercentOwnership(entId, ParId, -1, -1) / 100) Dim TextMe As String = api.Entity.Text(entId, 1) If OwnType = "NonControllingInterest" Then Dim TotAmt As Decimal = api.Data.GetDataCell("E#" & CurrEnt & ":C#USD:S#" & ScenName & ":V#Periodic:A#Equity:F#EndBal:O#Top:I#Top:U1#Tot_Consol:U2#Top_Departments:U3#None:U4#None:U5#None:U6#None:U7#None:U8#None").CellAmount If Not TotAmt = 0 Then RunTotal = RunTotal + (TotAmt * RateMe) '********* debug info ********* If debugSwitch = True Then brapi.ErrorLog.LogMessage(si, "33000:CurrEnt=" & CurrEnt & "~EntId=" & entId & "~ParID=" & ParId & "~OwnType=" & OwnType & "~Rate=" & RateMe & "~Text1=" & TextMe & "~TotAmt=" & TotAmt & "~RunTotal=" & RunTotal) '****************************** End If End If End If Next ' parme Next 'objmember api.Data.Calculate("A#Min_Int_Acct:E#TOP_ENTITY:S#" & ScenName & ":V#Periodic:F#EndBal:O#AdjInput:I#None:U1#None:U2#None:U3#None:U4#None:U5#None:U6#None:U7#None:U8#None = " & RunTotal) End If End If - JackLacava
OneStream Employee
That formula should error out, I'm surprised it doesn't. This is how you perform that check:
Dim ownType As OwnershipType = api.Entity.OwnershipType() If ownType.Equals(OwnershipType.NonControllingInterest) Then ....Also, that dValue is a decimal, so dropping it like that in a formula might give you problems in some configurations (different Cultures might use different decimal characters). Use dValue.XFToStringForFormula() instead
- KrishnaValued Contributor
JackLacava - The If statement does not work if the cube is a multuCube & it is working for Single Cube. Do you have any example for MultiCube.
Related Content
- 8 months ago
- 9 months ago