Forum Discussion
Filtro de usuario predeterminado de Power BI sin RLS
Hola a todos
Esto es en relación con el vídeo compartido por Injae Park.
Tengo requisitos exactamente similares. Sin embargo, exploré mucho y probé diferentes caminos, pero no pude lograr lo mismo.
He revisado algunas discusiones sobre esto. De nuevo, con los marcadores requiere que los usuarios configuren el marcador en servicio. Y como desarrollador no podría configurarlo para los usuarios. Tengo una lista amplia de usuarios y no todos tienen acceso al servicio.
Preguntad si alguno de vosotros puede compartir vuestra opinión si habéis utilizado esta técnica. Incluso agradecería que pudieras compartir un archivo PBIx ficticio que aborde esta técnica.
Los slicers de Power BI no soportan selecciones dinámicas por defecto basadas en el usuario que ha iniciado sesión. Aunque tu medida usando USERPRINCIPALNAME() funciona para filtrar visuales de forma condicional, los propios slicers no preseleccionarán un valor automáticamente al cargar el informe.
Usa marcadores para valores personales predeterminados:
Pon el slicer con el nombre de un usuario.
Crea un marcador personal y haz que el usuario lo guarde como su vista predeterminada.
Esto sigue requiriendo una configuración única por parte de cada usuario , pero funciona en aperturas posteriores.
Saludos
Prasad
8 Replies
- Syndicate_Admin
Administrator
Hola @prasaddn ,
Gracias por ponerte en contacto con el Foro de la Comunidad de Microsoft.
Los slicers nativos de Power BI no soportan una selección dinámica predeterminada basada en el usuario iniciado sesión (por ejemplo, a través de USERPRINCIPALNAME()), aunque esa función funciona perfectamente para filtrar condicionalmente visuales/medidas. Los propios slicers siguen siendo "pegajosos" como última publicación o última selección personal a menos que uses marcadores o alguna solución alternativa.
Por favor, prueba a continuación soluciones alternativas sin RLS.
1. Si todos los usuarios abren la misma vista inicial no personalizada, puedes publicar el informe con los filtros deseados y luego confiar en filtros persistentes en Servicio o Restablecer a los valores predeterminados. O añadir un Marcador + Botón que reinicie la página a la vista predeterminada que elijas.
2. Pide a cada usuario que seleccione su nombre en el slicer una vez, luego guarde como marcador personal y establezca como vista predeterminada. Los marcadores personales persisten en navegadores/dispositivos y no necesitan RLS.
3. Si quieres un subconjunto por defecto como los territorios del usuario actual que solo se aplique cuando los slicers no están filtrando activamente, puedes usar un grupo de cálculo para inyectar filtros hasta que exista una selección de slicers.
Por favor, prueba con los enlaces de abajo.
Resumen de los marcadores en los informes de servicio de Power BI - Power BI | Microsoft Learn
Configurar los filtros predeterminados en Power BI - Comunidad Microsoft Fabric
Cómo seleccionar dinámicamente los valores por defecto que no... - Comunidad Microsoft Fabric
Por favor, consulta abajo el enlace del foro de ideas y vota positivo la idea adecuada relacionada con tu escenario.
Cambiar dinámicamente entre marcadores según sele... - Comunidad Microsoft Fabric
Búsqueda - Comunidad Microsoft Fabric
Si no es así, te recomendamos enviar tus comentarios e ideas detalladas a través de los canales oficiales de Microsoft, como Microsoft Fabric Ideas. Los comentarios enviados a través de estos canales son revisados frecuentemente por los equipos de producto y pueden contribuir a mejoras significativas.
https://ideas.fabric.microsoft.com/ideas/search-ideas/
Espero que esta información te ayude. Por favor, házganos saber si tiene más dudas.
Saludos
Dinesh
- Syndicate_Admin
Administrator
Gracias @v-Dineshya por tomarte el tiempo y compartir tus pensamientos. Exploraré los enlaces y opciones que se ofrecen para ver qué se ajusta mejor a mis necesidades.
- Syndicate_Admin
Administrator
Hola @prasaddn ,
Gracias por la actualización. Como mencionaste en tu respuesta anterior, estás trabajando en la solución proporcionada, ¿podrías por favor proporcionar el tiempo estimado de llegada (ETA) para este hilo.
Saludos
Dinesh
- Syndicate_Admin
Administrator
Hola Prasad,
Tienes razón en que los slicers estándar de Power BI no soportan nativamente los valores por defecto dinámicos. Sin embargo, puedes lograr el "método Injae Park" sin que los usuarios tengan que configurar marcadores personales usando un Filtro de Nivel Visual en el nuevo Botón Slicer.
Este enfoque permite que el informe "preseleccione" al usuario en función de su correo electrónico de inicio de sesión tan pronto como se abre el informe.
Paso 1: Crear la medida "Coincidencia de Usuario"
Primero, necesitamos una medida que identifique si el usuario en tus datos coincide con la persona que está viendo el informe.
IsLlogedInUser =
VAR _CurrentUser = USERPRINCIPALNAME()
DEVOLUCIÓN
IF( SELECTEDVALUE('AccessTable'[Email]) = _CurrentUser, 1,
0 )
(Sustituye 'AccessTable'[Email] por la tabla y columna que contienen los correos de acceso de tus usuarios).
Paso 2: Configurar el Button Slicer
En lugar del slicer tradicional, usa el visual del Nuevo Slicer de Botones:
Añade tu nombre de usuario o campo de correo electrónico al Button Slicer.
Abre el panel de Filtros mientras seleccionas el slicer.
Arrastra la medida IsLlogedInUser a la sección "Filtros en este visual".
Pon el filtro en 1 y haz clic en Aplicar filtro.
Paso 3: Por qué esto funciona en tu escenario
No se requiere ninguna acción del usuario: Como el filtro se aplica a la imagen en sí, el segmentador solo mostrará (y por tanto por defecto) el nombre del usuario iniciado sesión en el momento en que abra el informe.
Escalabilidad: Esto funciona para 10 o 10.000 usuarios porque depende de USERPRINCIPALNAME() en lugar de configuraciones manuales.
Sin marcadores de servicio: Esto es una solución del lado del desarrollador. Funciona perfectamente para usuarios que solo tienen acceso a "Visor" y no pueden crear sus propios marcadores.
Consejo profesional:
Si quieres que los usuarios puedan ver los datos de otras personas tras la carga inicial, puedes añadir un botón de "Reiniciar" o un segmentador secundario que no esté filtrado por esta medida.
Si esto responde a tu requisito de un predeterminado dinámico sin marcadores manuales, ¡márcalo como una "Solución aceptada" para que otros miembros de la comunidad puedan encontrarla!
Saludos
Vishwanath
- Syndicate_Admin
Administrator
Gracias @AshokKunwar por la respuesta. Déjame revisar las ideas sugeridas y volveré en breve (1 o 2 días). Saludos, Prasad
- Syndicate_Admin
Administrator
Hola @prasaddn
Tu problema está resuelto ✅ o no ❌
Si esto responde a tu requisito de un predeterminado dinámico sin marcadores manuales, ¡márcalo como una "Solución aceptada" para que otros miembros de la comunidad puedan encontrarla!
Saludos
Vishwanath
- Syndicate_Admin
Administrator
Suponiendo que tu requisito sea predeterminar la selección en un segmentador 'Usuario' basado en el usuario iniciado sesión, y sin usar RLS ni boomarks personales.
Me gustaría sugerir una solución alternativa, si no te importa
Paso 1: añadir una fila adicional en tu tabla de acceso para el usuario iniciado sesión y
Si te parece bien mantener la selección predeterminada en el slicer como 'Yo', entonces esta solución podría funcionarte.
Paso 2 - Crear una medida para filtrar al usuario iniciado sesión desde el segmentador de usuario
RemoveLoggedInUser = VAR __AllUsers = ALL(DimAccess[User UPN]) VAR __LoggedInUser = USERPRINCIPALNAME() VAR __UserInCurrentRow = SELECTEDVALUE( DimAccess[User UPN], "[email protected]" ) VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers) VAR __Result = IF( __LoggedInUserNotinTheAccessTable, 1, IF( __LoggedInUser = __UserInCurrentRow, 0, 1 ) ) RETURN __ResultAñade esta medida como filtro de nivel visual en el segmentador de usuario
Paso 3 - Crear un grupo de cálculo para aplicar el filtro de usuario iniciado en sesión
ReplaceMe = IF( ISSELECTEDMEASURE([RemoveLoggedInUser]), SELECTEDMEASURE(), VAR __AllUsers = ALL(DimAccess[User UPN]) VAR __selectedUser = SELECTEDVALUE( DimAccess[User UPN], "[email protected]" ) VAR __loggedInUser = USERPRINCIPALNAME() VAR __loggedInUserValue = CALCULATE( SELECTEDMEASURE(), KEEPFILTERS(DimAccess[User UPN] = __loggedInUser), REMOVEFILTERS(DimAccess) ) VAR __selectedUserValue = SELECTEDMEASURE() VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers) VAR __LoggedInUserNotinTheAccessTableValue = CALCULATE( SELECTEDMEASURE(), REMOVEFILTERS(DimAccess) ) VAR __Result = IF( __LoggedInUserNotinTheAccessTable && __selectedUser = "loggedInUser", __LoggedInUserNotinTheAccessTableValue, IF( __selectedUser = "loggedInUser", __loggedInUserValue, __selectedUserValue ) ) RETURN __Result )Añadir esta columna de grupo de cálculo como filtro a nivel de informe
Cambia el tipo de selección del slicer como "Single Select".
Mantén la selección predeterminada en el slicer como "Yo".
Cuando user4 inicia sesión, los datos en la tabla visual se filtran con user4 y
Suponiendo que tu requisito sea predeterminar la selección en un segmentador 'Usuario' basado en el usuario iniciado sesión, y sin usar RLS ni boomarks personales.
Me gustaría sugerir una solución alternativa, si no te importa
Paso 1: añadir una fila adicional en tu tabla de acceso para el usuario iniciado sesión y
Si te parece bien mantener la selección predeterminada en el slicer como 'Yo', entonces esta solución podría funcionarte.
Paso 2 - Crear una medida para filtrar al usuario iniciado sesión desde el segmentador de usuario
RemoveLoggedInUser = VAR __AllUsers = ALL(DimAccess[User UPN]) VAR __LoggedInUser = USERPRINCIPALNAME() VAR __UserInCurrentRow = SELECTEDVALUE( DimAccess[User UPN], "[email protected]" ) VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers) VAR __Result = IF( __LoggedInUserNotinTheAccessTable, 1, IF( __LoggedInUser = __UserInCurrentRow, 0, 1 ) ) RETURN __ResultAñade esta medida como filtro de nivel visual en el segmentador de usuario
Paso 3 - Crear un grupo de cálculo para aplicar el filtro de usuario iniciado en sesión
ReplaceMe = IF( ISSELECTEDMEASURE([RemoveLoggedInUser]), SELECTEDMEASURE(), VAR __AllUsers = ALL(DimAccess[User UPN]) VAR __selectedUser = SELECTEDVALUE( DimAccess[User UPN], "[email protected]" ) VAR __loggedInUser = USERPRINCIPALNAME() VAR __loggedInUserValue = CALCULATE( SELECTEDMEASURE(), KEEPFILTERS(DimAccess[User UPN] = __loggedInUser), REMOVEFILTERS(DimAccess) ) VAR __selectedUserValue = SELECTEDMEASURE() VAR __LoggedInUserNotinTheAccessTable = NOT (__LoggedInUser IN __AllUsers) VAR __LoggedInUserNotinTheAccessTableValue = CALCULATE( SELECTEDMEASURE(), REMOVEFILTERS(DimAccess) ) VAR __Result = IF( __LoggedInUserNotinTheAccessTable && __selectedUser = "loggedInUser", __LoggedInUserNotinTheAccessTableValue, IF( __selectedUser = "loggedInUser", __loggedInUserValue, __selectedUserValue ) ) RETURN __Result )Añadir esta columna de grupo de cálculo como filtro a nivel de informe
Cambia el tipo de selección del slicer como "Single Select".
Mantén la selección predeterminada en el slicer como "Yo".
Cuando user4 inicia sesión, los datos en la tabla visual se filtran con user4 y
User4 sigue teniendo la opción de cambiar a otros usuarios.
¡Espero que esto ayude!
Puedes descargar el archivo desde esta página
Conéctate en LinkedIn
Visita mi página web para leer blogs sobre Power BI y Microsoft Fabric: https://www.techietips.co.in/
¿He respondido a tu pregunta? ¡Marca mi publicación como solución! Si te he ayudado, haz clic en el botón de Pulgar arriba para dar Kudos.
¡Orgulloso de ser un Super Usuario!
- Syndicate_Admin
Administrator
Los slicers de Power BI no tienen una verdadera "selección dinámica por defecto" (no seleccionan automáticamente un valor solo porque USERPRINCIPALNAME() coincida). La solución práctica es filtrar la imagen del slicer para que solo muestre al usuario iniciado sesión cuando se abre el informe. Eso hace que parezca que los seleccionó por defecto.
Crea una medida así (ajusta los nombres de las columnas):
IsLoggedInUser = VAR u = USERPRINCIPALNAME() RETURN IF( SELECTEDVALUE(DimUsers[UPN]) = u, 1, 0 )Luego selecciona tu User slicer (funciona mejor con el nuevo Button slicer), abre el panel de Filtros → Filtros en este visual, deja IsLlogedInUser allí y ponlo en 1. Ahora el segmentador solo mostrará al usuario actual en carga, sin necesidad de marcadores personales ni RLS.
Si aún quieres que los usuarios puedan ver opcionalmente a otros, puedes ofrecer una experiencia de "Restablecer / Mostrar a todos los usuarios" (por ejemplo, una página separada o un enfoque de grupo de cálculo basado en interruptores), pero el comportamiento principal de "por defecto para mí" se logra con ese filtro a nivel visual.