La solicitud

De Laura Bennett, Gerente de Finanzas
Tu objetivo
La matriz tiene orders[channel] en las filas y la medida dada Gross Sales = SUM(order_items[line_total]). Crea una medida llamada Completed Sales que devuelva Gross Sales solo de los pedidos completados (orders[status] = "completed"), usando CALCULATE.
- Llena
[Completed Sales]en cada fila del visualpendiente - También la fila Total correctapendiente
Tu medida
- Visual
- A matrix: rows = orders[channel]; values = [Gross Sales], [Completed Sales]
- Medidas del informe
Gross Sales = SUM(order_items[line_total])
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 | Gross Sales | Completed Sales |
|---|---|---|
| app | $2,262,479 | |
| marketplace | $930,273 | |
| web | $3,323,593 | |
| Total | $6,516,346 |
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Lo que recibe Laura, y por qué
La lección
CALCULATE es la función más importante de DAX. Evalúa una expresión en un contexto de filtro
modificado: los filtros de la celda, cambiados por los argumentos de filtro que le des.
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 (una fila por canal, más el Total) y compara cada celda con la respuesta. En
Power BI Desktop seleccionarías la tabla orders en el panel Data, elegirías Home → New
measure, escribirías la fórmula en la barra de fórmulas y pulsarías Enter, y luego arrastrarías
la medida a Values de la matriz.
La forma de CALCULATE
Completed Sales = CALCULATE([Gross Sales], orders[status] = "completed")
- El primer argumento es la expresión a evaluar: aquí la medida existente
[Gross Sales]. - Todo argumento posterior es un filtro.
orders[status] = "completed"es un filtro booleano: una condición sobre una columna. DAX lo convierte en un filtro que conserva las filas deorderscuyo estado es completed.
Detrás de escena, ese filtro booleano es una abreviatura de una tabla de valores permitidos:
CALCULATE([Gross Sales], FILTER(ALL(orders[status]), orders[status] = "completed"))
Rara vez escribirás la forma larga, pero explica la regla que más importa.
Añadir o reemplazar
Para la fila de la app, el contexto de filtro de la celda contiene orders[channel] = "app".
CALCULATE añade el filtro de estado. Los dos están en columnas distintas, así que se aplican
ambos: pedidos de la app que están completados.
Si un argumento de filtro nombra una columna que ya está filtrada, CALCULATE reemplaza ese
filtro en lugar de combinarse con él. CALCULATE([Gross Sales], orders[channel] = "web") muestra
el número de la web en la fila de la app, en la del marketplace y en el Total, porque el filtro de
canal de la fila se sobrescribe. Tenlo presente; es la razón por la que funcionan los porcentajes
del total, y la razón por la que un filtro descuidado pone el mismo número en todas las filas.
Por qué una medida y no un filtro en el visual
Podrías arrastrar status al panel Filters y ponerlo en completed. Eso cambia todas las medidas
del visual, incluida Gross Sales, que Laura quiere conservar. Un filtro de CALCULATE pertenece a
una medida, viaja con ella a todas las páginas y nadie puede desmarcarlo por accidente.
Errores comunes
- Texto equivocado. Las comparaciones de texto en DAX ignoran las mayúsculas, pero un error
como
"complete"no coincide con nada y devuelve un vacío. - Comillas simples para texto.
'completed'es un nombre de tabla en DAX. El texto va entre comillas dobles. - SUM de una medida.
SUM([Gross Sales])falla: SUM necesita una columna. Una medida ya es un número; usa[Gross Sales]sola.
¡Linterna encendida!
Practicaste: calculatefilter argumentboolean filterfilter contextmeasure
- Resuelto
- Sin pistas
- Al primer intento
