Need to add if condition in the account formula for entity specific execution

Yashwant
New Contributor III

There are certain calculations are specific to some entities in the hierarchy so want to add if condition to check entity names and then execute the code.

Couldn't find any api which returns Entity name.

Yashwant_0-1637579408892.png

Regards,

Yashwant

4 ACCEPTED SOLUTIONS

MarcR
VIP

Hi Yashwant, 

Api.pov.Entity.Name should do the trick.

 

Marc Roest
OneStream consultant @Finext

View solution in original post

LeeB
Contributor II

Hi Yashwant,

api.Pov.Entity.Name

LeeBown_0-1637580171902.png

Lee

View solution in original post

LeeB
Contributor II

Yes, you can use api.Members.IsBase - see below.

'Get DimPk for POV Entity Dimension
Dim objDimPk As DimPk = api.Pov.EntityDim.DimPk
'Get Member ID for POV Entity Member
Dim entityID As Integer = api.Pov.Entity.MemberId
'Get Member ID for selected ancestor
Dim ancestorID As Integer = api.Members.GetMember(DimType.Entity.Id,"GroupGBP").MemberId

'Run only on base entities of selected ancestor
If api.Members.IsBase(objDimPk, ancestorID, entityID) Then
api.data.calculate("A#Check = A#Check1")
End If

 

Lee

 

View solution in original post

ChristianW
Valued Contributor

There is also a api.pov.parent, but it only works for relationship related consolidation members like elimination or share.

Alternative to Lee's solution, you can also work with api.members.getparents(...) or api.members.getchildren(..) and check if the requested parent/member is in the result list, this might be helpfull if you have to repeat the check or if you like to test more than one parent.

somthing like this:

 

Dim parentList As list(Of member) = api.members.getParents(api.Pov.EntityDim.DimPk, api.pov.entity.memberid, False)

If Not parentList.Find(Function(x) x.Name="ParentName") Is Nothing
End If

Dim parentID As Integer = api.Members.GetMemberId(dimtypeid.Entity, "ParentName")
Dim childrenList As list(Of member) = api.members.GetChildren(api.Pov.EntityDim.DimPk, parentID)

If Not childrenList.Find(Function(x) x.MemberId=api.pov.Entity.MemberId) Is Nothing
End If

 

You should also consider, to use a text attribute to identify the entities for the calculation: api.Entity.Text(1) = "Calc".

View solution in original post

7 REPLIES 7

MarcR
VIP

Hi Yashwant, 

Api.pov.Entity.Name should do the trick.

 

Marc Roest
OneStream consultant @Finext

LeeB
Contributor II

Hi Yashwant,

api.Pov.Entity.Name

LeeBown_0-1637580171902.png

Lee

Yashwant
New Contributor III

Thanks a lot.. Yes, its working.

Is there any way to loop through Parent its children to avoid adding many if conditions.

Thank You

Regards,

Yashwant

 

LeeB
Contributor II

Yes, you can use api.Members.IsBase - see below.

'Get DimPk for POV Entity Dimension
Dim objDimPk As DimPk = api.Pov.EntityDim.DimPk
'Get Member ID for POV Entity Member
Dim entityID As Integer = api.Pov.Entity.MemberId
'Get Member ID for selected ancestor
Dim ancestorID As Integer = api.Members.GetMember(DimType.Entity.Id,"GroupGBP").MemberId

'Run only on base entities of selected ancestor
If api.Members.IsBase(objDimPk, ancestorID, entityID) Then
api.data.calculate("A#Check = A#Check1")
End If

 

Lee

 

ChristianW
Valued Contributor

There is also a api.pov.parent, but it only works for relationship related consolidation members like elimination or share.

Alternative to Lee's solution, you can also work with api.members.getparents(...) or api.members.getchildren(..) and check if the requested parent/member is in the result list, this might be helpfull if you have to repeat the check or if you like to test more than one parent.

somthing like this:

 

Dim parentList As list(Of member) = api.members.getParents(api.Pov.EntityDim.DimPk, api.pov.entity.memberid, False)

If Not parentList.Find(Function(x) x.Name="ParentName") Is Nothing
End If

Dim parentID As Integer = api.Members.GetMemberId(dimtypeid.Entity, "ParentName")
Dim childrenList As list(Of member) = api.members.GetChildren(api.Pov.EntityDim.DimPk, parentID)

If Not childrenList.Find(Function(x) x.MemberId=api.pov.Entity.MemberId) Is Nothing
End If

 

You should also consider, to use a text attribute to identify the entities for the calculation: api.Entity.Text(1) = "Calc".

Yashwant
New Contributor III

Thank You.

Earlier I had though of using Text1 field for this purpose but saw api.Entity.Text however was not aware of retrieving Text1 contents.

 api.Entity.Text(1) = "Calc" -- This is very valuable information.

 

ChrisLoran
Valued Contributor

I agree with the preference to use Text attributes and try to stay away from hard-coding entity/member names where possible.  But also PLEASE be careful about upper/lowercase string comparisons, and try to use the XFEqualsIgnoreCase where possible. I've seen a number of incidents where conditions are not being met because the upper/lower case is not matching.