La solicitud

De Jason Miller, Gerente de CRM
Tu objetivo
El modelo tiene order_items (una fila por línea de pedido), orders (una fila por pedido) y customers (una fila por cliente), sin relaciones. Crea las dos relaciones que permiten que un filtro sobre customers llegue a order_items: columnas correctas, varios a uno, dirección única, activa.
- Todas las relaciones que el informe necesita, bien configuradaspendiente
Tu modelo
Las tablas del modelo: 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), customers (customer_id, first_name, last_name, email, city, state, signup_date, segment, referral_source).
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Lo que recibe Jason, y por qué
La lección
La segmentación de estado de Jason filtra customers, pero las unidades viven en order_items, a
dos tablas de distancia. Un filtro puede cruzar más de una relación, siempre que cada una apunte
en el sentido correcto.
En qué estás trabajando
Este es un diagrama de práctica creado para este sitio, porque Power BI Desktop solo funciona en Windows. Añades relaciones con el formulario bajo el lienzo; cada una se comprueba contra los datos como lo hace Power BI, y luego se compara con el modelo que el informe necesita.
En Power BI Desktop: vista Modelo → arrastra order_id de order_items sobre order_id en
orders, y luego customer_id de orders sobre customer_id en customers. O Modeling →
Manage relationships → New, elige las dos tablas y columnas, Cardinality: Many to one
(*:1), Cross filter direction: Single, y marca Make this relationship active.
Encuentra el camino
Anota lo que sabe cada tabla:
| Tabla | Clave (única) | Apunta a |
|---|---|---|
| order_items | order_item_id | order_id, product_id |
| orders | order_id | customer_id |
| customers | customer_id |
order_items no puede llegar a customers directamente: no tiene customer_id. Conoce su
pedido, y el pedido conoce a su cliente. Así que el modelo necesita dos relaciones, cada una de una
clave externa a la clave a la que apunta:
order_items[order_id] > orders[order_id]
orders[customer_id] > customers[customer_id]
Cómo viaja el filtro
Elige «CA» en la segmentación de estado:
customersconserva solo a los clientes de California.- A través de
orders[customer_id] → customers[customer_id],ordersconserva solo sus pedidos. - A través de
order_items[order_id] → orders[order_id],order_itemsconserva solo las líneas de esos pedidos.
SUM(order_items[quantity]) suma ahora las unidades de California. Cada salto va de un lado
«uno» a un lado «varios», que es la dirección en que una relación Single pasa los filtros. Si
faltara cualquiera de las dos relaciones o apuntara al revés, la cadena se rompería y todos los
estados mostrarían el mismo total general.
Varios a uno, dos veces
Ambas relaciones son varios a uno: muchas líneas por pedido, muchos pedidos por cliente. El lado
«uno» es siempre una clave, única en su tabla. Power BI lo comprueba contra los datos; si pones por
accidente orders en el lado uno de la relación de customer_id, la rechaza, porque
orders[customer_id] se repite.
Errores comunes
- Saltarse la tabla del medio. Las líneas y los clientes no comparten ninguna columna. El
camino pasa por
orders. - Lados invertidos.
customers[customer_id] > orders[customer_id] | many-to-oneafirma que cada pedido tiene muchos clientes. Power BI lo rechaza: el lado uno tiene valores repetidos. - Ambas direcciones. Un filtro sobre
order_items(por producto, por ejemplo) no necesita llegar acustomerspara este informe. Mantén Single.
¡Linterna encendida!
Practicaste: relationshipmany to onefilter propagationforeign keycross filter direction
- Resuelto
- Sin pistas
- Al primer intento
