1. Faro

Nivel 4 · Filtra por una medida con FILTER

La solicitud

De Jessica Moore, Analista de Marketing

“Estamos probando entrega premium gratuita en pedidos de más de $500. Antes de comprometernos, necesito saber cuánto de los ingresos de diciembre vino de pedidos de ese tamaño, por canal. El total del pedido, no las líneas sueltas: un sofá de $300 más una alfombra de $250 es un pedido de $550.”

Tu objetivo

La matriz tiene orders[channel] en las filas y una segmentación 'Date'[Year Month] en 2025-12. Crea una medida llamada Big Order Sales: Sales de los pedidos completados cuyo propio Sales supera 500. Usa CALCULATE con FILTER sobre VALUES(orders[order_id]).

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

Tu medida

DAX
Visual
A matrix: rows = orders[channel]; values = [Sales], [Big Order Sales]
Segmentaciones
'Date'[Year Month] = 2025-12
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[Big Order Sales] fills in when you press Check
    El visual antes de tu respuesta
    channelSalesBig Order Sales
    app$130,426
    marketplace$45,739
    web$112,181
    Total$288,346

    Mote revisa tu resultado

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

    La lección

    Un filtro booleano como orders[status] = "completed" prueba una columna. La condición de Jessica es distinta: un pedido cuenta cuando su total supera $500, y el total es una medida calculada a partir de muchas líneas de pedido. Para eso necesitas un filtro de tabla construido con FILTER.

    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 celda de la matriz y la comprueba. En Power BI Desktop: Home → New measure, escribe la fórmula y añade junto a la matriz una segmentación sobre 'Date'[Year Month] en 2025-12.

    FILTER devuelve una tabla

    FILTER(VALUES(orders[order_id]), [Sales] > 500)
    • VALUES(orders[order_id]) devuelve los ID de pedido visibles en el contexto de filtro actual: un canal, un mes. Es una tabla de una columna.
    • FILTER(table, condition) es un iterador: evalúa la condición una vez por fila y conserva las filas donde es verdadera.
    • [Sales] > 500 se evalúa para un pedido a la vez. Cuando una medida se llama dentro de un iterador, DAX convierte primero la fila actual en un filtro (transición de contexto), así que [Sales] ve solo las líneas de ese pedido.

    El resultado es una tabla de ID de pedido. Pasada a CALCULATE, se convierte en un filtro como cualquier otro:

    Big Order Sales =
    CALCULATE(
        [Sales],
        FILTER(VALUES(orders[order_id]), [Sales] > 500)
    )

    ¿Por qué no un filtro booleano?

    CALCULATE([Sales], [Sales] > 500) se rechaza: un filtro booleano debe tratar de columnas, y [Sales] es una medida cuyo valor depende del contexto. Y order_items[line_total] > 500 es un filtro válido que responde otra pregunta: conserva líneas caras, así que un pedido de $550 hecho de dos artículos más baratos queda fuera.

    Itera la tabla más pequeña

    FILTER hace trabajo real por cada fila que visita. Aquí visita como mucho unos 330 pedidos de diciembre por celda. FILTER(order_items, …) con una medida dentro visitaría cada línea de pedido, cada una con su propia transición de contexto, que es lo que hace que los informes se arrastren. VALUES de una columna clave del lado «uno» da la misma respuesta con muchos menos pasos. El mismo consejo vale en Power BI: nunca hagas FILTER de toda una tabla de hechos cuando basta una columna.

    Errores comunes

    • FILTER(orders, …) en lugar de VALUES(orders[order_id]). Da el mismo número aquí, pero itera filas enteras y convierte cada columna de orders en un filtro. Es más pesado, y se vuelve difícil de predecir cuando otras medidas empiezan a quitar filtros. Una columna clave basta.
    • Usar la medida fuera de CALCULATE. FILTER(…) sola es una tabla, no un número. Tiene que ir dentro de CALCULATE (o de una función como COUNTROWS).
    • Probar líneas en lugar de pedidos. Lee el ticket: «pedidos de más de $500» trata de totales.

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