La solicitud

De Daniel Brooks, Planificador de Inventario
Tu objetivo
El starter contiene la columna calculada rota de products. Arregla Demand Band para que cada producto reciba "High demand" cuando sus propias unidades pedidas (la suma de order_items[quantity] de ese producto, en cualquier estado de pedido) sean 500 o más, y "Normal" en caso contrario. La matriz agrupa el conteo Products por la nueva columna.
- Agrega la columna
Demand Bandaproductspendiente - También la fila Total correctapendiente
Tu columna calculada
- Visual
- A matrix: rows = your new column on products, values = [Products]
- Medidas del informe
Products = COUNTROWS(products)
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
| product_id | name | category | subcategory | unit_price | unit_cost |
|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1,659 | |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919 | 503.5 |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789 | 429.87 |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429 | 214.7 |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449 | 232.7 |
| 106 | Northfield Rattan Sectional | Furniture | Sofas | 229 | 79.35 |
| 107 | Birch Teak Side Table | Furniture | Tables | 169 | 54.61 |
| 108 | Ashford Leather Dining Chair | Furniture | Chairs | 369 | 139.71 |
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Lo que recibe Daniel, y por qué
La lección
Este error tiene una firma: el mismo número en cada fila. Detrás hay la distinción que causa la mayor parte de la confusión en DAX, entre contexto de fila y contexto de filtro.
En qué estás trabajando
Esta página ejecuta un motor DAX de práctica creado para este sitio. Evalúa tu columna calculada
en cada fila de products y luego agrupa el conteo de productos por sus valores. En Power BI
Desktop seleccionarías la columna en la vista de datos (Data view), editarías su fórmula en la
barra de fórmulas, o crearías una con Table tools → New column. Una columna calculada se
calcula en la actualización y se guarda en el modelo.
Dos contextos, dos trabajos
- El contexto de filtro es el conjunto de filtros que deciden qué filas son visibles: una fila
de matriz, una segmentación, un filtro de CALCULATE. Las agregaciones como
SUM,COUNTROWSyAVERAGElo obedecen. - El contexto de fila significa «hay una fila actual». Existe en columnas calculadas y dentro
de iteradores como
SUMXyFILTER. Te permite leerproducts[unit_price]de esta fila. No filtra nada.
La columna rota los confunde:
Demand Band = IF(SUM(order_items[quantity]) >= 500, "High demand", "Normal")
La columna se ejecuta una vez por producto con un contexto de fila. No hay contexto de filtro en
absoluto, así que SUM ve las 30,000 líneas de pedido y devuelve 60,535 en cada fila. Todos los
productos superan 500.
Transición de contexto
CALCULATE convierte la fila actual en un filtro equivalente. Eso es la transición de
contexto:
Demand Band = IF(CALCULATE(SUM(order_items[quantity])) >= 500, "High demand", "Normal")
Para la fila de la cómoda, CALCULATE filtra products a la cómoda, la relación lleva ese filtro a
order_items y la suma es 8. Toda llamada a una medida hace lo mismo, porque una medida va
envuelta en un CALCULATE invisible: con una medida Units Ordered = SUM(order_items[quantity]), la
columna IF([Units Ordered] >= 500, …) también funcionaría.
La otra forma de escribirlo sigue la relación a mano:
Demand Band = IF(SUMX(RELATEDTABLE(order_items), order_items[quantity]) >= 500, "High demand", "Normal")
RELATEDTABLE devuelve las líneas de pedido del producto actual.
El error en espejo
En una medida, escribir una columna a secas como products[unit_price] falla, porque una
medida tiene contexto de filtro pero no fila actual: ¿el precio de qué producto? Una medida
necesita una agregación (SUM, MAX) o un iterador. Las columnas tienen una fila y ningún
filtro; las medidas tienen filtros y ninguna fila.
Errores comunes
- Arreglar el umbral en lugar de la fórmula. Subir 500 a 60,000 esconde el error; todos los productos siguen recibiendo el mismo número.
- Columnas calculadas para números que la gente segmenta. Una columna se calcula una vez, en la actualización. Una segmentación de año no la cambia. Usa una columna para una etiqueta fija como este rango, una medida para los totales.
¡Linterna encendida!
Practicaste: row contextfilter contextcontext transitioncalculated columncalculate
- Resuelto
- Sin pistas
- Al primer intento
