1. Faro

Nivel 8 · Desafío final: una página de canales que sobrevive a cada clic

La solicitud

De Brian Foster, Jefe de la app móvil

“La semana que viene voy a presentar el canal app. En la página de canales elegiré app en la segmentación y repasaré las categorías. Necesito mostrar dos cosas por categoría: cómo se reparten las ventas propias de app entre categorías, y cuánto de las ventas de cada categoría pasa por la app. Y una etiqueta que pueda leer en voz alta y diga qué canal es y su participación.”

Tu objetivo

Paso 1 de 3. Crea una medida llamada Category Share: las Sales de cada categoría divididas entre las Sales de todas las categorías, para el canal y el año que seleccionan las segmentaciones. En la fila Total es 100 %.

  • Llena [Category Share] en cada fila del visualpendiente
  • También la fila Total correctapendiente

Paso 1 · tu medida

DAX
Visual
A matrix: rows = products[category]; values = [Sales], [Category Share]
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[Category Share] fills in when you press Check
    El visual antes de tu respuesta
    categorySalesCategory Share
    Decor127,955.33
    Furniture215,193.5
    Kitchen133,000.84
    Lighting174,926.47
    Outdoor227,093.18
    Textiles117,354.86
    Total995,524.18

    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 = products[category]; values = [Sales], [Channel Share]
    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[Channel Share] fills in when you press Check
      El visual antes de tu respuesta
      categorySalesChannel Share
      Decor127,955.33
      Furniture215,193.5
      Kitchen133,000.84
      Lighting174,926.47
      Outdoor227,093.18
      Textiles117,354.86
      Total995,524.18

      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 = products[category]; values = [Sales], [Share Label]
      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[Share Label] fills in when you press Check
        El visual antes de tu respuesta
        categorySalesShare Label
        Decor127,955.33
        Furniture215,193.5
        Kitchen133,000.84
        Lighting174,926.47
        Outdoor227,093.18
        Textiles117,354.86
        Total995,524.18

        Mote revisa tu resultado

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

        La lección

        Este desafío junta el capítulo en una página: segmentaciones que lo filtran todo, dos medidas que ignoran cada una exactamente un filtro a propósito y una etiqueta que dice lo que seleccionó el lector.

        Dónde estás trabajando

        Un informe de práctica, no Power BI, que solo funciona en Windows. Las segmentaciones (año 2025, canal app) están listadas sobre la matriz de categorías, y un motor DAX creado para este sitio evalúa tus medidas en cada celda. Cada paso comprueba la última medida del editor; conserva las anteriores.

        En Power BI Desktop añadirías una Segmentación (Slicer) para orders[channel] y otra para 'Date'[Year], crearías cada medida con Inicio → Nueva medida (Home → New measure) y darías formato a las participaciones con Herramientas de medida → Formato → Porcentaje (Measure tools → Format → Percentage) con la medida seleccionada. La etiqueta va en una tarjeta, o en el título de un visual con Dar formato al visual → General → Título → fx → Valor de campo (Format visual → General → Title → fx → Field value).

        Dos participaciones, dos denominadores

        Ambas participaciones dividen [Sales] entre unas Sales mayores. La única diferencia es qué filtro descarta la mayor:

        medida conserva quita responde
        Category Share canal, año categoría ¿de dónde vienen las ventas de app?
        Channel Share categoría, año canal ¿cuánto de cada categoría pasa por la app?
        Category Share = DIVIDE([Sales], CALCULATE([Sales], REMOVEFILTERS(products[category])))

        Como ninguna medida nombra el año, la segmentación de año llega a ambos denominadores. Cambia la segmentación a 2024 y ambas participaciones son de 2024; cambia el canal a web y ambas tratan de web. Eso es lo que significa “consciente de las segmentaciones”: la medida solo anula lo que tiene que anular.

        DIVIDE en lugar de / devuelve BLANK cuando el denominador está vacío o es cero (un canal sin ventas en una categoría) en lugar de Infinity o NaN.

        Los números de app en 2025

        categoría ventas de app Category Share Channel Share
        Outdoor $227,093 22.8 % 44.8 %
        Furniture $215,194 21.6 % 37.5 %
        Textiles $117,355 11.8 % 46.7 %
        Total $995,524 100 % 43.3 %

        Furniture es una parte grande de lo que vende la app, pero es la categoría más débil de la app en relación con los otros canales: un punto útil para la charla de Brian.

        La etiqueta

        Share Label = SELECTEDVALUE(orders[channel], "All channels") & ": " & FORMAT([Channel Share], "0.0%") & " of sales"

        FORMAT convierte un número en texto con una cadena de formato: "0.0%" multiplica por 100 y añade un decimal y el signo de porcentaje. Las medidas de texto no se pueden sumar ni graficar, pero son exactamente lo que necesita una tarjeta o un título dinámico.

        Errores comunes

        • Quitar una tabla en lugar de una columna. ALL(orders) descarta también el año que llega a orders a través de la tabla Date.
        • Intercambiar los denominadores. Si la fila Total de Category Share no es 100 %, se quitó el filtro equivocado.
        • Dividir con /. Bien hasta que una segmentación deja vacío un denominador y una celda muestra Infinity.

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