Here's the solution I got from one of our PBI experts (not sure it will work embedded):
It may be possible to avoid using RLS, since the DAX function USERPRINCIPALNAME() works outside of RLS, but only as a measure. The idea is that:
- Load all user’s principal names into the model (in a separate table).
- Have a direct query Kusto function which returns all the data
- For each visual add a filter to it with: SELECTEDVALUE(Users[UserPrincipal]) = USERPRINCIPALNAME()
- This will cause the Kusto function to be modified by adding | where UserPrincipal == “<Filled in based on user viewing the report>”
- User sees and loads only their data.
Another option might be the upcoming Dynamic Parameters feature that PBI are working on, that will allow you to bind a slicer/filter to a Parameter, thus affecting the data source query. Again, I'm not sure if/when it will work for Embedded PBI.