1. Faro

Nivel 4 · Un rol de seguridad a nivel de fila para el Oeste

La solicitud

De Gregory Hall, Director de ventas de la región Oeste

“Mis dos líderes de la costa oeste recibirán el informe de ventas la semana que viene. Deberían ver los clientes de California, Oregón y Washington y nada más: ni sus ventas, ni sus conteos de clientes, ni una sola fila de otros estados.”

Tu objetivo

Escribe la regla de un rol llamado West en la tabla customers: conserva las filas cuyo customers[state] sea CA, OR o WA. El visual muestra las Sales y los Customers que ve cada miembro del rol.

  • Cada usuario ve solo sus filas: revisa cada línea del visualpendiente

Tu regla de rol

Rol de seguridad
Visual
A card of [Sales], [Customers] for each user
Medidas del informe
Sales = CALCULATE(SUM(order_items[line_total]), orders[status] = "completed")Customers = COUNTROWS(customers)
Panel de datos: tablas y columnas
  • order_items order_item_id, order_id, product_id, quantity, unit_price, discount_pct, line_total
  • orders order_id, customer_id, order_date, status, channel, shipping_fee, coupon_code
  • products product_id, name, category, subcategory, unit_price, unit_cost, launched_on, is_active
  • customers customer_id, first_name, last_name, email, city, state, signup_date, segment, referral_source
  • returns return_id, order_item_id, returned_on, reason, refund_amount
  • Date Date, Year, Quarter, Month Number, Month, Year Month, Year Quarter, Day, Weekday Number, Weekday

Cargando el editor…

    VisualBefore your rule, every user sees everything
    El visual antes de tu respuesta
    UserSalesCustomers
    Kayla Simmons (West)5,894,284.442,018
    Jason Reyes (West)5,894,284.442,018

    Mote revisa tu resultado

    Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.

    La lección

    La seguridad a nivel de fila (RLS, row-level security) oculta filas de datos a quienes no deberían verlas. Defines roles en Power BI Desktop; cada rol contiene una regla por tabla, una expresión DAX que devuelve VERDADERO o FALSO para cada fila. Los miembros del rol ven solo las filas donde la regla dice VERDADERO, y todos los visuales, totales y exportaciones lo siguen.

    Dónde estás trabajando

    Esta página es una herramienta de práctica, no Power BI. Escribes la regla de un rol en la tabla customers; el motor la ejecuta en cada cliente y luego rellena el visual con lo que vería cada miembro del rol: sus Sales y su número de Customers. Sigue las reglas de Power BI, así que una regla que funciona aquí funciona allí.

    Para hacerlo de verdad en Power BI Desktop: Modelado → Administrar roles → Nuevo (Modeling → Manage roles → New), llama al rol West, selecciona la tabla customers y construye el filtro en el editor desplegable (state es uno de CA, OR, WA) o selecciona Cambiar al editor DAX (Switch to DAX editor) y escribe la regla de abajo. Pulsa Guardar (Save). Para comprobarlo, Modelado → Ver como (Modeling → View as), marca West, Aceptar: todo el informe muestra ahora lo que ve el rol, con una barra amarilla hasta que pulses Detener la visualización (Stop viewing).

    La regla

    customers[state] IN {"CA", "OR", "WA"}

    IN { … } comprueba si el valor es uno de una lista. Es más corto y más claro que encadenar ORs:

    customers[state] = "CA" || customers[state] = "OR" || customers[state] = "WA"

    Ambas conservan las mismas filas. Las comparaciones de texto en DAX ignoran las mayúsculas, así que "ca" también coincidiría.

    Una regla, todas las tablas

    Solo filtras customers, y aun así Sales se reduce también. Un filtro de seguridad se comporta como el filtro de una segmentación que nadie puede borrar: fluye del lado de uno de cada relación al lado de muchos. Customers filtra orders, orders filtra las líneas de pedido, y cada medida construida sobre ellas ve solo datos del Oeste. Por eso las reglas pertenecen a las tablas de dimensión pequeñas: una regla corta, y el esquema en estrella la lleva a todas partes.

    La dirección contraria no se filtra por defecto. Un miembro del Oeste sigue viendo los 120 productos en la lista de productos, porque products está en el lado de uno de su relación con order_items. Normalmente está bien (los nombres de producto no son secretos); si no lo está, la tabla products necesita su propia regla.

    Los roles no son personas

    Desktop define lo que puede ver cada rol. No decide quién está en él: añades personas y grupos a los roles en el servicio tras publicar (un nivel posterior). Un rol estático como este necesita un rol por región, así que con diez regiones mantienes diez roles y diez listas. El siguiente nivel los sustituye por una sola regla dinámica.

    Errores comunes

    • Un valor, no una prueba. customers[state] a secas no es VERDADERO ni FALSO.
    • Reglas en la tabla de hechos. Filtrar order_items fila por fila funciona, pero es más lento y deja sin filtrar customers y orders.
    • Probar como tú mismo. Como autor del informe lo ves todo; usa Ver como.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.