La solicitud

De Laura Simmons, Socia Financiera de Categoría
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 Costaorder_itemspendiente - También la fila Total correctapendiente
Tu columna calculada
- 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…
Solución de referencia
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1,001 | 121 | 9 | 31.99 | 0 |
| 2 | 1,001 | 154 | 3 | 11.99 | 0 |
| 3 | 1,002 | 154 | 4 | 11.99 | 0 |
| 4 | 1,002 | 194 | 1 | 149 | 0 |
| 5 | 1,002 | 193 | 2 | 19.99 | 0 |
| 6 | 1,002 | 196 | 2 | 25.99 | 0 |
| 7 | 1,002 | 156 | 1 | 53.99 | 0 |
| 8 | 1,003 | 134 | 1 | 92.99 | 10 |
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Lo que recibe Laura, y por qué
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.
RELATED: del lado varios al lado uno
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 deorder_itemsno 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.
¡Linterna encendida!
Practicaste: calculated columnrelatedrelationshiprow contextcost of goods sold
- Resuelto
- Sin pistas
- Al primer intento
