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
Syndicate_Admin
Administrator
Administrator

Adición acumulativa de rendimiento de inversión (función Productx usada)

Hola a todos,

Voy en círculos con la función PRODUCTX para margen acumulativo (archivos adjuntos). La función Productx ha funcionado para mí anteriormente en una columna, pero en este caso (valor acumulativo), parece que no funciona (puede estar funcionando, pero no puedo explicar el resultado).

Así que tengo columnas Premium y Loss que necesitan ser añadidas acumulativamente junto con el rendimiento de la inversión. He calculado primero el margen acumulado (en total desde Premium-Loss) y he intentado usar la función PRODUCTX con eso. Esto parece no funcionar, ya que no puedo igualar los valores dados en el archivo de Excel. Aquí está la fórmula que utilicé (no funcionando);

CumuMarginwithRate=

[CumulativeMargin]*
Calculate(PRODUCTX(tabla1, 1+InvestmentYield[Valor InvestmentYield]/12),
FILTER(All('Table1'[Mes]),
'Tabla1'[Mes]<MAX('Tabla1'[Mes])))
Por favor, hágamelo saber si usted puede entender el resultado o puede ser que necesito utilizar alguna otra función o lógica.
Muchas gracias por su ayuda.
1 ACCEPTED SOLUTION

Se trata de mirar tu definición recursiva y tratar de averiguar cómo escribirla de forma no recursiva.

En su caso, usted tiene una serie de primas P1, P2, P3, ... y un margen acumulativo inicial, CM = 0 y se definen los ingresos de inversión como CM*Rate/12 y una regla recursiva

CM = Pprev + CMprev + CMprev * Rate/12
   = Pprev + (1 + Rate / 12) * CMPrev
   = Pprev + (1 + r) * CMPrev

dónde están cortos para rate/12.

Si empiezas a escribir los primeros meses, deberías ver un patrón en desarrollo:

1: P1
1: CM = 0
1: Income = r * CM = 0
2: P2
2: CM = P1 + 0 + 0
2: Income = r * P1
3: P3
3: CM = P2 + (1 + r) * P1
3: Income = r * (P2 + (1 + r) * P1)
4: P4
4: CM = P3 + (1 + r) * ( P2 + (1 + r) * P1 )
4:Income = r * (P3 + (1 + r) * ( P2 + (1 + r) * P1 ))

5: CM = P4 + (1 + r) * (P3 + (1 + r) * ( P2 + (1 + r)   * P1 ))
      = P4 + (1 + r) *  P3 + (1 + r)^2 * P2 + (1 + r)^3 * P1

En particular, durante el mes N

CM = SUM_{i=1}^{N-1} P_i * (1 + r)^(N-i-1)

Traduciendo esta fórmula a DAX, podemos escribir:

CumulativeMargin = 
VAR r = [InvestmentYield Value] / 12
VAR PrevMonths = FILTER ( ALL ( Table1 ), Table1[Month] < SELECTEDVALUE ( Table1[Month] ) )
VAR AddIndex = ADDCOLUMNS ( PrevMonths, "@Index", RANKX ( PrevMonths, [Month],, ASC ) )
VAR N = COUNTROWS ( PrevMonths )
RETURN
    SUMX ( AddIndex, [Premium] * POWER ( 1 + r, N - [@Index] ) )

Resultado:

AlexisOlson_0-1614268089240.png

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

En Excel, este cálculo se realiza de forma recursiva en función del mes anterior. No puede definir cálculos recursivos en DAX, por lo que sus opciones son encontrar una solución alternativa de forma cerrada o renunciar.

Para obtener más detalles y enlaces a un par de ejemplos de solución alternativa, consulte mi publicación stackoverflow aquí:

https://stackoverflow.com/questions/52766022/recursion-in-dax

Gracias @AlexisOlson por los enlaces útiles. Sin embargo, todavía estoy perdido y no logro el resultado que necesito. Si no le importa, ¿puede repasar la fórmula dax que ha dado aquí, powerbi - DAX - fórmula que hace referencia a sí mismo - Stack Overflow ? Solo puedo obtener los dos valores principales según los caldos de Excel, pero de la tercera fila los valores son completamente diferentes. Muchas gracias por su ayuda de nuevo.

Se trata de mirar tu definición recursiva y tratar de averiguar cómo escribirla de forma no recursiva.

En su caso, usted tiene una serie de primas P1, P2, P3, ... y un margen acumulativo inicial, CM = 0 y se definen los ingresos de inversión como CM*Rate/12 y una regla recursiva

CM = Pprev + CMprev + CMprev * Rate/12
   = Pprev + (1 + Rate / 12) * CMPrev
   = Pprev + (1 + r) * CMPrev

dónde están cortos para rate/12.

Si empiezas a escribir los primeros meses, deberías ver un patrón en desarrollo:

1: P1
1: CM = 0
1: Income = r * CM = 0
2: P2
2: CM = P1 + 0 + 0
2: Income = r * P1
3: P3
3: CM = P2 + (1 + r) * P1
3: Income = r * (P2 + (1 + r) * P1)
4: P4
4: CM = P3 + (1 + r) * ( P2 + (1 + r) * P1 )
4:Income = r * (P3 + (1 + r) * ( P2 + (1 + r) * P1 ))

5: CM = P4 + (1 + r) * (P3 + (1 + r) * ( P2 + (1 + r)   * P1 ))
      = P4 + (1 + r) *  P3 + (1 + r)^2 * P2 + (1 + r)^3 * P1

En particular, durante el mes N

CM = SUM_{i=1}^{N-1} P_i * (1 + r)^(N-i-1)

Traduciendo esta fórmula a DAX, podemos escribir:

CumulativeMargin = 
VAR r = [InvestmentYield Value] / 12
VAR PrevMonths = FILTER ( ALL ( Table1 ), Table1[Month] < SELECTEDVALUE ( Table1[Month] ) )
VAR AddIndex = ADDCOLUMNS ( PrevMonths, "@Index", RANKX ( PrevMonths, [Month],, ASC ) )
VAR N = COUNTROWS ( PrevMonths )
RETURN
    SUMX ( AddIndex, [Premium] * POWER ( 1 + r, N - [@Index] ) )

Resultado:

AlexisOlson_0-1614268089240.png

No @AlexisOlson,

Muchas gracias por su maravillosa explicación y el DAX para abordar el cálculo recursivo. Su lógica / dax funcionó muy bien en este caso. Estoy muy agradecido contigo por repasar la lógica y el dax. Estuve en círculos durante semanas con este cálculo.

Me encontré con un pequeño contratiempo cuando intenté implementar esto en los datos reales. Así que esta fórmula DAX estoy tratando de usarla en una tabla grande (modo de consulta directa), veo el siguiente error.

Mensaje de error:

El conjunto de resultados de una consulta al origen de datos externo ha superado el tamaño máximo permitido de las filas '10000000'.

Sólo curiosidad si usted sabe o había enountered este problema y podría resolverlo. Muchas gracias de nuevo!!

Yo sugeriría mencionar eso como un puesto separado. Yo tampoco me he metido en ese error.

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.