Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola
Tengo un modelo .pbix de prueba creado y estoy tratando de implementar la seguridad de nivel de fila, pero estoy en problemas al pasar varios filtros a través de DAX en Administrar roles. Mi modelo de datos tiene este aspecto:
Puedo filtrar correctamente el primero con el siguiente código:
También en forma de texto:
[Perfil] En
SELECTCOLUMNS(
FILTER('UserProfileAbbrP&L',
'UserProfileAbbrP&L'[Usuario] á USERPRINCIPALNAME()
),
"Perfil", [Perfil]
)
Pero estoy sacando el mejor método para filtrar la tabla AbbrP&L:
También en forma de texto:
[Abbr P&L] En
SELECTCOLUMNS(
FILTER('ProfileAbbrP&L',
'ProfileAbbrP&L'[Cuenta de Abbr P&L])
) EN
SELECTCOLUMNS(
FILTER('UserProfileAbbrP&L',
'UserProfileAbbrP&L'[Usuario] á USERPRINCIPALNAME()
),
"Abbr P&L", [Abbr P&L]
)
¿Qué me estoy perdiendo? Creo que necesito mantener la estructura tal cual (con la tabla De puente de perfil calculada) porque habrá varias instancias de Profile en las tablas UserProfile & ProfileAbbrP&L, pero estoy abierto a sugerencias. También me gustaría evitar pasar aplicando filtros en ambas direcciones si es posible.
Gracias de antemano,
Tom
Solved! Go to Solution.
En realidad, no necesita que la tabla de seguridad se una a su modelo. Sólo tiene que utilizar una medida para leer el USERPRINCIPALNAME() y crear la lista de 'AbbrP&L'[Abbr P&L] cuentas que el usuario puede ver. Un cambio que necesitará es hacer la unión entre UserProfileAbbrP&L y Profile Bridge bidireccional.
A continuación, el filtro en la tabla AbbrP&L se ve así.
'AbbrP&L'[Abbr P&L] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=USERPRINCIPALNAME())
He adjuntado mi copia actualizada de su archivo para que lo mire.
Su ProfileAbbrP&L ya contiene las cuentas y los paquetes acumulativos que un perfil puede ver. Sólo tiene que mover los rollups a la tabla AbbrP&L para que tenga este aspecto:
Puede quitar las tablas acumulativas del lado del perfil y volver a establecer UserProfileAbbrP&L > AbbrProfileBridge en bidireccional. Entonces tu medida de filtrado se ve así.
VAR _UPN = USERPRINCIPALNAME()
RETURN
'AbbrP&L'[Abbr P&L] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=_UPN)
||
'AbbrP&L'[Rollup] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=_UPN)
El modelo termina pareciéndose así.
Y el RLS mostrará todas las cuentas o rollups asignados al perfil en la tabla [ProfileAbbrP&L]:
En realidad, no necesita que la tabla de seguridad se una a su modelo. Sólo tiene que utilizar una medida para leer el USERPRINCIPALNAME() y crear la lista de 'AbbrP&L'[Abbr P&L] cuentas que el usuario puede ver. Un cambio que necesitará es hacer la unión entre UserProfileAbbrP&L y Profile Bridge bidireccional.
A continuación, el filtro en la tabla AbbrP&L se ve así.
'AbbrP&L'[Abbr P&L] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=USERPRINCIPALNAME())
He adjuntado mi copia actualizada de su archivo para que lo mire.
Gracias por la respuesta y la educación, @jdbuchanan71! Sin embargo, un elemento del filtro no parece funcionar correctamente. El perfil "Tiendas minoristas" debe filtrarse a Tiendas minoristas y Ventas netas según la tabla ProfileAbbrP&L, ¿necesito modificar el enfoque de alguna manera?
No hay ninguna entrada de 'Ventas netas' en la tabla 'AbbrP&L' por lo que no aparece.
Esto desafortunadamente añade otra capa de complejidad; Había dejado mi tabla acumulativa abbrP&L para simplificar, pero también tendré que filtrar esa tabla. No puedo aplicar el filtrado bidireccional de la tabla de usuario dos veces, lo que me lleva con una de las dos opciones:
Me gustaría averiguar la opción 2, ¿es esto en absoluto posible?
Se ha actualizado .pbixy la captura de pantalla del modelo de datos a continuación:
Su ProfileAbbrP&L ya contiene las cuentas y los paquetes acumulativos que un perfil puede ver. Sólo tiene que mover los rollups a la tabla AbbrP&L para que tenga este aspecto:
Puede quitar las tablas acumulativas del lado del perfil y volver a establecer UserProfileAbbrP&L > AbbrProfileBridge en bidireccional. Entonces tu medida de filtrado se ve así.
VAR _UPN = USERPRINCIPALNAME()
RETURN
'AbbrP&L'[Abbr P&L] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=_UPN)
||
'AbbrP&L'[Rollup] IN
CALCULATETABLE(
VALUES('ProfileAbbrP&L'[Abbr P&L Account]),'UserProfileAbbrP&L'[User]=_UPN)
El modelo termina pareciéndose así.
Y el RLS mostrará todas las cuentas o rollups asignados al perfil en la tabla [ProfileAbbrP&L]:
Esto funciona muy bien, gracias @jdbuchanan71 ! Modifiqué ligeramente para filtrar la tabla Cuentas (ya que también tendré que filtrar cuentas). No puedo esperar para construirlo en mi modelo real.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |