🎯 Situación

Un VP de ventas nos pidió construir un dashboard de Power BI para todo el equipo de ventas — 5 gerentes regionales y 25 representantes. El requisito: cada persona ve los datos de su propia región, los gerentes ven su región más los datos individuales de sus representantes, y el VP ve todo. Mismo reporte. Mismo dataset. Vistas completamente diferentes según quién inicia sesión.

👉 La seguridad a nivel de fila (RLS) en Power BI filtra los datos a nivel de fila según quién está viendo el reporte. El filtro se aplica automáticamente — el usuario nunca ve un selector de filtro. Solo ve sus datos. Un reporte sirve a toda la organización, cada persona con el alcance apropiado.

⚠️ El reto

🔒 RLS estática — el caso más simple

  • Crear un rol en Power BI Desktop: Administrar roles → Nuevo rol
  • Agregar un filtro DAX en la tabla: [Región] = 'Norte'
  • Agregar los usuarios específicos a ese rol en Power BI Service
  • Funciona para equipos pequeños con regiones estables
  • No se necesita tabla de mapeo — solo valores codificados por rol

👤 RLS dinámica — escala con la organización

  • Crear una tabla de mapeo: columnas [EmailUsuario] y [Región]
  • Cargarla en el dataset de Power BI
  • Escribir un filtro DAX: [Región] IN VALUES(MapeoUsuario[Región]) donde MapeoUsuario filtra con USERPRINCIPALNAME()
  • Cuando se une un nuevo representante, agregar una fila a la tabla de mapeo — el reporte se actualiza automáticamente
  • Escala a 500 usuarios sin cambios en el reporte

🔍 Análisis

El DAX exacto para RLS dinámica:

-- In the Region filter on the Sales table:
[Region] IN
    CALCULATETABLE(
        VALUES(UserRegionMap[Region]),
        FILTER(UserRegionMap, UserRegionMap[UserEmail] = USERPRINCIPALNAME())
    )

Este filtro único, aplicado como un rol, restringe dinámicamente cada visual del reporte a las regiones mapeadas al email del usuario conectado. La cuenta del VP mapea a todas las regiones. Un gerente regional mapea a una. Un representante a un solo territorio.

Un error común: los filtros RLS se aplican DESPUÉS de los cálculos de medidas DAX. Esto significa que una medida como [Ingresos Totales] ya filtrada por RLS mostrará solo los ingresos del usuario — no el total. Si quieres mostrar 'mis ingresos vs total empresa', necesitas una medida específica que elimine el filtro RLS usando ALL(). Este es el problema de depuración RLS más frecuente.

✓️ Buena práctica

Tres pasos de despliegue:

  • Construir y probar en Power BI Desktop — usar 'Ver como rol' para simular cada tipo de usuario antes de publicar
  • Publicar en Power BI Service, luego ir al dataset → Seguridad → asignar usuarios o grupos de seguridad a cada rol
  • Probar de nuevo en Service con 'Probar como rol' — confirmar que el alcance de datos es correcto antes de compartir con usuarios

💡 Síntesis

La RLS es una de las funciones de Power BI de mayor valor para cualquier organización con diferentes necesidades de acceso a datos entre equipos. Un reporte reemplaza cinco. Un dataset sirve a todos. La gestión es una tabla de mapeo con una fila por usuario — actualizada cuando el equipo cambia.

👉 Un dashboard. Cada persona ve solo sus datos. Sin selectores de filtros. Sin reportes separados.

Eso es RLS — y toma una tarde construirlo.