1. Faro

Nivel 9 · Desafío final: el informe interanual del canal de la app

La solicitud

De Andrew Wallace, Jefe de Mobile

“Estoy pidiendo presupuesto para reconstruir el checkout de la app, y el CFO quiere pruebas de que la app crece, no de que solo tuvo un buen Black Friday. Para cada mes de 2025, solo ventas de la app: las ventas del año pasado, el crecimiento mensual y el crecimiento del acumulado del año hasta ahora.”

Tu objetivo

Paso 1 de 3. Crea una medida llamada Sales LY: Sales del mismo periodo del año pasado, con CALCULATE y SAMEPERIODLASTYEAR('Date'[Date]).

  • Llena [Sales LY] en cada fila del visualpendiente
  • También la fila Total correctapendiente

Paso 1 · tu medida

DAX
Visual
A matrix: rows = 'Date'[Month]; values = [Sales], [Sales LY]
Segmentaciones
'Date'[Year] = 2025orders[channel] = 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[Sales LY] fills in when you press Check
    El visual antes de tu respuesta
    MonthSalesSales LY
    Jan$38,566
    Feb$46,574
    Mar$80,375
    Apr$91,823
    May$94,842
    Jun$97,194
    Jul$77,398
    Aug$71,746
    Sep$67,690
    Oct$80,288
    Nov$118,602
    Dec$130,426
    Total$995,524

    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 = 'Date'[Month]; values = [Sales], [Sales YoY %]
    Segmentaciones
    'Date'[Year] = 2025orders[channel] = 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[Sales YoY %] fills in when you press Check
      El visual antes de tu respuesta
      MonthSalesSales YoY %
      Jan$38,566
      Feb$46,574
      Mar$80,375
      Apr$91,823
      May$94,842
      Jun$97,194
      Jul$77,398
      Aug$71,746
      Sep$67,690
      Oct$80,288
      Nov$118,602
      Dec$130,426
      Total$995,524

      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 = 'Date'[Month]; values = [Sales], [YTD Growth %]
      Segmentaciones
      'Date'[Year] = 2025orders[channel] = 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[YTD Growth %] fills in when you press Check
        El visual antes de tu respuesta
        MonthSalesYTD Growth %
        Jan$38,566
        Feb$46,574
        Mar$80,375
        Apr$91,823
        May$94,842
        Jun$97,194
        Jul$77,398
        Aug$71,746
        Sep$67,690
        Oct$80,288
        Nov$118,602
        Dec$130,426
        Total$995,524

        Mote revisa tu resultado

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

        La lección

        Andrew necesita una historia de crecimiento que sobreviva a un CFO escéptico. Eso requiere tres columnas: cómo era el año pasado, cómo se compara cada mes y dónde está el año hasta ahora. Cada una es uno de los patrones de este capítulo, y cada una se apoya en la anterior.

        En qué estás trabajando

        Esta página ejecuta un motor DAX de práctica creado para este sitio. Cada paso evalúa tu medida más reciente en la matriz (meses en las filas, 2025 y el canal de la app desde las segmentaciones) y comprueba cada celda. Mantén las medidas anteriores en el editor: las posteriores las usan. En Power BI Desktop, crea cada una con Home → New measure, da formato de porcentaje a las dos medidas de crecimiento y añade las dos segmentaciones.

        Paso 1: el año pasado, el mismo periodo

        Sales LY = CALCULATE([Sales], SAMEPERIODLASTYEAR('Date'[Date]))

        Los filtros del calendario (la fila Month, la segmentación de 2025) se reemplazan por las fechas del año pasado, porque la tabla Date está marcada. La segmentación de canal está en orders, otra tabla, así que se queda: la medida compara app con app.

        Paso 2: crecimiento mensual

        Sales YoY % =
        VAR ly = [Sales LY]
        RETURN
            DIVIDE([Sales] - ly, ly)

        La variable guarda el valor del año pasado una vez; DIVIDE protege los meses en que el año pasado está vacío.

        Paso 3: crecimiento del acumulado del año

        Un solo mes puede engañar: una promoción fuerte el año pasado hace que el mes de este año parezca débil. La comparación del acumulado del año lo suaviza. Necesita dos totales acumulados, así que dos variables:

        YTD Growth % =
        VAR ytd = TOTALYTD([Sales], 'Date'[Date])
        VAR ytdLY = CALCULATE([Sales], DATESYTD(SAMEPERIODLASTYEAR('Date'[Date])))
        RETURN
            DIVIDE(ytd - ytdLY, ytdLY)

        ytdLY anida las funciones: desplaza el mes visible un año hacia atrás y luego lo extiende al 1 de enero. Escribirlas como dos filtros CALCULATE separados intersectaría las fechas de 2025 con las de 2024 y devolvería un vacío.

        Leer el informe

        La columna mensual tiene una celda roja: noviembre, −7.1 %. Tomada sola hundiría la petición de presupuesto. La columna YTD la responde: la app estuvo por delante de 2024 en cada punto del año y terminó un 53.1 % arriba. Preséntalas lado a lado, el crecimiento mensual para ver dónde cambiaron las cosas, el crecimiento YTD para ver dónde está el año, y la caída de noviembre se convierte en una nota al pie.

        Errores comunes

        • Poner el filtro de canal dentro de las medidas. Funciona para esta página pero hace que cada medida sea solo de la app. Déjalo a la segmentación para que las mismas medidas sirvan a la web y al marketplace.
        • Crecimiento en la fila Total de la columna mensual. Compara años completos; no es un promedio de las doce tasas mensuales.
        • Años fijados a mano. 'Date'[Year] = 2024 en lugar de SAMEPERIODLASTYEAR se rompe cuando la segmentación pasa a 2024.

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