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:
- 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
- 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:
Luego, 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.