1. Faro

Nivel 4 · Relaciona líneas de pedido, pedidos y clientes

La solicitud

De Jason Miller, Gerente de CRM

“Quiero las unidades vendidas por estado del cliente, pero las líneas de pedido no saben quién es el cliente. Solo lo sabe el pedido. ¿Puedes conectar las tres tablas para que una segmentación de estado llegue a cada línea de pedido?”

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

Vista de 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…

    ResultadoPresiona Comprobar para comparar tu modelo

    Mote revisa tu resultado

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

    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:

    1. customers conserva solo a los clientes de California.
    2. A través de orders[customer_id] → customers[customer_id], orders conserva solo sus pedidos.
    3. A través de order_items[order_id] → orders[order_id], order_items conserva 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-one afirma 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 a customers para este informe. Mantén Single.

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