Minority Interest calculation

New Contributor III

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



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


Contributor 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

	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