Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola
Tengo una tabla de ventas con la siguiente información:
Fecha | Producto | Total de Ventas | Unidades vendidas | Precio por unidad |
1-1-2019 | A | 100 | 10 | 10 |
1-2-2019 | A | 200 | 10 | 20 |
1-3-2019 | B | 300 | 10 | 30 |
1-1-2019 | B | 100 | 10 | 10 |
1-2-2019 | B | 200 | 10 | 20 |
1-3-2019 | C | 300 | 10 | 30 |
1-1-2020 | C | 100 | 10 | 10 |
1-2-2019 | C | 200 | 10 | 20 |
1-3-2020 | D | 300 | 10 | 30 |
1-1-2019 | D | 100 | 10 | 10 |
1-1-2020 | D | 200 | 10 | 20 |
1-2-2019 | E | 100 | 10 | 10 |
1-3-2020 | E | 200 | 10 | 20 |
1-1-2020 | E | 300 | 10 | 30 |
Y tengo una tabla de productos que me da información más detallada sobre cada producto. Las dos tablas están vinculadas.
Producto | Categoría de producto |
A | AAAA |
B | AAAA |
C | AAAA |
D | BBBB |
E | BBBB |
También tengo una tabla de fechas independiente que está vinculada a la fecha de venta de la tabla de ventas.
Como puede ver, el precio por unidad de datos difiere según el producto, y cada producto también puede tener un precio diferente por unidad en un día determinado o en cualquier año diferente.
Me gustaría asignar un nivel de precios a cada producto, basado en estas tres reglas:
Si hace las matemáticas basadas en los ejemplos, el nivel de precios debe aparecer como se muestra a continuación. He incluido las columnas 'categoría de producto', 'año', 'ventas totales', 'unidades totales vendidas' y 'precio medio por unidad para esta categoría y año' para este ejemplo y las marqué en azul. Lo ideal sería tener un cálculo que no requiere ninguna columna adicional aparte de la columna calculada 'nivel de precio'. Esta tabla de ventas contiene millones de filas de datos, por lo que cuantos menos columnas mejor!
Fecha | Producto | Total de Ventas | Unidades vendidas | Precio por unidad | Categoría de producto | año | Ventas totales | Total de unidades vendidas | Precio medio por unidad para esta categoría y año | Nivel de precios |
01-01-19 | A | 100 | 10 | 10 | AAAA | 2019 | 1500 | 70 | 21 | Barato |
01-02-19 | A | 200 | 10 | 20 | AAAA | 2019 | 1500 | 70 | 21 | Normal |
01-03-19 | B | 300 | 10 | 30 | AAAA | 2019 | 1500 | 70 | 21 | Lujo |
01-01-19 | B | 100 | 10 | 10 | AAAA | 2019 | 1500 | 70 | 21 | Barato |
01-02-19 | B | 200 | 10 | 20 | AAAA | 2019 | 1500 | 70 | 21 | Normal |
01-03-19 | C | 400 | 10 | 40 | AAAA | 2019 | 1500 | 70 | 21 | Lujo |
01-01-20 | C | 100 | 10 | 10 | AAAA | 2020 | 100 | 10 | 10 | Normal |
01-02-19 | C | 200 | 10 | 20 | AAAA | 2019 | 1500 | 70 | 21 | Normal |
01-03-20 | D | 300 | 10 | 30 | BBBB | 2020 | 1000 | 40 | 25 | Lujo |
01-01-19 | D | 100 | 10 | 10 | BBBB | 2019 | 200 | 20 | 10 | Normal |
01-01-20 | D | 200 | 10 | 20 | BBBB | 2020 | 1000 | 40 | 25 | Lujo |
01-02-19 | E | 100 | 10 | 10 | BBBB | 2019 | 200 | 20 | 10 | Normal |
01-03-20 | E | 200 | 10 | 20 | BBBB | 2020 | 1000 | 40 | 25 | Barato |
01-01-20 | E | 300 | 10 | 30 | BBBB | 2020 | 1000 | 40 | 25 | Barato |
¿Cuál sería el mejor enfoque para aterrizar en esta columna calculada?
Saludos
Bajos
Solved! Go to Solution.
Hola, @basroozen
Es un placer responder por ti.
Según su descripción, creo que puede crear algunas medidas para calcular el resultado correcto.
Así:
Price Tiger =
VAR a =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = [category]
&& YEAR ( Table1[Date] ) = YEAR ( SELECTEDVALUE ( 'Table1'[Date] ) )
),
Table1[Total Sales]
)
VAR b =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = [category]
&& YEAR ( Table1[Date] ) = YEAR ( SELECTEDVALUE ( 'Table1'[Date] ) )
),
Table1[Units sold]
)
VAR c =
DIVIDE ( a, b )
RETURN
SWITCH (
TRUE (),
SELECTEDVALUE ( Table1[Price per unit] ) > c * 1.1, "luxury",
SELECTEDVALUE ( Table1[Price per unit] ) = c * 1.1, "normal",
SELECTEDVALUE ( Table1[Price per unit] ) < c * 1.1, "cheap"
)
Aquí está mi archivo .pbix de ejemplo. Ayuda a esto ayuda.
Si no resuelve su problema, por favor no dude en preguntarme.
Saludos
Janey Guo
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola, @basroozen
Es un placer responder por ti.
Según su descripción, creo que puede crear algunas medidas para calcular el resultado correcto.
Así:
Price Tiger =
VAR a =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = [category]
&& YEAR ( Table1[Date] ) = YEAR ( SELECTEDVALUE ( 'Table1'[Date] ) )
),
Table1[Total Sales]
)
VAR b =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = [category]
&& YEAR ( Table1[Date] ) = YEAR ( SELECTEDVALUE ( 'Table1'[Date] ) )
),
Table1[Units sold]
)
VAR c =
DIVIDE ( a, b )
RETURN
SWITCH (
TRUE (),
SELECTEDVALUE ( Table1[Price per unit] ) > c * 1.1, "luxury",
SELECTEDVALUE ( Table1[Price per unit] ) = c * 1.1, "normal",
SELECTEDVALUE ( Table1[Price per unit] ) < c * 1.1, "cheap"
)
Aquí está mi archivo .pbix de ejemplo. Ayuda a esto ayuda.
Si no resuelve su problema, por favor no dude en preguntarme.
Saludos
Janey Guo
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola @v-janeyg-msft ,
Muchas gracias, esto es increíble. La medida funciona perfectamente cuando la importo en mi modelo.
Sin embargo, necesita ser una columna calculada en la Tabla1. Esto se debe a que necesito usar el resultado como filtro, además de que necesito usarlo como una leyenda en los gráficos.
Cuando copio la medida y simplemente la agredo como un colum calculado, todos los niveles de precios aparecen como "normales". ¿Qué se debe cambiar para que esto funcione como una columna calculada?
Saludos
Bajos
Hola, @basroozen
Prueba esto:
Price Tiger1 =
VAR x =
CALCULATE ( MAX ( Table2[Product Category] ) )
VAR a =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = x
&& YEAR ( Table1[Date] ) = YEAR ( 'Table1'[Date] )
),
Table1[Total Sales]
)
VAR b =
SUMX (
FILTER (
ALL ( 'Table1' ),
RELATED ( Table2[Product Category] ) = x
&& YEAR ( Table1[Date] ) = YEAR ( 'Table1'[Date] )
),
Table1[Units sold]
)
VAR c =
DIVIDE ( a, b )
RETURN
SWITCH (
TRUE (),
Table1[Price per unit] > c * 1.1, "luxury",
Table1[Price per unit] = c * 1.1, "normal",
Table1[Price per unit] < c * 1.1, "cheap"
)
Si no resuelve su problema, por favor no dude en preguntarme.
Saludos
Janey Guo
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Hola @v-janeyg-msft ,
Gracias por esto. He intentado eliminar el cálculo, pero PowerBi sigue atascado en su pantalla de "carga". ¿Quizás SUMX es demasiado para 5 millones de filas?
Por lo tanto, he intentado ejecutar las cosas paso a paso, comenzando con sólo mirar el año, y sólo usando la variable A.
VAR a =
SUMX (
FILTER (
ALL ( 'Table1' ),
YEAR ( Table1[Date] ) = YEAR ( 'Table1'[Date] )
),
Table1[Total Sales]
)
RETURN
a
Calcula cuando ejecuto esto, pero no importa qué año esté en la columna de fecha, siempre devuelve el mismo valor (el importe total de las ventas). ¿Cuál sería la solución para solucionar esto? Tal vez pueda replicar eso a las otras variables para que funcione!
Gracias de nuevo
Bas
Hola, @basroozen
Si usa measure, pruebe lo siguiente:
Año ( Tabla1[Fecha] ) á AÑO ( selectedvalue('Table1'[Date] ))
Si utiliza la columna, pruebe esto:
Año ( Tabla1[Fecha] ) - Año ( anteriormente('Tabla1'[Fecha] ))
Si no resuelve su problema, por favor no dude en preguntarme.
Debe saber que el uso de columnas calculadas es muy intensivo en memoria, cuando el volumen de datos es enorme, sugiero que utilice medir o reducir los datos.
Saludos
Janey Guo
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
@v-janeyg-msft Gracias de nuevo. Eso funciona.
He intentado modificar el resto del cálculo. Pero desafortunadamente sigo recibiendo el mensaje de que 'no hay suficiente memoria para completar esta operación.
Creo que el cálculo funciona. Es sólo que PowerBI no puede manejar la función SUMX por desgracia...
Saludos
Bas
Hola, @basroozen
Pruebe esto: Cree a,b,c en forma de medida y cree la función de interruptor final en forma de columna. Puede ser que ayude.
Saludos
Janey Guo
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |