Tricky Slice of people based on info in another table

Hello everybody,

Iโ€™ve been pulling my hair for a long time now, and havenโ€™t found the adequate help among the existing topics here. So Iโ€™m asking for help on my specific problem.

  • Table โ€œPersonโ€ : list of all people in the company (many columns, among which key and email)
  • Table โ€œRoleโ€ : I have a list of existing roles in my company (2 columns : Key and name of each role)
  • Table โ€œPerson Roleโ€ : Since 1 person can have several role, and 1 role can be populated on many people, I created a list of all combination between people and their role(s) (3 column : link key, person key and role key)

My first need :
I want to be able to assign each person to his/her Manager

when I fill the column โ€œPersonโ€[Manager], I need to display only the real Managers of my company. So I guess I need a filter or a slice for that.
Basically, I need to lookup in the table โ€œPerson roleโ€ and show only the Person Key where [Role]=โ€œManagerโ€
So easy with SQL, but Iโ€™m hitting a wall here

My second need
Also, I want to be able to show his/her full team to each Manager. Therefore I need to be able to select all the people for with the assigned manager is the current user.
I guess I need to link with the USEREMAIL, but in my user table, the information stored for Manager is the Key. How can I do ?

Any help would be much appreciated I going crazy with all thisโ€ฆ

0 10 781
10 REPLIES 10

Whilst having a 3 table setup for this situation may meet a standard of relational databases, you are certainly making it harder on yourself to do these sort of things in Appsheet. You could set it up with just 2 tables, Person and Role, and include a EnumList column ,with base-type Ref, in Person table to choose the Roles for each Person. With this way, you can get the managers by:

FILTER( Person ,IN( โ€œManagerโ€ , [Roles][Role] ) )

Also in the Person table I would include a Ref column which points back to the Person table, to hold each Personโ€™s manager. At which point youโ€™d just need to manually setup a REF_ROWS Virtual Column (since they arenโ€™t automatic for self-referenced situations like this). And thatโ€™ll be the list of team members per each manager.

Just some thoughts, just another option.


Otherwise, with your current setup, to get a list of managers you could do:

FILTER( Person , ISNOTBLANK( SELECT( [Related Person Roles][key] , [Role].[Role] = โ€œManagerโ€ ) ) )

or perhaps:

FILTER( Person , IN( โ€œxxxโ€ , [Related Person Roles][Role] ) )

โ€ฆwhere โ€œxxxโ€ is the key value for the manager Role.


To get the Person record that matches the logged in user, you can use:

ANY( FILTER( Person , [Email] = USEREMAIL() ) )

Thanks Marc for your quick answer.
I must be doing something wrong. As advised, I set the role column in my person table (enumlist with base-type Ref)

However, when I go to the app, I get a single choice drowpdown list. I canโ€™t get it to let me chose multiple roles.


What did I do wrong ?

I also had the Manager ref column in my Person table. However, when I do this, I get all person in my company.
Where do i put the filter formula you gave me so I only get Manager listed ? In which setting ?

Thank you so much for your help.

Iโ€™d assume youโ€™re looking at the wrong column (or an old app version). Iโ€™ve never before seen Appsheet show an EnumList as an Enum before.

Hi Marc.
Sorry, I uploaded the wrong screenshot. Here is what I have with the settings I applied.
3X_a_e_aef55719eef9679b34e88a373469ec4b5dfd57f0.png
I evnetually get the multiple choice.

But when I clic on the โ€˜+โ€™, the list is empty.

Settings of my column are


I dont quite get why I get the warning, since the base type details show the correct Role table

About the Valid_If constraint, according to my table structure, Iโ€™ve tried this formula :

But to no avail, the liste still contains all peoples from my person table, and not only Managers
Here is my Role table structure (if it helps)


What do I do wrong ?

Last question :
I also want to limit some action due to Role the user has.
Do I do that with this kind of formula (FILTER) or is it better to create a slice of Person table for each role, and then compare USEREMAIL() to email from the adequate slices ?
(some access can be allowed for several roles, for example : managers, HR people and app admin)

You have to manually set a Valid_if for Enum(List) columns in this case, they wonโ€™t auto-pull the list like a basic Ref column does. Simply:

Role[Key]

I canโ€™t tell. Use Test from expression assistant to ensure expressions are producing the correct results.

I just tried your solution as shown here in the settings

But for a user, which has no role yet, the list stays terribly empty
And for an existing user which already have a role, I see that i get a multiple checkbox list.
But I only see the existing selection, others are not shown

As for testing my formula, it seems to get me the correct results. At least, when I use Test from expression assistant, I only get 3 keys (since there are only three managers yet in my dataset).


Iโ€™m lost hereโ€ฆ

Hi Marc.
OK, first thing is now working : roles are displayed in my Enumlist.
I donโ€™t really know how I managed it (since I did many tweaks here and there in the app), but it is all good. I get my role, with multiple choice checkboxes.

Unfortunately, Iโ€™m still stuck with the Manager thingโ€ฆ still not displaying what I need.

3X_b_b_bb1311081159152ca3df6424b08f79365746b5f4.png

Here are the settings



Any help appreciated on what I did wrong in the settings.

โ€œMCโ€ is the key value for the โ€œManagerโ€ Role, yes?

Perhaps you do not have any Person records set as Managers?

Yes it is.

I got 3 people with this Role in my dataset yet

Iโ€™m thinking of it now : couldnโ€™t I put an enum column (base-type ref) for the Manager column as I did with the Role column ?
Iโ€™d have a single choice dropdown listing the adquate person. No ?

Or would this render useless my virtual column that calculate the related persons (member of each managerโ€™s team)

I hope it is understandable ^^

Top Labels in this Space