La solicitud

De Laura Chen, Analista de precios
Tu objetivo
El informe tiene Sales (neto, pedidos completados) y Gross Sales (quantity × unit_price de lista, pedidos completados). La versión de Laura está en el editor como comentario. Escribe Discount Share = (Gross Sales − Sales) ÷ Gross Sales, vacío cuando Gross Sales no sea mayor que cero, guardando Gross Sales y Sales en variables para que cada una se evalúe una vez.
- Llena
[Discount Share]en cada fila del visualpendiente - También la fila Total correctapendiente
Tu medida
- Visual
- A matrix: rows = products[category]; values = [Gross Sales], [Sales], [Discount Share]
- Medidas del informe
Sales = CALCULATE(SUM(order_items[line_total]), orders[status] = "completed")Gross Sales = CALCULATE(SUMX(order_items, order_items[quantity] * order_items[unit_price]), 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
| category | Gross Sales | Sales | Discount Share |
|---|---|---|---|
| Decor | 839,177.12 | 822,667.2 | |
| Furniture | 1,421,945 | 1,393,163.85 | |
| Kitchen | 817,460.81 | 799,150.28 | |
| Lighting | 1,021,049.99 | 1,001,843.51 | |
| Outdoor | 1,324,874.49 | 1,297,801.77 | |
| Textiles | 591,561.12 | 579,657.83 | |
| Total | 6,016,068.53 | 5,894,284.44 |
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
La medida de Laura es correcta, y hace el mismo trabajo tres veces. En una matriz con seis categorías y un Total, son 21 evaluaciones de Gross Sales donde bastarían 7. En una página con una docena de medidas así y millones de filas, se acumula.
Dónde estás trabajando
Esta página es un informe de práctica, no Power BI: una matriz de categorías con Gross Sales, Sales y tu medida. El motor evalúa tu medida en cada celda y compara cada una con el valor esperado; comprueba los números, así que las variables quedan a tu elección. En Power BI Desktop: selecciona la medida en el panel Datos (Data) y edítala en la barra de fórmulas; Shift+Enter añade una línea nueva.
VAR y RETURN
Discount Share =
VAR gross = [Gross Sales]
VAR net = [Sales]
RETURN IF(gross > 0, DIVIDE(gross - net, gross))
VAR nombre = expresiónevalúa la expresión una vez, donde se define, en el contexto de filtro de la celda, y guarda el resultado.- Puedes tener tantas VAR como quieras; cada una puede usar las de arriba.
RETURNcierra la lista y da el resultado de la medida, construido a partir de las variables.
Los nombres de las variables son tuyos. No pueden contener espacios ni chocar con el nombre de una tabla,
y los nombres cortos y simples (gross, net, share) se leen mejor.
Más rápido, y más fácil de leer
El motor de Power BI a veces se da cuenta de que la misma medida aparece dos veces y reutiliza el
resultado, pero no siempre, sobre todo cuando hay filtros o iteradores. Una variable lo garantiza. La
ventaja mayor suele ser la legibilidad: cada línea nombra un paso, así que la siguiente persona (o tú,
dentro de seis meses) puede ver qué hace la medida, y puedes depurarla devolviendo una sola variable:
RETURN gross muestra lo que da ese paso en cada celda.
Las variables quedan fijas una vez establecidas
Una variable es un valor, no una fórmula. Aquí es lo que quieres. Sorprende a la gente cuando CALCULATE viene después:
Web Share =
VAR total = [Sales]
RETURN DIVIDE(CALCULATE(total, orders[channel] = "web"), total)
Esto devuelve 100 % en todas partes: total ya se había calculado antes de que CALCULATE cambiara el
filtro. Pon la medida, no la variable, dentro de CALCULATE: CALCULATE([Sales], orders[channel] = "web").
DIVIDE en lugar de /
DIVIDE(a, b) devuelve un vacío cuando b es cero o está vacío, en lugar de un error o infinito. Aquí el
IF ya lo protege, pero DIVIDE es el hábito que conviene mantener: tiene además un tercer argumento
opcional para lo que devolver en lugar de un vacío.
Errores comunes
- Una variable dentro de CALCULATE esperando que cambie con el nuevo filtro.
- Olvidar RETURN. Una medida con VAR debe terminar con RETURN y una expresión.
- Espacios en los nombres de variable.
VAR gross salesno se interpreta; usagrossogross_sales.
¡Linterna encendida!
Practicaste: varreturndivideperformancereadabilitymeasure
- Resuelto
- Sin pistas
- Al primer intento
