Skip to Content

BPC 10 - Data AccessProfile settings vs member selection

May 26, 2017 at 02:41 PM


avatar image

Hi All,

I have Data Access Profiles set up with 1 security dimension ("Cost Centre").

Users have access to selection of "Cost Centre" members, with some being "Read" and some being "Write". I think that's very typical and standard set up.

What I am struggling now is Input Templates. What I want to achieve is to restrict member selection via selection window (I use EPMContextMember formula) to Write members only. At the moment users see all members both Read and Write.

I had a go with filters (formula and member filter) using Owner hierarchy but that's no good because:

  1. another hierarchy to maintain
  2. I'm struggling when Owner >1.I can use "Like" in Member Filter but can't have Users applying filters themselves. I can fix filter to formula but (from what I know) it only works with Owner "is" not "contain"

Is there a way to do it?


10 |10000 characters needed characters left characters exceeded
* Please Login or Register to Answer, Follow or Comment.

2 Answers

Best Answer
Vadim Kalinin May 26, 2017 at 03:10 PM

Sorry, but it's not possible... There is no way to effectively restrict users from selecting read only members.

Show 1 Share
10 |10000 characters needed characters left characters exceeded

Ok thanks Vadim!

Dominik Plywaczyk May 30, 2017 at 09:55 AM

Right! I got it working. The workaround is long and nasty but it does work.


  1. BPC Admin
    1. Update Users "Data Access Profiles" with Write/Read members
    2. Update Dimension Owner hierarchy with Write members only
  2. Excel Input Template:
    1. Create BPC table showing given dimensions in a column (in my case “Cost Centre”) . The table will show ALL members (Read & Write) the user has access to.
    2. Create additional column with EPMMemberProperty for [Owner]. This will tell us which members are assigned to the user as “Write”
  3. So far so good. Not it gets little bit tricky as I had to write VBA to get everything working:

Private Sub Workbook_Open()

'Getting UserName value in a cell to be used with Filter
Dim BPCUsername As String
BPCUsername = Environ("Username")
Worksheets([sheet with table]).Range([specify cell]).Value = BPCUsername

'refreshing workbook to show correct (ones with access to ) members for the user

' filtering dimension table using BPC Username (=Owner) value
Worksheets([sheet with BPC table).Range([range of cells for your members]).AutoFilter Field:=5, Criteria1:="=*" & BPCUsername & "*", Operator:=xlAnd

' copy and paste as values the list of members. This information will be used later in dynamic dropdown list
Sheets([sheet with BPC table).Select
Range([range of cells for your members]).Select
Sheets([new blank sheet]).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets([main sheet where you want your use to be]).Select

End Sub

No the last thing to do is to create dynamic dropdown list:

  1. Define new range in Name Manager. I called it “Read_Members” and used formula = ‘[new blank sheet]'!$A$1:OFFSET(‘[new blank sheet]'!$A$1,COUNTA('[new blank sheet]'!$A$1:$A$500)-1,0)
    I used range for 500 rows but obviously its not fixed. Use as many as you need.
    * I've had to copy member values to new sheets, because when Range was linked to the actual table it was picking up all members (unfiltered = Read & Write) and we only want Write.
  2. On the main sheet we need to create dropdown list with our Write members. To do that pick cell -> Data Validation -> List and Source: =Read_Members
    Now after all that, we have a dropdown list with Read members only which users can chose from.
    Last thing to do is to link the value to the actual Input Table. I did it by simply linking EPMOlamMemberO formula to dropdown list cell value .

The only challenge I have left is: Environ("Username") returns the "owner of the PC" value not the current BPC Username. In other words, when I have other users logged in to BPC on my station (logged in via Xls or BPC website, makes no difference), the value is still my username. It wont make any difference for my process (for me 1 PC = 1 user) but it'd be nice to get the value correct!

If anyone has an idea, please share!

Show 4 Share
10 |10000 characters needed characters left characters exceeded

To get BPC username you can use cell with:



oh... I knew there must be an easier way! Thanks a lot!


There are a lot of other things that can be improved in your code....

For example you have a report with 3 columns:


Using API functions: GetDataTopLeftCell(Worksheet,ReportID) and GetDataBottomRightCell(Worksheet,ReportID)

You can calculate the range of first 2 columns.

Then you can read the range into array:

Dim varIDOWNERArr() as Variant

varIDOWNERArr = range(...)

Then loop this array to check for LIKE in the second column.

And don't use Copy Paste in VBA, use array assignment to range!


You Sir are a genius. A big thank you one more time!