La solicitud

De Olivia Grant, Gerente de E-commerce
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
- 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…
Solución de referencia
| channel | Sales | Web 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.
Lo que recibe Olivia, y por qué
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
+ 0solo si el ticket pide ceros; además hace que Power BI muestre filas que ocultaría.
¡Linterna encendida!
Practicaste: keepfilterscalculatefilter overwritevaluesfilter context
- Resuelto
- Sin pistas
- Al primer intento
