1. Faro

Nivel 5 · Porcentaje del total con ALL

La solicitud

De Rachel Kim, Gerente de Categoría

“Para la revisión de categorías necesito la cuota de cada categoría sobre las ventas de la tienda, como porcentaje junto a los dólares. Si Furniture es el 24 % de todo lo que vendemos, quiero ver 24 %. Y debe seguir cuadrando cuando alguien filtre la página a un año.”

Tu objetivo

La matriz tiene products[category] en las filas y la medida dada Sales. Crea una medida llamada Share of Sales: Sales de la categoría dividido entre Sales de todos los productos. Usa DIVIDE, y CALCULATE con ALL(products) para el denominador.

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

Tu medida

DAX
Visual
A matrix: rows = products[category]; values = [Sales], [Share of Sales]
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 of Sales] fills in when you press Check
    El visual antes de tu respuesta
    categorySalesShare of Sales
    Decor$822,667
    Furniture$1,393,164
    Kitchen$799,150
    Lighting$1,001,844
    Outdoor$1,297,802
    Textiles$579,658
    Total$5,894,284

    Mote revisa tu resultado

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

    La lección

    Un porcentaje del total es una fracción cuya parte de arriba y de abajo viven en contextos de filtro distintos. La de arriba es el Sales propio de la celda. La de abajo es la misma medida con el filtro de categoría quitado. ALL es la forma de quitarlo.

    En qué estás trabajando

    Esta página ejecuta un motor DAX de práctica creado para este sitio, que evalúa tu medida en cada celda de la matriz y la comprueba. En Power BI Desktop: Home → New measure, escribe la fórmula, y con la medida seleccionada configura Measure tools → Format → Percentage para que 0.236 se muestre como 23.6 %.

    ALL quita filtros

    Dentro de CALCULATE, ALL(products) es un modificador de filtro: quita todos los filtros sobre la tabla products (categoría, subcategoría, nombre de producto) antes de evaluar la expresión.

    Share of Sales =
    DIVIDE(
        [Sales],
        CALCULATE([Sales], ALL(products))
    )

    Para la fila Lighting:

    • [Sales] ve category = Lighting: unos $1.0 millones.
    • CALCULATE([Sales], ALL(products)) no ve filtro de producto: unos $5.9 millones.
    • DIVIDE devuelve unos 0.17, mostrado como 17.0 %.

    En la fila Total ambas mitades no ven filtro de producto, así que la cuota es 100 %.

    ALL sobre una tabla o sobre una columna

    ALL(products) limpia los filtros de todas las columnas de la tabla. ALL(products[category]) limpia solo el filtro de categoría, así que un filtro de subcategoría o de producto sobreviviría. Para una matriz de categorías ambos dan el mismo resultado; la diferencia se nota cuando un visual tiene varias columnas de producto, que es el siguiente nivel.

    ALL toca solo la tabla o columna que nombras. Una segmentación sobre 'Date'[Year] o sobre orders[channel] sigue aplicándose al denominador, que es lo que Rachel quiere: cuando la página está filtrada a 2025, las cuotas son cuotas de las ventas de 2025 y siguen sumando 100 %. Para ignorar todos los filtros del informe escribirías ALL() o REMOVEFILTERS() sin argumento, lo cual rara vez es lo que necesita una cuota.

    Por qué DIVIDE

    DIVIDE(a, b) devuelve un vacío en lugar de un error cuando b es cero o está vacío. Un / normal mostraría «Infinity» o un error en una celda vacía. Usa DIVIDE para cada razón de un informe.

    Errores comunes

    • Los mismos filtros en ambas mitades. DIVIDE([Sales], [Sales]) es 100 % en todas partes.
    • ALL sobre la tabla de hechos. ALL(order_items) quita demasiado: los filtros de una tabla de hechos incluyen los de todas las tablas a las que apunta (products, orders, customers, Date), así que la segmentación de año también desaparece y las cuotas ya no suman 100 % en una página filtrada. Quita el filtro donde vive.
    • Fijar el total a mano. Escribir 5,894,284 como denominador se rompe en cuanto alguien mueve una segmentación.

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