SunFruits Exports
POWER BI · INTERMEDIO–AVANZADO
Programa Power BI para SunFruits Exports · Módulo 2 · Día 8

Sesión 8
Seguridad (RLS)
y publicación

RLS dinámica, Power BI Service, gateway y refresco incremental

Bloque A · RLSBloque B · Publicación y operación

Sesión de cierre del programa

Mapa de la sesión

🅰 Bloque A — 45 min

Row Level Security

  • RLS estática (por rol)
  • Tabla de seguridad
  • RLS dinámica con USERPRINCIPALNAME()
  • Validar y caveats en DirectQuery

🅱 Bloque B — 45 min

Publicación y operación

  • Publicar al Service
  • Gateway on-premise
  • Refresco programado e incremental
  • Apps y distribución

Objetivos de aprendizaje

Al terminar la sesión vas a poder…

Asegurar

Implementar RLS estática y dinámica por usuario.

Publicar

Llevar el reporte al Service con gateway y refresco.

Operar

Configurar refresco incremental y distribuir con Apps.

💡 Idea fuerza

Un reporte en producción no es "publicar y listo": es seguridad + refresco confiable + distribución. Aquí cerramos el ciclo de un proyecto BI real.

Bloque A · 45 min

Row Level Security

Que cada quien vea solo lo suyo

¿Qué es RLS?

Row Level Security filtra las filas que cada usuario puede ver, según su rol.

Sin RLS

Todos ven todas las ventas de todas las regiones.

Con RLS

El comercial de Europa ve solo Europa; gerencia ve todo. Un mismo reporte, datos según el usuario.

Se define con un filtro DAX sobre una tabla (normalmente una dimensión).

RLS estática (por rol)

Creas un rol por grupo y le pones un filtro fijo.

  • Modelado → Administrar roles → Crear
  • Rol "Europa" con filtro sobre Clientes
  • Simple, pero no escala si hay muchas regiones
// Filtro de tabla del rol (Clientes)
[Region Comercial] = "Europa"

Un rol por región = muchos roles que mantener.

Tabla de seguridad

La clave de la RLS dinámica: una tabla que mapea usuario → qué puede ver.

EmailRegion Comercial
luis.tafur@sunfruits.com.peEuropa
maria.rojas@sunfruits.com.peAsia
carlos.mendoza@sunfruits.com.peNorteamerica
carlos.mendoza@sunfruits.com.peEuropa
gerencia@sunfruits.com.pe(todas las regiones)

Ya viene en la BD de SunFruits: tabla seguridad. Un usuario puede tener varias filas.

RLS dinámica con USERPRINCIPALNAME()

Un solo rol que se adapta al usuario conectado. USERPRINCIPALNAME() devuelve su correo.

// Filtro del rol 'RLS Dinámica' sobre la tabla Clientes
[Region Comercial] IN
  SELECTCOLUMNS(
    FILTER(Seguridad, Seguridad[Email] = USERPRINCIPALNAME()),
    "r", Seguridad[Region Comercial])

Alternativa con relación: filtrar Seguridad[Email] = USERPRINCIPALNAME() y propagar.

Validar los roles

En Desktop

  • Modelado → Ver como
  • Elige el rol y, para el dinámico, escribe un correo de prueba
  • Confirma que solo aparecen las regiones permitidas

En el Service

Asigna los roles a usuarios/grupos en la seguridad del modelo semántico. USERPRINCIPALNAME() ahí devuelve el correo real.

RLS en DirectQuery / compuesto

Prueba siempre con "Ver como" tras cualquier cambio de modelo: la seguridad es lo último que quieres romper.

Bloque B · 45 min

Publicación
y operación

Service, gateway y refresco

Publicar al Power BI Service

Power BI Desktop
.pbix
Workspace
área de trabajo
App
consumidores

Gateway on-premise

El gateway es el puente entre el Service (nube) y tus datos locales (SQL on-premise o Excel en red).

  • Instala el On-premises data gateway (modo estándar)
  • En un servidor con acceso al origen
  • Mapea el origen y sus credenciales en el Service
Power BI Service (nube)
Gateway
BD SunFruits / Excel (on-premise)

Refresco programado

Para SunFruits: refresco diario tras el cierre de operaciones; alerta al correo de TI si falla.

Refresco incremental: por qué

Refrescar 4 años completos cada día es un desperdicio. El incremental refresca solo lo reciente y archiva el histórico.

  • Refrescos más rápidos y livianos
  • Menos carga en el origen
  • Requiere parámetros RangeStart/RangeEnd
Parámetros RangeStart y RangeEnd
Parámetros RangeStart / RangeEnd · Microsoft Learn

Configurar el refresco incremental

Diálogo de actualización incremental
Política de actualización incremental · Microsoft Learn

En la tabla VentasActualización incremental:

  • Archivar datos de los últimos N años
  • Actualizar (incrementalmente) los últimos M meses
  • Opcional: detectar cambios

El filtro debe plegar

// Filtro que habilita el incremental (debe foldear)
= Table.SelectRows(Origen, each
    [fecha_pedido] >= RangeStart and
    [fecha_pedido] < RangeEnd)

Si no pliega al origen, el incremental no funciona bien.

Advertencia de query folding
Aviso: el paso debe plegar · Microsoft Learn

Distribución y gobierno

Distribuir

  • Publica una App del workspace para consumidores
  • Controla el acceso por audiencias

Gobierno

  • Etiquetas de confidencialidad
  • Documenta orígenes, gateway, horarios y matriz RLS
  • Versiona (PBIP + Git) en proyectos serios

🛠 Taller de la sesión

Parte 1 — RLS

  • Carga la tabla seguridad de SunFruits.
  • Crea el rol "RLS Dinámica" con USERPRINCIPALNAME().
  • Valida con "Ver como" usando correos de prueba.

Parte 2 — Publicar

  • Publica al workspace y asigna roles RLS.
  • Configura el refresco incremental con RangeStart/RangeEnd.
  • Programa el refresco y publica la App.

Resumen — puntos importantes

🅰 RLS

  • Filtra filas por usuario/rol
  • Tabla de seguridad + USERPRINCIPALNAME()
  • Un solo rol dinámico escala mejor
  • Valida con "Ver como"

🅱 Publicación

  • Service + roles RLS asignados
  • Gateway para orígenes on-premise
  • Refresco programado e incremental (debe plegar)
  • Apps + gobierno

🎯 Una idea: producción = seguridad + refresco confiable + distribución controlada.

Preguntas de repaso

Verifiquemos lo aprendido en esta sesión

1

¿Qué diferencia hay entre RLS estática y dinámica?

2

¿Qué devuelve USERPRINCIPALNAME() y para qué se usa en RLS?

3

¿Cuándo necesitas un gateway?

4

¿Qué ventaja da el refresco incremental y qué requisito tiene el filtro?

5

¿Por qué validar siempre con "Ver como" antes de publicar?

Sun Fruits Exports · Programa Power BI · Fin del curso

¡Gracias!

De un Excel sucio a un modelo seguro, optimizado y publicado. ¡Felicitaciones!

Edwin Barrientos Retuerto

Arquitecto de Inteligencia de Negocios & Cloud · Instructor

🌐 blog.arquitecturabi.pe

Siguiente nivel sugerido: PBIP + Git, pipelines de implementación y certificación PL-300

1 / 22