XIRR en la fecha de entrada que incluye un valor terminal transferido a ese mismo día

Un usuario Pregunto ✅

kdrizzy92

Hola a todos,

¡Estaba luchando mucho con esto y tenía la esperanza de que pudieras ayudarme!

Estoy tratando de calcular las TIR de inversión en función de los flujos de efectivo irregulares y un valor terminal al final del trimestre. La forma en que nuestro sistema está configurado es que hay una cuenta llamada InvestmentBalance que realiza un seguimiento de los cambios incrementales en los valores de los activos. Me preguntaba si en PBI, ¿es posible básicamente insertar una fila en mi conjunto de datos al final de cada trimestre que calcule el valor terminal en esa fecha para cada inversión? A partir de ahí, podría hacer que PBI calcule la TIR al final de cada trimestre en función de la fecha que ingresé.

A continuación se muestra mi conjunto de datos:

Nombre de empresa Nombre de la inversión Fecha Flujo de efectivo InversiónSaldo
EmpresaA InversiónA 02/01/2019 (50,000.00) 50,000.00
EmpresaA InversiónA 1/06/2019 (20,000.00) 20,000.00
EmpresaA InversiónA 23/02/2019 1,000.00 (1,000.00)
EmpresaA InversiónA 27/02/2019 4,000.00 (4,000.00)
EmpresaA InversiónA 05/03/2019 (2,500.00) 2,500.00
EmpresaA InversiónA 23/03/2019 3,000.00 1,000.00
EmpresaA InversiónA 31/03/2019 1,500.00
EmpresaA InversiónA 15/04/2019 (4,000.00) 4,000.00
EmpresaA InversiónA 22/05/2019 (3,000.00) 3,000.00
EmpresaA InversiónA 04/06/2019 2,100.00 (2,000.00)
EmpresaA InversiónA 30/06/2019 (500.00)
EmpresaA InversiónA 8/01/2019 (2,000.00) 2,000.00
EmpresaA InversiónA 8/11/2019 (2,000.00) 2,000.00
EmpresaA InversiónA 30/09/2019 1,000.00
EmpresaA InversiónA 05/10/2019 3,500.00 (3,500.00)
EmpresaA InversiónA 24/11/2019 3,000.00 (3,000.00)
EmpresaA InversiónA 30/11/2019 (1,000.00) 1,000.00
EmpresaA InversiónA 02/12/2019 (1,500.00) 1,500.00
EmpresaA InversiónA 31/12/2019 1,000.00 (500.00)
EmpresaA InversiónB 1/05/2019 (15,000.00) 15,000.00
EmpresaA InversiónB 25/03/2019 (2,000.00) 2,000.00
EmpresaA InversiónB 31/03/2019 1,000.00
EmpresaA InversiónB 06/04/2019 (1,000.00) 1,000.00
EmpresaA InversiónB 30/06/2019 500.00
EmpresaA InversiónB 21/07/2019 4,000.00 (4,000.00)
EmpresaA InversiónB 14/8/2019 3,000.00 (3,000.00)
EmpresaA InversiónB 30/09/2019 2,000.00
EmpresaA InversiónB 02/11/2019 (1,500.00) 1,000.00
EmpresaA InversiónB 31/12/2019 (1,000.00)

Con base en lo anterior como ejemplo, la Inversión A tendrá un valor razonable/valor terminal de $75,500 al 31 de diciembre de 2019.

¡Gracias!

EGolanowski

Hola,

Estoy enfrentando este problema exacto y me preguntaba si pudiste resolverlo. ¿Estaría dispuesto a compartir su solución? Estoy tratando de incluir un valor terminal y aprovechar una fecha de entrada tal como lo ha indicado. He estado atascado en esto por un tiempo y me encantaría cualquier consejo que me ayude a seguir adelante.

¡Gracias!

Anónimo

He estado trabajando en este tipo de cosas por un tiempo. Lo primero que haría es crear una tabla separada que le proporcione los valores terminales trimestrales (la consulta de energía funciona bien con esto). Luego, a partir de ahí, puede comenzar a construir su función. Pero hay un poco (bueno, mucho) más que entrará en eso.

Pero lo primero es lo primero, intente construir la tabla de valores terminales por trimestre. También asegúrese de tener una tabla de calendario dedicada, ya que cualquier fecha (presumiblemente el final del trimestre) estará en las filas, o cualquier otro filtro) se usará para recopilar todos los flujos de efectivo hasta ese momento y luego obtener el valor terminal en ese fecha específica. Creo dos tablas calculadas en mi función (una para tomar los flujos de efectivo y una para tomar el valor terminal), luego usé la unión para combinarlas y enviarlas a la función xirr. Pero eso es un poco más adelante, pero usé mi tabla de calendario como filtro para CALCULATETABLE para los flujos de efectivo y el valor liquidativo final.

Pruébelo y vea lo que se le ocurre. Definitivamente no es fácil, pero una vez que lo hace funcionar, puede generar IRR sobre la marcha para básicamente cualquier tipo de corte de datos, lo cual es sorprendente en sí mismo. Bueno, al menos eso creo porque siempre tenía que ejecutar el irr manualmente y eso era un gran dolor, así que definitivamente valió la pena. en mi opinión.

kdrizzy92

En respuesta a Anónimo

¡Hola @Anónimo!

Muchas gracias por su respuesta. He estado en esto ahora durante los últimos días, y me preguntaba si podría obtener un poco más de ayuda aquí.

Pude calcular el NAV móvil con la ayuda de una columna de índice. Ahora está en mi tabla en cuanto a lo siguiente.

EmpresaNombreInversiónNombreFechaCashflowInversiónSaldoÍndiceNAVatDate

EmpresaA InversiónA 2 de enero de 2019 -50000 50000 1 50000
EmpresaA InversiónB 5 de enero de 2019 -15000 15000 20 15000
EmpresaA InversiónA 6 de enero de 2019 -20000 20000 2 70000
EmpresaA InversiónA 23 de febrero de 2019 1000 -1000 3 69000
EmpresaA InversiónA 27 de febrero de 2019 4000 -4000 4 65000
EmpresaA InversiónA 5 de marzo de 2019 -2500 2500 5 67500
EmpresaA InversiónA 23 de marzo de 2019 3000 1000 6 68500
EmpresaA InversiónB 25 de marzo de 2019 -2000 2000 21 17000
EmpresaA InversiónA 31 de marzo de 2019 0 1500 7 70000
EmpresaA InversiónB 31 de marzo de 2019 0 1000 22 18000
EmpresaA InversiónB 6 de abril de 2019 -1000 1000 23 19000
EmpresaA InversiónA 15 de abril de 2019 -4000 4000 8 74000
EmpresaA InversiónA 22 de mayo de 2019 -3000 3000 9 77000
EmpresaA InversiónA 4 de junio de 2019 2100 -2000 10 75000
EmpresaA InversiónA 30 de junio de 2019 0 -500 11 74500
EmpresaA InversiónB 30 de junio de 2019 0 500 24 19500
EmpresaA InversiónB 21 de julio de 2019 4000 -4000 25 15500
EmpresaA InversiónA 1 de agosto de 2019 -2000 2000 12 76500
EmpresaA InversiónA 11 de agosto de 2019 -2000 2000 13 78500
EmpresaA InversiónB 14 de agosto de 2019 3000 -3000 26 12500
EmpresaA InversiónA 30 de septiembre de 2019 0 1000 14 79500
EmpresaA InversiónB 30 de septiembre de 2019 0 2000 27 14500
EmpresaA InversiónA 5 de octubre de 2019 3500 -3500 15 76000
EmpresaA InversiónB 2 de noviembre de 2019 -1500 1000 28 15500
EmpresaA InversiónA 24 de noviembre de 2019 3000 -3000 dieciséis 73000
EmpresaA InversiónA 30 de noviembre de 2019 -1000 1000 17 74000
EmpresaA InversiónA 2 de diciembre de 2019 -1500 1500 18 75500
EmpresaA InversiónA 31 de diciembre de 2019 1000 -500 19 75000
EmpresaA InversiónB 31 de diciembre de 2019 0 -1000 29 14500

Estoy tratando de descifrar la combinación de los dos ahora en una función, pero me he quedado atascado por un tiempo y no puedo entender qué estoy haciendo mal. Recibo un mensaje de error, «Error de cálculo en la medida: se proporcionó una tabla de valores múltiples donde se esperaba un solo valor». Copia de pbix aquí

Anónimo

En respuesta a kdrizzy92

@kdrizzy92 ,

Echa un vistazo al adjunto. No creo que esté completo al 100%, pero es un buen comienzo. Aquí hay algunas cosas que hice:

  1. Creó una tabla de dimensiones para el nombre de la empresa y el nombre de la inversión. Quiere usar esas columnas como filtros, nunca quiera filtrar usando una tabla de hechos ya que eso sería un golpe de rendimiento
  2. Creó una tabla NAV separada. Probablemente no sea 100% necesario, pero me resulta más fácil separar los ENAV y los flujos de caja

Así es como se ve el modelo de datos:

Modelo de datos.pngLuego, de vuelta en la vista del informe, con las fechas en las filas de su tabla de fechas y el nombre de la empresa y el nombre de la inversión de nuestras nuevas tablas de dimensiones, puede usar esta función de TIR:

IRR v2 = 

//Create a table that is just the ENAV value for the current date in the current filter context
VAR __EnavTable=
	CALCULATETABLE(
		NavTable,
			FILTER(
				ALL( 'Date'),
				MAX('Date'[Date]) = 'Date'[Date]
			)
		)

//Create a table that has all the cashflows (not the terminal value) from start of time till the date in the current filter context
//Need to use Select Columns for the Union Function. Union Function Requires the same amount of columns
VAR __CFTable=
SELECTCOLUMNS(
    	CALCULATETABLE(
		IRR,
			FILTER(
				ALL( 'Date'),
				MAX( 'Date'[Date]) >= 'Date'[Date]
            )
    ),
    "CompanyName", IRR[CompanyName], "InvestmentName", IRR[InvestmentName], "Date", IRR[Date],"CashFlow", IRR[Cashflow])

//Need to make one table out of the above tables since want all the cashflows preceeding the current date in the current filter context
//and only want the ENAV value for the date from the context, not all the preeceding ones
Var __Union =
    UNION(  __CFTable,__EnavTable)

//Feed the columns from our union table to the XIRR function
var __XIRR=
      IFERROR(
            XIRR( __Union,[Cashflow],[Date]),BLANK()
        
        
    )

RETURN
__XIRR


Hay notas en el código en sí, pero básicamente dice que mire la fecha en la que estoy actualmente (junto con la Compañía, la Inversión o los filtros que se apliquen). Luego, en la tabla ENVA, dame una tabla donde solo esté la ENAV para todos los filtros anteriores. Luego, la segunda tabla aplica los mismos filtros, pero a la tabla IRR y proporciona una tabla donde se encuentran todos los flujos de efectivo hasta la fecha incluida en el contexto de filtro actual.

Entonces, con esas dos tablas, queremos combinarlas en una sola, así que usamos UNION. y con esa tabla fusionada podemos usar como columnas para la función TIR.

No sé lo suficiente sobre sus datos, o si los datos eran aleatorios, pero hice una verificación rápida en Excel y se veía bien, pero de ninguna manera hice una verificación profunda. Hay muchas pequeñas cosas que he encontrado para tener en cuenta al hacer TIR y demás. (como qué hacer cuando el flujo de caja inicial y la fecha en que desea que la TIR sea < 1 año...) pero eso es poner el carro delante del caballo.

Así que echa un vistazo al adjunto y déjame saber lo que piensas.

https://1drv.ms/u/s!Amqd8ArUSwDS3VZLLHbm6kUvXIMD?e=0Bvy6L

joka22

En respuesta a Anónimo

Hola anonimo,

tengo exactamente el mismo problema! ¿Lo resolviste al final? ¿Y cómo se ve tu tabla NAV? ¿Hay un NAV para cada fecha y las fechas son las mismas que en la tabla CF?

Atentamente,

Joka

kdrizzy92

En respuesta a Anónimo

¡Cosas increíbles, @Anónimo!

Estaba llegando a la misma TIR que la suya en mis iteraciones anteriores de las fórmulas, pero lo único detrás de esto era que no parecía recoger el valor terminal en la fecha de finalización del informe en el cálculo. Esta es la razón por la que obtuvimos TIR de aproximadamente -97,53 % cuando esperábamos un 10,31 % con un valor final de $89 500.

Sin embargo, todavía lo estoy investigando, ¡debe ser una razón por la que no se captura en él! Te dejaré saber si puedo resolverlo. Gracias de nuevo por toda la ayuda, Nick.

Anónimo

En respuesta a kdrizzy92

Estoy seguro de que hay una razón por la que no lo detecta, podría ser un problema de tipo de datos o algo similar. no estoy seguro. Juega con la primera CalculateTable y mira qué sale. Usé más o menos la misma configuración en mi archivo, y todo funciona bien, pero obviamente los datos no son los mismos.

Pruebe y solucione los problemas y vea lo que puede encontrar. Si tengo algo de tiempo también le echaré un vistazo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *