La solicitud

De Kevin Park, Gerente de e-commerce
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
- 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…
Solución de referencia
| channel | Sales | Avg 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.
Lo que recibe Kevin, y por qué
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]).
¡Linterna encendida!
Practicaste: averagexvaluescontext transitioniteratoraverage order value
- Resuelto
- Sin pistas
- Al primer intento
