1. Faro

Nivel 7 · Arréglalo: todos los productos son de alta demanda

La solicitud

De Daniel Brooks, Planificador de Inventario

“Alguien añadió una columna Demand Band a products: High demand con 500 unidades pedidas o más, Normal por debajo. Cada uno de nuestros 120 productos dice High demand, incluida una cómoda de la que vendimos 8. ¿Puedes arreglar la columna para que cada producto se juzgue por sus propias unidades?”

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 Band a productspendiente
  • También la fila Total correctapendiente

Tu columna calculada

DAX
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…

    VisualData view of products: your column appears in the visual once you press Check
    El visual antes de tu respuesta
    product_idnamecategorysubcategoryunit_priceunit_cost
    101Vale Velvet LoveseatFurnitureSofas1,659
    102Alder Oak Coffee TableFurnitureTables919503.5
    103Orchard Rattan Dining ChairFurnitureChairs789429.87
    104Upland Oak BookcaseFurnitureStorage429214.7
    105Avery Leather Bed FrameFurnitureBeds449232.7
    106Northfield Rattan SectionalFurnitureSofas22979.35
    107Birch Teak Side TableFurnitureTables16954.61
    108Ashford Leather Dining ChairFurnitureChairs369139.71

    Mote revisa tu resultado

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

    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, COUNTROWS y AVERAGE lo obedecen.
    • El contexto de fila significa «hay una fila actual». Existe en columnas calculadas y dentro de iteradores como SUMX y FILTER. Te permite leer products[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.

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