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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syruswan
Helper I
Helper I

Cómo usar DAX para crear una columna que muestre resultados dinámicos

Hola fans de Power BI,

He estado atascado en este problema por un tiempo y espero que pueda encontrar una solución aquí.

A continuación se muestra el escenario.

Tengo una tabla de ventas que incluye mis ingresos mensuales obtenidos. Cada inicio del mes, me gustaría calcular el nuevo objetivo mensual basado en los ingresos obtenidos del mes pasado. Si los ingresos obtenidos del mes pasado tuvieron un superávit, entonces la meta mensual para el resto de los meses sigue siendo la misma, si hay un déficit, entonces necesito agregar esos déficits al resto de los meses del año. La segunda imagen puede ayudar a entender el escenario.

El círculo rojo en la primera imagen no muestra lo que quiero porque parece que se calcula en función de cada fila.

A continuación se muestra mi dax:

Columna ?
VAR _n á MONTH('Goal'[StartofMonth].[ Fecha])
VAR _Looptable - GENERATESERIES(1._n)
VAR _NewMonthlyGoal 'Goal'[Monthly Goal] + IF('Goal'[Achieved.Achieved Monthly Revenue] < 'Goal'[Monthly Goal], ('Goal'[Monthly Goal] - 'Goal'[Achieved.Monthly Revenue])/(12-_n),0)
VAR _Looptable1 - ADDCOLUMNS(_Looptable,"_NMG", 'Goal'[Monthly Goal] + IF('Goal'[Achieved.Monthly Revenue] < 'Goal'[Monthly Goal], ('Goal'[Monthly Goal] - 'Goal'[Achieved.Monthly Revenue])/(12-_n),0))
VAR _max á MAXX(_Looptable1,[Valor])
devolución
MAXX(FILTER(_Looptable1,[Value]-_max),[_NMG])

2020-08-05_10-43-27.png

2020-08-05_11-05-28.png

9 REPLIES 9
v-kelly-msft
Community Support
Community Support

Hola @Syruswan ,

Intente modificar su columna como se muestra a continuación:

Column = 
Var _lastmonthgoal=CALCULATE(MAX('Goal'[Achieved.Achieved Monthly Revenue]),FILTER('Goal','Goal'[StartofMonth]=MAXX(FILTER('Goal','Goal'[StartofMonth]<EARLIER('Goal'[StartofMonth])),'Goal'[StartofMonth])
Return
IF( 'Goal'[Monthly Goal]>_lastmonthgoal, 'Goal'[Monthly Goal]+DIVIDE('Goal'[Monthly Goal]-_lastmonthgoal,12-MONTH('Goal'[StartofMonth)+1),'Goal'[Monthly Goal])

Si la medida anterior no funciona, pls cargar su archivo .pbix a una empresa de unidad y compartir el enlace conmigo.

Saludos
Kelly
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Hola Kelly,

Gracias por la ayuda. Intenté la medida, pero no funcionó.

A continuación se muestra el archivo.

https://drive.google.com/file/d/10Prv_K3yeun1WovMp378SuI2sHHHT97D/view?usp=sharing

Hola

¿Podría compartir el archivo MS Excel con su fórmula de Excel para que pueda entender su lógica? Comparte el enlace desde donde puedo descargar tu archivo MS Excel.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

Hola @Syruswan ,

Cree 2 columnas como se muestra a continuación:

Gap = 
var _lastmonth=MAXX(FILTER('Goal','Goal'[StartofMonth]<EARLIER('Goal'[StartofMonth])),'Goal'[StartofMonth])
Var _lastmonthgoal=CALCULATE(MAX('Goal'[Achieved.Achieved Monthly Revenue]),FILTER(ALL('Goal'),'Goal'[StartofMonth]=_lastmonth))
var _diff='Goal'[Monthly Goal]-_lastmonthgoal
Return
IF(_diff<0||_lastmonthgoal=BLANK(),0,DIVIDE(ABS(_diff),13-MONTH('Goal'[StartofMonth])))
_New monthly goal = 
var _previousgap=CALCULATE(MAX('Goal'[Gap]),FILTER('Goal','Goal'[StartofMonth]<=EARLIER('Goal'[StartofMonth])))
Return
IF(_previousgap=0,'Goal'[Monthly Goal],'Goal'[Monthly Goal]+SUMX(FILTER(ALL('Goal'),'Goal'[StartofMonth]<=EARLIER('Goal'[StartofMonth])),'Goal'[Gap]))

Y verás:

Annotation 2020-08-07 090055.png

Para el archivo .pbix relacionado, pls ver adjunto.

Saludos
Kelly
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Hola Kelly,

Esta es la solución que estoy buscando. ¡Muchas gracias por la ayuda!

Sin embargo, en el caso real, tengo varios vendedores. Acabo de añadir otra columna llamada "vendedor". Quiero que el cálculo se haga en cada vendedor, en otras palabras, el cálculo debería funcionar más como subcuadámeno independiente con 12 filas (12 meses). ¿Cómo puedo ajustar el DAX para el cálculo? Intenté usar FILTER para salir con una submesa primero. Entonces todavía no funciona.

Brecha ( Gap)
VAR _Salesperson - FILTER('Goal', 'Goal'[Salesman] ? EARLIER('Goal'[Salesman] ))
var _lastmonth-MAXX(FILTER(_Salesperson,'Goal'[StartofMonth] < EARLIER('Goal'[StartofMonth])),'Goal'[StartofMonth])
Var _lastmonthgoal-CALCULATE(MAX('Goal'[Achieved.Achieved Monthly Revenue]),FILTER(_Salesperson,'Goal'[StartofMonth]-_lastmonth))
var _diff''Objetivo'[Objetivo mensual]-_lastmonthgoal
devolución
IF(_diff<0? _lastmonthgoal-BLANK(),0,DIVIDE(ABS(_diff),13-MONTH('Goal'[StartofMonth])))

El enlace es el archivo adjunto.

https://drive.google.com/file/d/1D_PjVyq0KQgkMTDYqhjjEb2C2tH5S9q6/view?usp=sharing

Hola @Syruswan ,

Modifique las columnas como se muestra a continuación:

Gap = 
VAR _Salesperson = FILTER('Goal', 'Goal'[Salesman] = EARLIER('Goal'[Salesman] ))
var _lastmonth=MAXX(FILTER(_Salesperson,'Goal'[StartofMonth]<EARLIER('Goal'[StartofMonth])),'Goal'[StartofMonth])
Var _lastmonthgoal=CALCULATE(MAX('Goal'[Achieved.Achieved Monthly Revenue]),FILTER(_Salesperson,'Goal'[StartofMonth]=_lastmonth))
var _diff='Goal'[Monthly Goal]-_lastmonthgoal
Return
IF(_diff<0||_lastmonthgoal=BLANK(),0,DIVIDE(ABS(_diff),13-MONTH('Goal'[StartofMonth])))
_New monthly goal = 
VAR _Salesperson = FILTER('Goal', 'Goal'[Salesman] = EARLIER('Goal'[Salesman] ))
var _previousgap=CALCULATE(MAX('Goal'[Gap]),FILTER(_Salesperson,'Goal'[StartofMonth]<=EARLIER('Goal'[StartofMonth])))
Return
IF(_previousgap=0,'Goal'[Monthly Goal],'Goal'[Monthly Goal]+SUMX(FILTER(_Salesperson,'Goal'[StartofMonth]<=EARLIER('Goal'[StartofMonth])),'Goal'[Gap]))

Finalmente verá:

Annotation 2020-08-10 084406.png

Para el archivo .pbix modificado, pls ver adjunto.

Saludos
Kelly
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Hola Kelly,

Gracias por la ayuda.

Estoy mirando a June y el número está un poco apagado. Estoy esperando que la nueva meta mensual en junio debe ser (($85,983.45 - $81,532.9) / 7 ) + $85983.45 á $86,619.24. Quiero calcular la diferencia entre el objetivo mensual alcanzado y el nuevo objetivo mensual calculado.

Me doy cuenta de que podría ser causa por

var _diff 'Goal'[Montly Goal] -_lastmonthgoal
Así que lo cambié a abajo, pero parece que no funciona en absoluto.
var _diff 'Objetivo'[Ingresos mensuales alcanzados] -_lastmonthgoal

2020-08-10_10-55-16.png

Hola @Syruswan ,

Sí, como en mi cálculo, el _diff se basa en 83333.33,no en el nuevo valor dinámico, me ha molestado el problema durante 2 días, pero todavía no podía encontrar una solución, ya que necesita calcular en función del resultado dinámico, sería difícil. O en otra palabra, puede hacer que varias columnas sean los resultados intermedios para obtener una columna final.

Saludos
Kelly
¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Hola Kelly,

Muchas gracias por la ayuda. Sí, este cálculo dinámico es muy difícil. Encontré un post interesante que es bastante similar a lo que mencionaste que agregar una gran cantidad de columnas podría valer la pena intentarlo. La razón es que estamos haciendo el cálculo basado en un nuevo valor de la última fila. Con el fin de encontrar una manera de almacenar o crear ese valor, ADDCOLUMNS podría ser algo que vale la pena probar. He estado atascado en esto por mucho tiempo y no he descubierto una manera. A continuación está sólo un post que encontré.

2020-08-18_9-58-44.png

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors