1. Faro

Nivel 8 · Costo de línea con RELATED

La solicitud

De Laura Simmons, Socia Financiera de Categoría

“Necesito el costo de los bienes vendidos por categoría para los pedidos completados. El costo unitario vive en el producto, la cantidad en la línea de pedido. ¿Puedes poner un costo en cada línea para que pueda totalizarlo?”

Tu objetivo

Añade a order_items una columna calculada llamada Line Cost: la cantidad de la línea por el unit_cost de su producto, traído de products con RELATED. La página está filtrada a pedidos completados, y la matriz muestra la medida dada Cost (SUM de tu columna) por products[category].

  • Agrega la columna Line Cost a order_itemspendiente
  • También la fila Total correctapendiente

Tu columna calculada

DAX
Visual
A matrix: rows = your new column on order_items, values = [Cost]
Segmentaciones
orders[status] = completed
Medidas del informe
Cost = SUM(order_items[Line Cost])
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…

    VisualData view of order_items: your column appears in the visual once you press Check
    El visual antes de tu respuesta
    order_item_idorder_idproduct_idquantityunit_pricediscount_pct
    11,001121931.990
    21,001154311.990
    31,002154411.990
    41,00219411490
    51,002193219.990
    61,002196225.990
    71,002156153.990
    81,003134192.9910

    Mote revisa tu resultado

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

    La lección

    La cantidad está en la línea de pedido y el costo está en el producto. Una columna calculada en order_items puede cruzar la relación y traer el costo, una línea a la vez.

    En qué estás trabajando

    Esto es un informe de práctica creado para este sitio; Power BI Desktop solo funciona en Windows. Tu columna va en order_items. La página está filtrada a pedidos completados, y la matriz muestra Cost = SUM(order_items[Line Cost]) por products[category], así que se rellena en cuanto tu columna existe.

    En Power BI Desktop: selecciona order_items en el panel Data, Table tools → New column, escribe la fórmula y pulsa Enter. RELATED solo funciona si la relación de order_items a products existe en la vista Modelo.

    En una columna calculada de order_items, cada fila es una línea de pedido. Sus propias columnas están disponibles directamente; las columnas de otras tablas no, porque DAX no sabe a cuál de sus filas te refieres. RELATED se lo dice: sigue la relación de esta fila hasta el lado «uno» y lee la columna ahí.

    Line Cost = order_items[quantity] * RELATED(products[unit_cost])

    Para una línea con product_id 17 y cantidad 2, RELATED encuentra el producto 17 y devuelve su costo unitario; el costo de la línea es el doble. 30,000 líneas, 30,000 búsquedas, hechas una vez en la actualización.

    RELATED funciona en una dirección: del lado varios al lado uno, donde hay exactamente una fila que leer. Ir al revés, de un producto a sus muchas líneas, necesita RELATEDTABLE, que devuelve una tabla que luego agregas.

    Costos vacíos

    Nueve productos no tienen unit_cost en los datos. Para sus líneas, RELATED devuelve un vacío, y un número multiplicado por vacío es vacío en DAX, así que esas líneas no tienen costo y SUM las omite. Eso es honesto: el costo es desconocido, no cero. Un informe financiero debe decir qué productos no tienen costo en lugar de contarlos en silencio como gratis.

    Columna, luego medida

    La columna hace la aritmética por línea; la medida la agrega. También podrías saltarte la columna con un iterador, SUMX(order_items, order_items[quantity] * RELATED(products[unit_cost])), que calcula lo mismo dentro de una medida sin guardar una columna. Los escribirás en el capítulo de DAX avanzado.

    Errores comunes

    • Sin RELATED. order_items[quantity] * products[unit_cost] falla: en una fila de order_items no hay un único costo de producto que leer.
    • El precio de venta en lugar del costo. order_items[unit_price] es lo que pagó el cliente.
    • RELATED en el sentido equivocado. En una columna de products, RELATED(order_items[quantity]) falla: un producto tiene muchas líneas.

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