1. Faro

Nivel 9 · Desafío final: la revisión de canales de las fiestas

La solicitud

De Victoria Grant, Directora comercial (CCO)

“El análisis posterior del trimestre de fiestas es el lunes. Por canal de ventas necesito tres cosas: cuánto regalamos en descuentos, en qué lugar queda cada canal en ventas y, solo para web y app, cuánto se sitúa cada uno por encima o por debajo del promedio de los dos.”

Tu objetivo

Paso 1 de 3. Crea una medida llamada Discount Given: el dinero descontado del precio de lista en cada línea de pedido, order_items[quantity] × order_items[unit_price] × order_items[discount_pct] / 100, sumado.

  • Llena [Discount Given] en cada fila del visualpendiente
  • También la fila Total correctapendiente

Paso 1 · tu medida

DAX
Visual
A matrix: rows = orders[channel]; values = [Sales], [Discount Given]
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[Discount Given] fills in when you press Check
    El visual antes de tu respuesta
    channelSalesDiscount Given
    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.

    Paso 2 · tu medida

    DAX
    Visual
    A matrix: rows = orders[channel]; values = [Sales], [Channel Rank]
    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[Channel Rank] fills in when you press Check
      El visual antes de tu respuesta
      channelSalesChannel Rank
      app$329,316
      marketplace$121,886
      web$304,108

      Mote revisa tu resultado

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

      Paso 3 · tu medida

      DAX
      Visual
      A matrix: rows = orders[channel]; values = [Sales], [vs Selected Avg]
      Segmentaciones
      orders[status] = completed'Date'[Year Quarter] = 2025 Q4orders[channel] = web, app
      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[vs Selected Avg] fills in when you press Check
        El visual antes de tu respuesta
        channelSalesvs Selected Avg
        app$329,316
        web$304,108

        Mote revisa tu resultado

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

        La lección

        Las tres preguntas de Victoria usan tres patrones distintos de este capítulo, todos en un mismo visual: una matriz de los tres canales de venta del trimestre de fiestas, solo pedidos completados.

        Dónde estás trabajando

        Como en todos los niveles de esta ruta, este es un informe de práctica creado para este sitio: Power BI Desktop solo funciona en Windows, y un motor DAX en la página rellena cada celda siguiendo las reglas de Power BI. Cada paso comprueba la última medida del editor; conserva ahí las anteriores. En Power BI Desktop añadirías cada una con Inicio → Nueva medida (Home → New measure) y la soltarías en Valores (Values) de la matriz.

        Paso 1: descuentos, línea por línea

        Un descuento se calcula por línea con tres de sus columnas: quantity × unit_price × discount_pct / 100. Es un iterador sobre order_items, igual que Net Revenue antes en el capítulo, pero con la parte del descuento en lugar de la parte que paga el cliente. La fila del canal y las dos segmentaciones deciden qué líneas recorre SUMX.

        Paso 2: un ranking que ignora la fila

        RANKX(ALL(orders[channel]), [Sales]) evalúa [Sales] para cada uno de los tres canales y devuelve la posición de la fila actual. ALL es lo que permite que compitan los tres; sin él, cada fila compite solo consigo misma. La fila Total está oculta porque un ranking no tiene sentido ahí.

        Paso 3: frente al promedio de lo seleccionado

        Marketplace se revisa por separado, así que la página ahora tiene una segmentación de canal con web y app. La medida compara cada fila con el promedio de los canales seleccionados:

        vs Selected Avg =
        VAR ThisSales = [Sales]
        VAR AvgSales = AVERAGEX(ALLSELECTED(orders[channel]), [Sales])
        RETURN
            DIVIDE(ThisSales - AvgSales, AvgSales)
        • ALLSELECTED(orders[channel]) elimina el filtro de canal de la fila pero conserva el de la segmentación, así que la lista es web y app.
        • AVERAGEX evalúa [Sales] para cada uno y los promedia: un número por canal y luego la media.
        • Las dos VAR ponen nombre a las piezas, de modo que RETURN se lee como la definición del ticket.

        Un resultado positivo significa que el canal vende más que el promedio de los canales seleccionados; uno negativo, menos. Con dos canales los resultados son espejo: uno está tan por encima del promedio como el otro por debajo.

        Qué comprobar antes del lunes

        Lee la matriz, no solo la marca verde: ¿Discount Given parece plausible junto a Sales (unos pocos puntos porcentuales, no la mitad)? ¿El ranking coincide con el orden de la columna Sales? ¿Los resultados del paso 3 suman cero entre los canales seleccionados? Comprobaciones de sentido común como estas atrapan los errores que un verificador no puede.

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