cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Cuadro combinado dinámico, Seleccionar todo o Usuario activo

Hola a todos,

Tenga en cuenta que soy nuevo en PowerBI.

Estoy tratando de crear un filtro que se llene basado en UserPrincipalName() que estaba buscando en RLS, pero creo que resuelve mi problema solo parcialmente.

Básicamente quiero para:

  • Líder de equipo (Admin) para poder filtrar los registros por All / Cada custodio separado.
  • Custodio para poder filtrar por todo/él mismo

Tengo una tabla principal que contiene algunos elementos, incluida la columna Main[Custodian], así como creé UserTable que contiene información sobre UserTable[UserDomain] que contiene los mismos valores de tipo que Main[Custodian], además tengo UserTable[UserEmail] y UserTable[UserRole], que podrían estar vinculados a UserPrincipalName() & Admin o Custodian Role.

No estoy más allá de usar dos informes separados, esto significa que el informe Leader ni siquiera necesita UserTable.

Pero no estoy seguro de cómo lograr un filtro dinámico All o Active para Custodian, lo mejor que podría hacer es solo por custodio activo con UserTable, Rol con filtrado por UserPrincipalName(), y finalmente crear una relación entre UserTable[UserDomain] y Main[Custodian], pero esto solo permitiría al usuario filtrar por sí mismo y no seleccionar todo y necesito ambas opciones, pero sin que sean capaces de filtrar por otro usuario concreto para que.

En resumen

'Admin' -> Mostrar estadísticas de todo el equipo, mostrar estadísticas de Custodio A, mostrar Custodian B statistc, etc.

'Custodio A' -> Mostrar estadísticas de todo el equipo, mostrar estadísticas del Custodio A.

'Custodio B' -> Mostrar estadísticas de todo el equipo, mostrar estadísticas del Custodio B.

Estaba pensando en una columna dinámica que basada en UserPrincipalName(), UserTable[UserEmail] obtenga UserTable[UserDomain] y si UserTable[UserDomain] = Main[Custodian] entonces Main[Custodian] else "Anonymous"<- pero tal cosa parece imposible (supongo que no hay posibilidades de columna dinámica).

¿Es posible filtrar por usuario activo y todo? Si es así, ¿alguien podría ayudar?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

De acuerdo

Lo resolví pero utilicé algunos otros medios

primero. Creé una tabla en SQL Server, donde configuramos cada usuario disponible, su correo electrónico y rol (Administrador o Custodio) <: esto significa que los usuarios deben agregarse tanto al rol de usuario en Power BI como en la tabla SQL.

2º Creé un procedimiento que crea UserTable (basado en otras tres tablas que uso en este modelo, por lo que para algunos esto podría necesitar cambiar 😉.

SELECT DISTINCT(Table1.ResponsibleCustodian) AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table2.CompletedBy) AS 'FilterValue',Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table2 Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table3.ValidatedByDomain) AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin'
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain
    UNION 
SELECT DISTINCT(Table1.ResponsibleCustodian) AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' AND Table1.ResponsibleCustodian = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table2.CompletedBy) AS 'FilterValue', Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table2 Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian'  AND Table2.CompletedBy = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table3.ValidatedByDomain) AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' AND Table3.ValidatedByDomain = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain
    UNION 
SELECT 'All Custodians' AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT 'All Custodians' AS 'FilterValue',  Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Mailbox Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT 'All Custodians' AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain

Así que basado en La tabla de acceso con columnas UserDomain, UserEmail, UserRole obtengo UserTable en PowerBI con columnas

  • FilterValue: valor mostrado en el cuadro combinado
  • UserDomain - Valor en relación con la columna Custodio correspondiente de la tabla principal
  • UserEmail: columnas con todos los usuarios de correo electrónico en agrupación, es decir, filtradas por la configuración del filtro para el rol de usuario.
  • UserRole - que en realidad es redundand, sobrante después de juguetear 🙂

3rd Después de tener esos necesito crear un rol de usuario que obtendrá los registros de usuario actuales de UserTable para:

Custodio será su dominio y 'Todos los custodios' (incluido él) El administrador tendrá acceso a todos los custodios separados (y marque todas las opciones en el cuadro combinado, que también se mostrará para los custodios, pero vivirán con eso).

Después de publicar el informe y agregar personas a la seguridad, se muestra de la manera que quería, aunque no significa que esté seguro. En mi caso, realmente no necesitaba ser seguro, ya que era una solicitud TL, pero cada custodio tiene acceso a estos datos de cualquier manera.

View solution in original post

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

De acuerdo

Lo resolví pero utilicé algunos otros medios

primero. Creé una tabla en SQL Server, donde configuramos cada usuario disponible, su correo electrónico y rol (Administrador o Custodio) <: esto significa que los usuarios deben agregarse tanto al rol de usuario en Power BI como en la tabla SQL.

2º Creé un procedimiento que crea UserTable (basado en otras tres tablas que uso en este modelo, por lo que para algunos esto podría necesitar cambiar 😉.

SELECT DISTINCT(Table1.ResponsibleCustodian) AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table2.CompletedBy) AS 'FilterValue',Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table2 Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table3.ValidatedByDomain) AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Admin'
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain
    UNION 
SELECT DISTINCT(Table1.ResponsibleCustodian) AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' AND Table1.ResponsibleCustodian = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table2.CompletedBy) AS 'FilterValue', Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table2 Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian'  AND Table2.CompletedBy = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT DISTINCT(Table3.ValidatedByDomain) AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' AND Table3.ValidatedByDomain = ACCS.UserDomain
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain
    UNION 
SELECT 'All Custodians' AS 'FilterValue', Table1.ResponsibleCustodian AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table1 Table1 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT 'All Custodians' AS 'FilterValue',  Table2.CompletedBy AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Mailbox Table2 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain =  ACCS.UserDomain
    UNION
SELECT 'All Custodians' AS 'FilterValue', Table3.ValidatedByDomain AS 'UserDomain', GetMail.UserEmail, ACCS.UserRole FROM db_mySchema.Table3 Table3 INNER JOIN db_mySchema.AccessTable ACCS ON ACCS.UserRole = 'Custodian' 
    INNER JOIN db_mySchema.AccessTable GetMail ON GetMail.UserDomain = ACCS.UserDomain

Así que basado en La tabla de acceso con columnas UserDomain, UserEmail, UserRole obtengo UserTable en PowerBI con columnas

  • FilterValue: valor mostrado en el cuadro combinado
  • UserDomain - Valor en relación con la columna Custodio correspondiente de la tabla principal
  • UserEmail: columnas con todos los usuarios de correo electrónico en agrupación, es decir, filtradas por la configuración del filtro para el rol de usuario.
  • UserRole - que en realidad es redundand, sobrante después de juguetear 🙂

3rd Después de tener esos necesito crear un rol de usuario que obtendrá los registros de usuario actuales de UserTable para:

Custodio será su dominio y 'Todos los custodios' (incluido él) El administrador tendrá acceso a todos los custodios separados (y marque todas las opciones en el cuadro combinado, que también se mostrará para los custodios, pero vivirán con eso).

Después de publicar el informe y agregar personas a la seguridad, se muestra de la manera que quería, aunque no significa que esté seguro. En mi caso, realmente no necesitaba ser seguro, ya que era una solicitud TL, pero cada custodio tiene acceso a estos datos de cualquier manera.

Helpful resources

Announcements
September Update

Check it Out!

Click here to learn more about the September 2022 updates!

Power BI Show episode 9

The Power BI Community Show

Watch the playback when Priya Sathy and Charles Webb discuss Datamarts! Kelly also shares Power BI Community updates.

Power BI Dev Camp Session 25

Ted's Dev Camp - August 25, 2022

Watch Session 25 of Ted's Dev Camp.

Top Solution Authors