Forum Discussion

Yashwant's avatar
Yashwant
New Contributor III
4 years ago

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

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.

Regards,

Yashwant

  • Hi Yashwant, 

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

     

  • Hi Yashwant,

    api.Pov.Entity.Name

    Lee

  • LeeB's avatar
    LeeB
    4 years ago

    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

     

  • 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".

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

  • Hi Yashwant, 

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

     

  • LeeB's avatar
    LeeB
    Contributor II

    Hi Yashwant,

    api.Pov.Entity.Name

    Lee

  • Yashwant's avatar
    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's avatar
      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's avatar
        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".