Forum Discussion

jacobw's avatar
jacobw
New Contributor III
3 years ago

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

 

  • 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's avatar
    JackLacava
    Honored Contributor

    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

     

    • Krishna's avatar
      Krishna
      Valued 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.