La solicitud

De Patrick Owens, Director de operaciones (COO)
Tu objetivo
Paso 1 de 3. Paso 1. La antigua Discounted Sales está en el editor como comentario. Escribe de nuevo Discounted Sales con los mismos números (pedidos completados, líneas con discount_pct mayor que 0, suma de order_items[line_total]) usando CALCULATE con filtros de columna y sin FILTER. La matriz tiene 'Date'[Year] en las filas.
- Llena
[Discounted Sales]en cada fila del visualpendiente - También la fila Total correctapendiente
Paso 2 de 3. Paso 2. Conserva Discounted Sales y añade Discounted Share = Discounted Sales ÷ Sales, vacío cuando Sales no sea mayor que cero. Guarda ambas medidas en variables para que cada una se evalúe una vez.
- Llena
[Discounted Share]en cada fila del visualpendiente - También la fila Total correctapendiente
Paso 3 de 3. Paso 3. El paso Source es cada línea de pedido del 8 de diciembre de 2025, tal como se importa de SQL Server con todas sus columnas. El informe solo necesita las líneas con descuento: conserva las filas con discount_pct mayor que 0 y conserva solo order_id, product_id, quantity y discount_pct, en ese orden.
- Muestra exactamente
order_idproduct_idquantitydiscount_pctpendiente - 14 filaspendiente
Paso 1 · tu medida
- Visual
- A matrix: rows = 'Date'[Year]; values = [Sales], [Discounted 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
| Year | Sales | Discounted Sales |
|---|---|---|
| 2,023 | 1,600,510.52 | |
| 2,024 | 1,993,604.39 | |
| 2,025 | 2,300,169.53 | |
| Total | 5,894,284.44 |
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Paso 2 · tu medida
- Visual
- A matrix: rows = 'Date'[Year]; values = [Sales], [Discounted Share]
- 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
| Year | Sales | Discounted Share |
|---|---|---|
| 2,023 | 1,600,510.52 | |
| 2,024 | 1,993,604.39 | |
| 2,025 | 2,300,169.53 | |
| Total | 5,894,284.44 |
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Paso 3 · tus pasos de consulta
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct | status | channel | |
|---|---|---|---|---|---|---|---|---|
| 1 | 28918 | 12448 | 135 | 6 | 159 | 0 | completed | app |
| 2 | 28919 | 12448 | 129 | 3 | 109 | 0 | completed | app |
| 3 | 28920 | 12448 | 180 | 2 | 20.99 | 0 | completed | app |
| 4 | 28921 | 12448 | 155 | 3 | 169 | 0 | completed | app |
| 5 | 28922 | 12449 | 185 | 1 | 12.99 | 10 | completed | web |
| 6 | 28923 | 12449 | 186 | 1 | 20.99 | 10 | completed | web |
| 7 | 28924 | 12449 | 198 | -1 | 44.99 | 10 | completed | web |
| 8 | 28925 | 12449 | 136 | 1 | 159 | 10 | completed | web |
| 9 | 28926 | 12450 | 185 | 1 | 12.99 | 0 | completed | web |
| 10 | 28927 | 12451 | 166 | 1 | 28.99 | 0 | completed | marketplace |
| 11 | 28928 | 12451 | 115 | 2 | 1599 | 0 | completed | marketplace |
| 12 | 28929 | 12452 | 118 | 1 | 1609 | 0 | completed | marketplace |
| 13 | 28930 | 12452 | 166 | 1 | 28.99 | 0 | completed | marketplace |
| 14 | 28931 | 12453 | 121 | 3 | 31.99 | 20 | completed | app |
| 15 | 28932 | 12454 | 160 | 1 | 70.99 | 0 | completed | app |
| 16 | 28933 | 12454 | 156 | 1 | 53.99 | 0 | completed | app |
| 17 | 28934 | 12454 | 180 | 1 | 20.99 | 0 | completed | app |
| 18 | 28935 | 12455 | 155 | 2 | 169 | 0 | completed | app |
| 19 | 28936 | 12455 | 166 | 2 | 28.99 | 0 | completed | app |
| 20 | 28937 | 12456 | 189 | 1 | 76.99 | 0 | completed | web |
| 21 | 28938 | 12456 | 198 | 2 | 44.99 | 0 | completed | web |
| 22 | 28939 | 12456 | 180 | 1 | 20.99 | 0 | completed | web |
| 23 | 28940 | 12456 | 193 | 1 | 19.99 | 0 | completed | web |
| 24 | 28941 | 12457 | 152 | 2 | 13.99 | 0 | completed | marketplace |
| 25 | 28942 | 12457 | 142 | 1 | 38.99 | 0 | completed | marketplace |
| 26 | 28943 | 12457 | 128 | 1 | 54.99 | 0 | completed | marketplace |
| 27 | 28944 | 12458 | 193 | 1 | 19.99 | 0 | completed | app |
| 28 | 28945 | 12458 | 146 | 1 | 16.99 | 0 | completed | app |
| 29 | 28946 | 12459 | 193 | 1 | 19.99 | 0 | completed | web |
| 30 | 28947 | 12460 | 173 | 2 | 139 | 0 | completed | web |
| 31 | 28948 | 12460 | 171 | 3 | 27.99 | 0 | completed | web |
| 32 | 28949 | 12460 | 138 | 2 | 199 | 0 | completed | web |
| 33 | 28950 | 12461 | 171 | 1 | 27.99 | 20 | completed | marketplace |
| 34 | 28951 | 12462 | 151 | 1 | 60.99 | 20 | completed | app |
| 35 | 28952 | 12462 | 166 | 1 | 28.99 | 20 | completed | app |
| 36 | 28953 | 12463 | 141 | 1 | 13.99 | 0 | completed | web |
| 37 | 28954 | 12464 | 182 | 2 | 17.99 | 0 | completed | web |
| 38 | 28955 | 12464 | 193 | 1 | 19.99 | 0 | completed | web |
| 39 | 28956 | 12464 | 122 | 1 | 29.99 | 0 | completed | web |
| 40 | 28957 | 12464 | 138 | 1 | 199 | 0 | completed | web |
| 41 | 28958 | 12465 | 151 | 2 | 60.99 | 20 | completed | web |
| 42 | 28959 | 12465 | 158 | 1 | 179 | 20 | completed | web |
| 43 | 28960 | 12465 | 190 | 1 | 43.99 | 20 | completed | web |
| 44 | 28961 | 12465 | 199 | 1 | 104.99 | 20 | completed | web |
| 45 | 28962 | 12466 | 130 | 1 | 409 | 0 | completed | web |
| 46 | 28963 | 12467 | 165 | 1 | 25.99 | 20 | completed | app |
| 47 | 28964 | 12467 | 157 | 4 | 109 | 20 | completed | app |
| 48 | 28965 | 12468 | 181 | 1 | 179 | 0 | completed | web |
| 49 | 28966 | 12468 | 193 | 3 | 19.99 | 0 | completed | web |
| 50 | 28967 | 12468 | 172 | 1 | 18.99 | 0 | completed | web |
| 51 | 28968 | 12469 | 140 | 2 | 329 | 0 | completed | marketplace |
| 52 | 28969 | 12469 | 110 | 1 | 179 | 0 | completed | marketplace |
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Comprobar. Mote completa tu respuesta y la compara con lo que necesita el informe.
Lo que recibe Patrick, y por qué
La lección
El informe de Patrick es lento por las tres razones habituales a la vez: una medida que trabaja fila por fila, una medida que se repite y una importación que lleva mucho más de lo que nadie lee. Este caso arregla las tres, en el orden en que lo harías en el trabajo.
Dónde estás trabajando
Un informe de práctica y un editor de Power Query de práctica, no Power BI. Los pasos 1 y 2 son medidas
DAX comprobadas celda por celda en una matriz con 'Date'[Year] en las filas; el paso 1 comprueba además
que FILTER ya no esté. El paso 3 es una lista de Pasos aplicados (Applied Steps) sobre las líneas de
pedido importadas, comprobada contra la tabla esperada.
En Power BI Desktop: antes de empezar, Optimizar → Analizador de rendimiento → Iniciar grabación → Actualizar objetos visuales (Optimize → Performance analyzer → Start recording → Refresh visuals) y anota los tiempos de la consulta DAX. Edita las medidas en la barra de fórmulas, abre la consulta con Inicio → Transformar datos (Home → Transform data) y vuelve a grabar al final.
Paso 1: de FILTER a filtros de columna
La medida antigua recorre cada línea de pedido, busca el estado del pedido con RELATED, conserva las líneas completadas con descuento y luego las suma. Ambas condiciones son pruebas sencillas sobre una columna cada una, que es exactamente para lo que sirven los argumentos de filtro de CALCULATE:
Discounted Sales = CALCULATE(SUM(order_items[line_total]),
order_items[discount_pct] > 0, orders[status] = "completed")
El filtro de estado sobre orders llega a order_items por la relación, y el año de las filas de la
matriz le llega por 'Date' → orders. Mismos números, un solo recorrido del motor de almacenamiento.
Paso 2: una participación sin repeticiones
Discounted Share =
VAR discounted = [Discounted Sales]
VAR total = [Sales]
RETURN IF(total > 0, DIVIDE(discounted, total))
Cada medida se evalúa una vez por celda y se reutiliza. DIVIDE protege la fila Total y cualquier año sin ventas. Dale formato de porcentaje en Power BI con Herramientas de medida → Formato → Porcentaje (Measure tools → Format → Percentage).
Paso 3: importar solo las líneas con descuento
El origen trae ocho columnas por cada línea del día. El informe necesita cuatro, y solo de las líneas con descuento:
Filter rows: discount_pct > 0
Choose columns: order_id, product_id, quantity, discount_pct
Ambos pasos se pliegan en la consulta SQL que envía Power Query, así que SQL Server devuelve el pequeño resultado y Power BI nunca almacena el resto. Filtra primero: una vez elegidas las cuatro columnas, el filtro aquí sigue funcionando, pero en informes reales la columna por la que filtras suele ser una que descartas.
Qué comprobar después
Vuelve a grabar con el Analizador de rendimiento. El tiempo de la consulta DAX de los visuales de descuentos debería bajar, la actualización debería ser más corta y el modelo más pequeño (View Metrics de DAX Studio muestra el tamaño de cada tabla). Si un visual sigue lento, su medida es la siguiente en la lista.
¡Linterna encendida!
Practicaste: performancecalculatefiltervardividepower queryquery foldingboss
- Resuelto
- Sin pistas
- Al primer intento
