Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

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.

Reply
Anonymous
Not applicable

Calcular el nivel de precios de los productos

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 el precio es un 10% superior o superior al precio medio en la misma categoría de producto para el mismo año,entonces el producto debe ser identificado como un producto de "lujo".
  • Si el precio es un 10% inferior o inferior al precio medio en la misma categoría de producto para el mismo año,entonces el producto debe ser identificado como un producto "barato".
  • Cualquier otro producto debe identificarse como «normal».

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

1 ACCEPTED SOLUTION
v-janeyg-msft
Community Support
Community Support

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"
    )

v-janeyg-msft_0-1603101447755.png

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.

View solution in original post

7 REPLIES 7
v-janeyg-msft
Community Support
Community Support

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"
    )

v-janeyg-msft_0-1603101447755.png

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.

Anonymous
Not applicable

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.

Anonymous
Not applicable

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.

Anonymous
Not applicable

@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.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.