Row-Level Security en Power BI: Guía completa
Implementa seguridad a nivel de fila para que cada usuario vea solo sus datos.
BI Analysts Team
Expertos en Datos e IA
¿Qué es Row-Level Security (RLS)?
RLS es una característica de Power BI que permite restringir el acceso a datos a nivel de fila según el usuario que visualiza el reporte. Cada usuario ve solo los datos que le corresponden.
¿Cuándo usar RLS?
- Vendedores que deben ver solo sus ventas
- Gerentes que ven su región
- Clientes en un portal con sus propios datos
- Cualquier escenario multi-tenant
Tipos de RLS
Estático
Roles definidos manualmente con filtros fijos:
- Rol 'Región Norte' → Filtro: Región = 'Norte'
- Rol 'Región Sur' → Filtro: Región = 'Sur'
Dinámico
Filtros basados en el usuario conectado:
- Rol único que filtra según USERNAME() o USERPRINCIPALNAME()
Implementación paso a paso
Paso 1: Diseñar el modelo
Necesitas una tabla que relacione usuarios con sus permisos:
Tabla: Seguridad_Usuario
| Email | Region | Rol |
|-------|--------|-----|
| juan@empresa.com | Norte | Vendedor |
| maria@empresa.com | Sur | Vendedor |
| carlos@empresa.com | * | Gerente |
Paso 2: Crear el rol en Power BI Desktop
- Modelado → Administrar roles
- Crear nuevo rol: 'Acceso por Region'
- Agregar filtro DAX a la tabla de hechos:
[Region] = LOOKUPVALUE(
Seguridad_Usuario[Region],
Seguridad_Usuario[Email],
USERPRINCIPALNAME()
) || LOOKUPVALUE(
Seguridad_Usuario[Region],
Seguridad_Usuario[Email],
USERPRINCIPALNAME()
) = '*'
Paso 3: Probar el rol
- Modelado → Ver como
- Selecciona el rol
- Ingresa el email del usuario a simular
- Verifica que los datos se filtran correctamente
Paso 4: Publicar y asignar
- Publica el reporte a Power BI Service
- Dataset → Seguridad
- Agrega miembros (usuarios o grupos) a cada rol
Patrones avanzados
RLS jerárquico
Un gerente ve sus datos más los de su equipo:
VAR UsuarioActual = USERPRINCIPALNAME()
VAR EmpleadosDelGerente =
CALCULATETABLE(
VALUES(Empleados[Email]),
PATHCONTAINS(Empleados[JerarquiaPath], UsuarioActual)
)
RETURN
[VendedorEmail] IN EmpleadosDelGerente
Múltiples dimensiones
Filtrar por región Y producto:
-- En tabla Ventas (filtro compuesto)
VAR UsuarioActual = USERPRINCIPALNAME()
VAR RegionesPermitidas =
CALCULATETABLE(
VALUES(Permisos[Region]),
Permisos[Email] = UsuarioActual
)
VAR ProductosPermitidos =
CALCULATETABLE(
VALUES(Permisos[Producto]),
Permisos[Email] = UsuarioActual
)
RETURN
[Region] IN RegionesPermitidas && [Producto] IN ProductosPermitidos
Mejores prácticas
1. Usa grupos de Azure AD
En lugar de asignar usuarios individuales, usa grupos:
- Más fácil de mantener
- Sincronizado con RRHH
- Auditable
2. Tabla de seguridad centralizada
Mantén una sola tabla con todos los permisos:
- Más fácil de auditar
- Un solo lugar para actualizar
- Puede venir de un sistema externo
3. Prueba exhaustivamente
- Prueba cada rol
- Prueba combinaciones de filtros
- Prueba con usuarios reales
4. Documenta los roles
Mantén documentación de:
- Qué hace cada rol
- Quién tiene acceso
- Reglas de negocio aplicadas
Limitaciones
- RLS no aplica en Desktop: Solo funciona en Service
- Export a Excel: Los datos exportados mantienen el filtro
- DirectQuery: RLS funciona pero puede afectar rendimiento
- Admin: Los admins del workspace ven todos los datos
Debugging
Si RLS no funciona como esperas:
- Verifica que el filtro DAX es correcto
- Confirma que USERPRINCIPALNAME() retorna el email esperado
- Revisa que las relaciones entre tablas son correctas
- Usa 'Ver como' para simular diferentes usuarios
Conclusión
RLS es fundamental para reportes empresariales donde diferentes usuarios necesitan ver diferentes datos. Implementándolo correctamente, puedes tener un solo reporte que sirva a toda la organización.
¿Necesitas ayuda implementando RLS? Contáctanos para una revisión de seguridad de tus reportes.
¿Te resultó útil este artículo?
Si necesitas ayuda implementando estas soluciones en tu empresa, estamos aquí para ayudarte.
Agenda una consulta gratuita