1. Faro

Nivel 1 · Ingresos línea por línea con SUMX

¿Es nuevo para ti? Lee primero el concepto: Iteradores, contexto de fila y transición de contexto

La solicitud

De Laura Mitchell, Controladora financiera

“Vamos a quitar line_total de la importación: es una copia almacenada de un cálculo que las columnas de origen ya contienen, y el ERP la redondea por línea. Antes de hacerlo, necesito una medida Net Revenue construida con cantidad, precio unitario y descuento, para que el informe por categoría siga funcionando sin ella.”

Tu objetivo

La matriz tiene products[category] en las filas y una segmentación deja solo los pedidos completados. Crea una medida llamada Net Revenue que sume, para cada línea de pedido, order_items[quantity] × order_items[unit_price] × (1 − order_items[discount_pct] / 100). No uses line_total.

  • Llena [Net Revenue] en cada fila del visualpendiente
  • También la fila Total correctapendiente

Tu medida

DAX
Visual
A matrix: rows = products[category]; values = [Net Revenue]
Segmentaciones
orders[status] = completed
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…

    Visual[Net Revenue] fills in when you press Check
    El visual antes de tu respuesta
    categoryNet Revenue
    Decor
    Furniture
    Kitchen
    Lighting
    Outdoor
    Textiles
    Total

    Mote revisa tu resultado

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

    La lección

    SUM solo puede sumar una columna que ya existe. Laura quiere un número que ya no existe como columna: cantidad × precio × (1 − descuento) en cada línea de pedido, y luego la suma. Ese es el trabajo de un iterador.

    Dónde estás trabajando

    Esta página es un informe de práctica, no Power BI: Power BI Desktop solo funciona en Windows. El motor DAX que está detrás de la matriz se creó para este sitio y sigue las reglas de Power BI, así que la medida que escribas aquí funciona igual allí. En Power BI Desktop: selecciona order_items en el panel Datos (Data), Inicio → Nueva medida (Home → New measure), escribe la fórmula, pulsa Enter y arrastra la medida al pozo Valores (Values) de la matriz.

    SUMX: calcula en cada fila y luego suma

    Net Revenue =
    SUMX(
        order_items,
        order_items[quantity] * order_items[unit_price] * (1 - order_items[discount_pct] / 100)
    )

    SUMX(tabla, expresión) recibe dos argumentos:

    1. La tabla que se recorre. Aquí order_items, ya filtrada por la celda: la fila Kitchen solo le deja ver las líneas de Kitchen de los pedidos completados.
    2. Una expresión que se evalúa una vez por fila. Dentro de ella, order_items[quantity] significa “la cantidad de esta fila”. Esa vista por fila se llama contexto de fila, y solo los iteradores (y las columnas calculadas) lo crean.

    SUMX suma después los resultados de cada fila. AVERAGEX, MINX, MAXX y COUNTX funcionan igual y terminan con otra agregación.

    Por qué SUM × SUM está mal

    El atajo tentador es SUM(order_items[quantity]) * SUM(order_items[unit_price]). Multiplica el total de unidades de la categoría por el total del precio de todas las líneas, un número miles de veces demasiado grande. Los totales solo se pueden multiplicar cuando todas las filas tienen el mismo multiplicador. Los precios y los descuentos cambian de una línea a otra, así que la multiplicación tiene que ocurrir primero dentro de cada línea.

    Los descuentos se guardan como porcentajes

    discount_pct guarda 15 para un descuento del 15 %, así que la línea conserva 1 - 15 / 100 = 85 % de su precio. Si olvidas el / 100 obtienes 1 - 15 = −14, y los ingresos se vuelven negativos en cada línea con descuento.

    ¿Por qué no conservar line_total?

    Guardar una columna calculada cuesta memoria en cada fila y queda desactualizada si cambia la lógica. Un SUMX sobre las columnas de origen se calcula al consultar, a partir de las columnas que ya cargas. Además no se redondea por línea, así que tu total de Kitchen quedará a un dólar o poco más de SUM(order_items[line_total]). Esa diferencia es el redondeo del ERP, no un error.

    Errores comunes

    • Multiplicar sumas. Agrega después de la operación por fila, nunca antes.
    • Una columna sola en una medida. order_items[quantity] * order_items[unit_price] fuera de un iterador no tiene ninguna fila de la que leer y falla.
    • El descuento como fracción. Divide discount_pct entre 100 una sola vez.

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