Seguridad a Nivel de Fila (RLS)
La seguridad a nivel de fila (Row-Level Security, RLS) controla qué datos puede ver cada usuario. Un vendedor solo ve sus ventas, un gerente regional solo ve su región.
¿Qué es RLS?
RLS filtra los datos antes de que lleguen al usuario. No se trata de ocultar visualizaciones sino de restringir las filas de datos que cada rol puede ver.
Usuario: Juan (Vendedor - Región Norte)
→ Ve solo: Ventas WHERE Región = "Norte"
Usuario: María (Gerente Nacional)
→ Ve todo: Ventas (sin restricción)
Crear roles en Power BI Desktop
Paso 1: Definir roles
- Ve a Modelado → Administrar roles.
- Clic en Crear para agregar un nuevo rol.
- Nombre del rol:
Vendedor Norte. - Selecciona la tabla sobre la que aplica el filtro.
- Escribe la expresión DAX del filtro.
Expresiones de filtro DAX
// Filtro simple por región
[Región] = "Norte"
// Filtro por país
[País] = "México"
// Filtro por departamento
[Departamento] = "Ventas"
// Filtro dinámico por email del usuario
[Email] = USERPRINCIPALNAME()
Paso 2: RLS dinámica con USERPRINCIPALNAME()
La forma más escalable es usar USERPRINCIPALNAME(), que devuelve el email del usuario autenticado:
// En la tabla Vendedores, filtrar por el email del usuario conectado
[Email] = USERPRINCIPALNAME()
Arquitectura
Tabla Vendedores:
| VendedorID | Nombre | Email | Región |
|-----------|-------------|---------------------|--------|
| 1 | Juan Pérez | juan@empresa.com | Norte |
| 2 | María López | maria@empresa.com | Sur |
| 3 | Carlos | carlos@empresa.com | Centro |
Tabla Ventas:
| VentaID | VendedorID | Monto | Fecha |
|---------|-----------|---------|------------|
| 101 | 1 | $5,000 | 2026-01-15 |
| 102 | 2 | $3,000 | 2026-01-16 |
Con la relación Vendedores[VendedorID] → Ventas[VendedorID] y el filtro RLS [Email] = USERPRINCIPALNAME() en la tabla Vendedores, cada vendedor solo ve sus ventas automáticamente.
Probar roles en Desktop
- Ve a Modelado → Ver como → Selecciona el rol que quieres probar.
- Opcionalmente, marca Otro usuario e ingresa un email.
- El reporte se muestra con los datos filtrados por ese rol.
- Haz clic en Detener ver para volver al modo normal.
Configurar RLS en Power BI Service
Asignar usuarios a roles
- Ve al workspace → Dataset → tres puntos → Seguridad.
- Selecciona el rol.
- Agrega los usuarios o grupos de seguridad (Azure AD).
Rol: Vendedor Norte
→ juan@empresa.com
→ pedro@empresa.com
Rol: Vendedor Sur
→ maria@empresa.com
Rol: Gerente Nacional
→ (sin filtro, ve todo)
Patrones avanzados de RLS
Jerarquía de gestión
Un gerente regional ve los datos de todos los vendedores de su región:
// Tabla Regiones con columna GerenteEmail
[GerenteEmail] = USERPRINCIPALNAME()
Con la relación Regiones → Vendedores → Ventas, el filtro se propaga automáticamente.
Múltiples roles por usuario
Si un usuario pertenece a varios roles, Power BI une (OR) los filtros:
Juan tiene rol "Norte" y "Centro"
→ Ve datos de Norte OR Centro
RLS con tabla de seguridad
Para control granular, crea una tabla de seguridad:
Tabla Permisos:
| Email | Región | Departamento |
|-------------------|--------|-------------|
| juan@empresa.com | Norte | Ventas |
| juan@empresa.com | Norte | Soporte |
| maria@empresa.com | Sur | Ventas |
| admin@empresa.com | * | * |
// Expresión DAX del rol:
[Email] = USERPRINCIPALNAME()
Con relaciones desde Permisos hacia las tablas de dimensión, cada usuario ve solo lo que tiene asignado.
Super usuario (admin)
// En la tabla de permisos, un usuario con "*" ve todo
VAR esAdmin =
COUNTROWS(
FILTER(
Permisos,
Permisos[Email] = USERPRINCIPALNAME() &&
Permisos[Región] = "*"
)
) > 0
RETURN
IF(esAdmin, TRUE(), [Región] = LOOKUPVALUE(...))
RLS y DirectQuery
RLS funciona tanto con Import como con DirectQuery. En DirectQuery, los filtros de RLS se traducen en cláusulas WHERE de SQL enviadas al servidor, lo cual es eficiente.
Buenas prácticas de RLS
- Usa USERPRINCIPALNAME() para RLS dinámica — evita crear un rol por usuario.
- Prueba siempre con "Ver como" antes de publicar.
- Documenta los roles y quién tiene acceso a qué.
- No des más acceso del necesario — principio de menor privilegio.
- Usa grupos de Azure AD en vez de usuarios individuales para facilitar la gestión.
Resumen
RLS controla qué filas ve cada usuario sin cambiar el reporte. USERPRINCIPALNAME() permite RLS dinámica basada en el email del usuario. Las relaciones del modelo propagan los filtros de seguridad automáticamente. Siempre prueba con "Ver como" antes de publicar.