update: data is in a google sheet.
Security filter on a table. Which expression is more efficient, or does it matter?
LOOKUP(USEREMAIL(), “Users”, “USER_EMAIL”, "PI_NO”)>=15
My User[PI_NO]>=15
where slice My User only contains the current user’s info based on Row Filter: (USEREMAIL() = [USER_EMAIL])
Of course, this assumes that I wrote the expressions correctly.
This article seems to indicate that security filters are applied before sending the data to the app. I would assume that the calculation of which records are in the slice, would be part of the app’s calculation after the security filter is applied. So my guess would be to use your LOOKUP() expression. “Guess” being a key word here though. Would be very interested in other peoples’ responses as well.
@Marc_Dillon You’re right when you say
But you actually CAN use slices inside the security filter formula - AppSheet has handled all the order of operations to make sure everything is handled correctly and the appropriate security criteria is followed - even if there’s slices and virtual columns that need to be calculated first.
For instance, the following security filter is on the Clients table of my Time-Tracking app
You can see I make user of “Current_User” - a slice of the User table - and a column called [Auto_Status] (which is a virtual column). So when loading the app, the following must happen:
But it get’s my point across.
I should also point out that in my case, I need all the records in the user table so I can accomplish other tasks.
I would do it in this way…
First use a security filter with your “My User” table as USEREMAIL()=[User Email].
In the other table use…
ANY(My User[PI_NO])>=15.
Because you have only one record in “My User” table, ANY will pick that record.
User | Count |
---|---|
44 | |
29 | |
22 | |
20 | |
14 |