Controla qué datos ve cada usuario con Row-Level Security: desde el RLS estático más sencillo hasta patrones dinámicos escalables para grandes organizaciones
IntermedioAvanzado
🛡️
¿Qué es RLS?
Seguridad a nivel de fila en Power BI
Row-Level Security (RLS) es el mecanismo de Power BI que permite restringir qué filas de datos ve cada usuario. A diferencia de restringir el acceso a páginas del informe (que es solo visual), RLS opera a nivel del modelo de datos: el motor solo evalúa las filas que el usuario tiene permiso para ver.
Cómo funciona internamente:
Se definen roles con filtros DAX que determinan qué filas son visibles
Cada usuario (o grupo) se asigna a uno o más roles en el Power BI Service
Cuando el usuario abre el informe, el motor aplica los filtros del rol como contexto de filtro inicial
Todas las medidas DAX se evalúan respetando esos filtros — el usuario no puede ver datos que no le corresponden
⚠️ Ojo con esto: RLS solo funciona cuando el informe está publicado en Power BI Service y los usuarios acceden con sus cuentas. En Power BI Desktop, el creador del informe siempre ve todos los datos (a menos que use "Ver como rol" para probar).
🔐
RLS Estático
Roles con filtros hardcodeados
En el RLS estático, el filtro DAX está codificado directamente en el rol. Cada rol permite ver solo ciertos valores de una columna específica. Es sencillo de implementar pero difícil de mantener si tienes muchos usuarios o si los grupos de datos cambian con frecuencia.
Cómo crear roles en Power BI Desktop:
Ve a la pestaña "Modelado" → "Administrar roles"
Haz clic en "Crear"
Asigna un nombre al rol (ej: "Ventas España")
Selecciona la tabla a filtrar
Escribe la expresión DAX del filtro
// Rol "Ventas España": solo ve ventas de España
// Filtro DAX en la tabla DimTienda:
[Pais] = "España"
// Rol "Región Norte": solo ve tiendas de Asturias, Cantabria y País Vasco
// Filtro DAX en DimTienda:
[Comunidad] IN {"Asturias", "Cantabria", "País Vasco"}
// Rol "Categoría Electrónica": solo ve productos de electrónica
// Filtro DAX en DimProducto:
[Categoria] = "Electrónica"
Cuándo usar RLS estático:
Pocas regiones o departamentos (menos de 10-15)
Los grupos de datos no cambian frecuentemente
Cada usuario pertenece a un solo grupo
Prototipado rápido de seguridad
⚡
RLS Dinámico
Un solo rol para todos los usuarios
El RLS dinámico usa las funciones USERNAME() o USERPRINCIPALNAME() para identificar al usuario activo y filtrar datos basándose en una tabla de seguridad del modelo. Un único rol sirve para todos los usuarios — la tabla de seguridad determina qué ve cada uno.
Paso 1: Crea una tabla de seguridad
// Tabla cargada desde Excel/SharePoint con los permisos:
TablaSeguridad:
| Email | Region |
|----------------------------|------------|
| ana@empresa.com | Norte |
| carlos@empresa.com | Sur |
| carlos@empresa.com | Centro | ← Carlos ve dos regiones
| admin@empresa.com | Norte |
| admin@empresa.com | Sur |
| admin@empresa.com | Centro |
| admin@empresa.com | Este |
| admin@empresa.com | Oeste | ← Admin ve todo
Paso 2: Relaciona con tu dimensión
Crea una relación entre TablaSeguridad[Region] y DimTienda[Region]. Esta puede ser una relación inactiva si ya tienes otra relación activa.
Paso 3: Crea el rol dinámico
// Rol "RLS Dinamico" — filtro en TablaSeguridad:
[Email] = USERPRINCIPALNAME()
// Cuando Ana inicia sesión:
// → USERPRINCIPALNAME() = "ana@empresa.com"
// → TablaSeguridad filtra su fila
// → La relación propaga el filtro a DimTienda
// → FactVentas solo muestra la región Norte
💡 Tip kawaii: El patrón de RLS dinámico con tabla de seguridad es el más escalable. Para añadir o cambiar permisos, solo actualizas el Excel — sin tocar el modelo ni republicar. Ideal para organizaciones con muchos usuarios o permisos que cambian frecuentemente. 🌸
👤
USERNAME() vs USERPRINCIPALNAME()
¿Cuál usar?
// USERNAME() — devuelve el nombre de usuario en formato DOMINIO\usuario
USERNAME() = "EMPRESA\ana.garcia"
// USERPRINCIPALNAME() — devuelve el email UPN del usuario de Azure AD
USERPRINCIPALNAME() = "ana.garcia@empresa.com"
Diferencias clave:
USERNAME(): formato DOMAIN\username (Active Directory clásico). En Power BI Service con cuentas Microsoft 365 devuelve el mismo valor que UPN.
USERPRINCIPALNAME(): formato email (Azure AD / Microsoft 365). Es la recomendación actual de Microsoft para RLS en Power BI Service.
En Power BI Desktop: ambas devuelven el usuario de Windows que ejecuta Desktop — útil para probar.
📌 Buena práctica: Usa siempre USERPRINCIPALNAME() para RLS dinámico en Power BI Service. El UPN es el identificador estándar de las cuentas Microsoft 365 y Azure AD, y es el que los administradores usan para asignar usuarios a roles.
🧪
Cómo Probar RLS
En Power BI Desktop: "Ver como rol"
Sin necesidad de publicar, puedes probar cómo se ve el informe desde la perspectiva de un rol:
Pestaña "Modelado" → "Ver como" (o "Ver como roles")
Selecciona el rol que quieres probar
Opcionalmente introduce un email para simular un usuario específico (para RLS dinámico)
El informe mostrará solo los datos que ese rol/usuario puede ver
Un banner amarillo en la parte superior confirma que estás en modo "Ver como"
En Power BI Service: "Probar como rol"
Ve al dataset en el servicio → Menú de los tres puntos → "Seguridad"
Selecciona un rol y haz clic en "Probar como rol"
Se abre el informe con los datos filtrados para ese rol
⚠️ Ojo con esto: Los propietarios y administradores del workspace siempre ven todos los datos, independientemente del RLS. RLS solo se aplica a los usuarios con rol "Espectador" o "Colaborador" (no Administrador ni Miembro del workspace). Prueba siempre con una cuenta de usuario final, no con el admin.
🎯
Consideraciones Avanzadas
RLS y rendimiento
El RLS añade filtros al contexto de cada consulta, lo que puede impactar el rendimiento. Para modelos grandes:
Los filtros RLS se evalúan para cada consulta — asegúrate de que la tabla de seguridad es pequeña y la relación es eficiente
Evita lógica RLS compleja con múltiples CALCULATE y FILTER anidados
Si tienes RLS en múltiples tablas, verifica que los filtros no se propagan de formas inesperadas
OLS: Object-Level Security
Además de RLS (que oculta filas), Power BI también ofrece OLS (Object-Level Security) para ocultar columnas o tablas completas a ciertos usuarios. Si un usuario no tiene acceso a una columna con OLS, cualquier medida que la referencie devolverá un error. OLS requiere XMLA endpoint (Premium o Premium Per User).
🚀 ¡Modelo seguro! Para una visión completa de la gobernanza y seguridad en Power BI (más allá del RLS en el modelo), visita la sección de Gobernanza. Si quieres profundizar en patrones de RLS más complejos con jerarquías, revisa los Patrones Avanzados.