1. Faro

Nivel 2 · Valor promedio del pedido con AVERAGEX

La solicitud

De Kevin Park, Gerente de e-commerce

“El panel de las fiestas dice que nuestro pedido promedio del T4 de 2025 fue de $187. Eso no puede ser, nuestras canastas son mucho más grandes. Creo que está promediando líneas de pedido, no pedidos. ¿Puedes darme un valor promedio del pedido real por canal?”

Tu objetivo

La matriz tiene orders[channel] en las filas; las segmentaciones dejan los pedidos completados de 2025 Q4. El informe ya tiene [Sales] (line_total de los pedidos completados). Crea una medida llamada Avg Order Value: el promedio, sobre los pedidos de cada celda, del total de order_items[line_total] de cada pedido.

  • Llena [Avg Order Value] en cada fila del visualpendiente
  • También la fila Total correctapendiente

Tu medida

DAX
Visual
A matrix: rows = orders[channel]; values = [Sales], [Avg Order Value]
Segmentaciones
orders[status] = completed'Date'[Year Quarter] = 2025 Q4
Medidas del informe
Sales = CALCULATE(SUM(order_items[line_total]), 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[Avg Order Value] fills in when you press Check
    El visual antes de tu respuesta
    channelSalesAvg Order Value
    app$329,316
    marketplace$121,886
    web$304,108
    Total$755,310

    Mote revisa tu resultado

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

    La lección

    Kevin hace bien en desconfiar. Un número llamado “pedido promedio” que es menor que la mayoría de las canastas suele estar promediando lo equivocado: las líneas de los pedidos en lugar de los pedidos.

    Dónde estás trabajando

    Este es un informe de práctica creado para este sitio. Power BI Desktop solo funciona en Windows, así que un motor DAX dentro de la página evalúa tu medida en cada celda, siguiendo las reglas de Power BI. En Power BI Desktop: Inicio → Nueva medida (Home → New measure), escribe la fórmula y añade la medida a la matriz junto a Sales. Las dos segmentaciones sobre la matriz (status = completed, Year Quarter = 2025 Q4) son la versión de práctica de las segmentaciones de una página del informe.

    La granularidad decide qué significa un promedio

    order_items tiene una fila por línea de pedido. AVERAGE(order_items[line_total]) es un promedio honesto de líneas: una línea de sofá y una de cojín cuentan lo mismo. Pero un pedido es una canasta de líneas, y la pregunta “¿cuánto gasta un cliente por pedido?” necesita un número por pedido.

    AVERAGEX: un número por elemento de una lista y luego el promedio

    Avg Order Value =
    AVERAGEX(
        VALUES(orders[order_id]),
        CALCULATE(SUM(order_items[line_total]))
    )
    • VALUES(orders[order_id]) devuelve los ids de pedido visibles en la celda: en la fila web, los pedidos web del 2025 Q4 que se completaron.
    • AVERAGEX evalúa el segundo argumento una vez por cada id y promedia los resultados, saltándose los vacíos.
    • CALCULATE( … ) es lo que hace que “cada id” signifique algo. Dentro de un iterador, CALCULATE convierte la fila actual en un filtro (esto se llama transición de contexto), de modo que el SUM ve solo las líneas de ese pedido. Sin él, SUM ve todas las líneas de la celda, y cada pedido recibe las ventas completas del canal.

    Llamar a una medida produce la misma transición de contexto de forma automática, así que AVERAGEX(VALUES(orders[order_id]), [Sales]) también funciona. Cada referencia a una medida lleva un CALCULATE invisible alrededor.

    Dos caminos al mismo número

    El valor promedio del pedido es también las ventas totales divididas entre el número de pedidos:

    Avg Order Value = DIVIDE([Sales], DISTINCTCOUNT(orders[order_id]))

    Aquí ambos dan el mismo resultado, y la división es más barata. AVERAGEX se justifica cuando el número por pedido no es una simple suma: el promedio del número de artículos de cada pedido, de su línea más grande, de su margen. También se salta los pedidos con total vacío, que una división seguiría contando.

    Itera la tabla más pequeña que responda la pregunta

    AVERAGEX sobre VALUES(orders[order_id]) hace una transición de contexto por pedido. Eso está bien para los pedidos de un trimestre; sobre las 30 000 líneas de pedido con una llamada a medida en cada una, un informe real se vuelve lento. Itera una lista de las cosas que estás promediando, no la tabla más grande del modelo.

    Errores comunes

    • AVERAGE de líneas. Cálculo correcto, pregunta equivocada.
    • Olvidar CALCULATE. AVERAGEX(VALUES(orders[order_id]), SUM(order_items[line_total])) repite el total de la celda para cada pedido, así que el “promedio” es igual a las ventas del canal.
    • Contar filas de orders. La tabla orders tiene una fila por pedido, pero también se filtra de forma distinta que las líneas de pedido; para contar pedidos por producto, usa DISTINCTCOUNT(order_items[order_id]).

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