1. Faro

Nivel 8 · Conserva el filtro de la fila con KEEPFILTERS

La solicitud

De Olivia Grant, Gerente de E-commerce

“En la matriz de canales, la columna Web Sales muestra el número de la web también en la fila de la app y en la del marketplace. La gente lo lee como que la app hace $3 millones en la web, lo cual no tiene sentido. Web Sales solo debería aparecer en la fila de la web y en el total, y estar vacía en las demás.”

Tu objetivo

La matriz tiene orders[channel] en las filas y la medida dada Sales. Crea una medida llamada Web Sales: Sales del canal web que se intersecte con el canal de la fila en lugar de reemplazarlo, de modo que quede vacía en las filas de la app y del marketplace. Usa CALCULATE con KEEPFILTERS.

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

Tu medida

DAX
Visual
A matrix: rows = orders[channel]; values = [Sales], [Web 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[Web Sales] fills in when you press Check
    El visual antes de tu respuesta
    channelSalesWeb Sales
    app$2,024,728
    marketplace$837,483
    web$3,032,074
    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

    CALCULATE tiene dos formas de tratar un filtro existente sobre la misma columna: reemplazarlo (lo predeterminado) o conservarlo e intersectar (con KEEPFILTERS). La matriz de Olivia muestra lo que sale mal cuando obtienes lo predeterminado sin querer.

    En qué estás trabajando

    Esta página ejecuta un motor DAX de práctica creado para este sitio. Evalúa tu medida en cada fila de canal y en el Total y compara cada celda. En Power BI Desktop, selecciona la medida en el panel Data, edítala en la barra de fórmulas y pulsa Enter; la matriz se actualiza al instante.

    Reemplazar: lo predeterminado

    Web Sales = CALCULATE([Sales], orders[channel] = "web")

    En la fila de la app, el contexto de filtro contiene orders[channel] = "app". El argumento de filtro está en la misma columna, así que CALCULATE quita el filtro de app y pone web en su lugar. Todas las filas muestran unos $3.0 millones: el número de la web, sin importar la fila. A veces eso es exactamente lo que quieres (una columna de «referencia web» junto a cada canal). Aquí no.

    Conservar: intersectar con KEEPFILTERS

    Web Sales = CALCULATE([Sales], KEEPFILTERS(orders[channel] = "web"))

    KEEPFILTERS le dice a CALCULATE que añada el filtro nuevo encima del existente:

    Fila Filtro existente Filtro nuevo Resultado
    app app web nada en común: vacío
    marketplace marketplace web vacío
    web web web ventas de la web
    Total ninguno web ventas de la web

    Un vacío en una matriz se muestra como una celda en blanco, que es lo que pidió Olivia.

    VALUES: lo que el contexto de filtro permite ahora mismo

    Una herramienta relacionada es VALUES(column), que devuelve los valores visibles en el contexto de filtro actual: VALUES(orders[channel]) es { "app" } en la fila de la app y los tres canales en el Total. CALCULATE([Sales], FILTER(VALUES(orders[channel]), orders[channel] = "web")) da el mismo resultado, porque FILTER parte de los canales visibles, pero KEEPFILTERS lo dice con más claridad. VALUES también está detrás de dos ayudantes que usarás a menudo: HASONEVALUE(orders[channel]) es verdadero cuando hay exactamente un canal visible (cualquier fila, pero no el Total), y SELECTEDVALUE(orders[channel]) devuelve ese canal, o un vacío cuando hay varios.

    Cuando los filtros no chocan

    KEEPFILTERS solo importa cuando el argumento de filtro y el filtro existente tocan la misma columna. CALCULATE([Sales], customers[segment] = "business") en una matriz de canales nunca reemplaza el filtro de canal, porque son columnas distintas; se combinan de todos modos.

    Errores comunes

    • KEEPFILTERS fuera de CALCULATE. Solo funciona como argumento de filtro de CALCULATE o CALCULATETABLE.
    • Esperar cero en lugar de vacío. La intersección está vacía, así que el resultado es vacío. Añade + 0 solo si el ticket pide ceros; además hace que Power BI muestre filas que ocultaría.

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