1. Faro

Nivel 6 · Porcentaje dentro de la categoría con ALLEXCEPT

La solicitud

De Brian Foster, Comprador de Iluminación

“Mi página tiene una segmentación de Category en Lighting y una matriz de subcategorías. Necesito la cuota de cada subcategoría dentro de Lighting, no de toda la tienda: los colgantes frente a toda la iluminación. Otros compradores reutilizarán la página con su propia categoría, así que tiene que seguir la segmentación.”

Tu objetivo

La matriz tiene products[subcategory] en las filas y una segmentación products[category] en Lighting. Crea una medida llamada Share of Category: Sales de la subcategoría dividido entre Sales de toda su categoría. Quita todos los filtros de producto salvo el de categoría, con ALLEXCEPT(products, products[category]) o REMOVEFILTERS(products[subcategory]).

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

Tu medida

DAX
Visual
A matrix: rows = products[subcategory]; values = [Sales], [Share of Category]
Segmentaciones
products[category] = Lighting
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 Category] fills in when you press Check
    El visual antes de tu respuesta
    subcategorySalesShare of Category
    Floor Lamps$93,964
    Pendants$392,054
    Sconces$312,965
    Table Lamps$202,861
    Total$1,001,844

    Mote revisa tu resultado

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

    La lección

    El último nivel dividía entre toda la tienda. Brian necesita un denominador más estrecho: la categoría padre de cada subcategoría. Eso significa quitar algunos filtros de producto y conservar otros.

    En qué estás trabajando

    Esta página ejecuta un motor DAX de práctica creado para este sitio. Evalúa tu medida para cada fila de subcategoría, con la segmentación de Lighting aplicada, y comprueba cada celda. En Power BI Desktop: Home → New measure, escribe la fórmula, configura Measure tools → Format → Percentage y añade una segmentación con products[category].

    Tres formas de quitar filtros

    Modificador Quita Conserva
    ALL(products) todos los filtros sobre products nada sobre products
    ALLEXCEPT(products, products[category]) todos los filtros sobre products el filtro de categoría
    REMOVEFILTERS(products[subcategory]) el filtro de subcategoría todo lo demás

    REMOVEFILTERS hace exactamente lo que hace ALL dentro de CALCULATE; el nombre más nuevo dice para qué sirve. ALL también puede devolver una tabla con cada valor (COUNTROWS(ALL(products))), cosa que REMOVEFILTERS no puede.

    La medida

    Share of Category =
    DIVIDE(
        [Sales],
        CALCULATE([Sales], ALLEXCEPT(products, products[category]))
    )

    Para la fila Pendants el contexto de filtro de la celda es: category = Lighting (segmentación), subcategory = Pendants (fila). ALLEXCEPT quita el filtro de subcategoría y conserva el de categoría, así que el denominador son todas las ventas de Lighting, unos $1.0 millones. Pendants vendió unos $392,000, así que la cuota es 39.1 %. Las cuatro filas de Lighting suman 100 %.

    El mismo resultado escrito al revés:

    Share of Category =
    DIVIDE([Sales], CALCULATE([Sales], REMOVEFILTERS(products[subcategory])))

    ¿Cuál elegir? ALLEXCEPT dice «conserva solo esto», lo que sigue siendo correcto si alguien añade después el nombre del producto a la matriz. REMOVEFILTERS dice «quita solo esto», lo que mantiene un filtro sobre, digamos, products[is_active] que un filtro de página podría fijar. Elige según lo que el ticket diga que debe sobrevivir.

    Qué pasa con ALL(products)

    ALL borra también la segmentación, así que el denominador pasa a ser todas las ventas de la tienda (unos $5.9 millones) y Pendants muestra 6.7 %. Los números parecen plausibles, por eso este error sobrevive en informes publicados. Comprueba siempre que las cuotas sumen 100 % donde deben.

    Errores comunes

    • ALL(products[category]). Quita el único filtro que querías conservar y deja el filtro de subcategoría, así que todas las filas muestran 100 %.
    • Varias categorías en la segmentación. ALLEXCEPT conserva la segmentación tal como está, así que con Lighting y Outdoor marcadas el denominador es ambas categorías juntas. Una matriz con la categoría como fila exterior lo arregla: cada fila tiene entonces una categoría.

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