Forum Discussion
Dependencia circular
Tengo un problema de dependencia con mis medidas de DAX; Esencialmente, una medida necesita que se calcule la otra. Sin embargo, no está relacionado con el tiempo; Necesito el valor del mes anterior de una medida para calcular la actual, y esto está causando un error.
Tenemos dos medidas, Saldo de Caja Inicial y Saldo de Caja Final. La inicial de enero se da para la base, y la final es la suma de 5 cuentas, incluida la inicial. Para el próximo mes, tenemos la inicial de febrero, que es igual a la final del mes anterior, y la final de nuevo es la suma de 5 cuentas, incluida la inicial.
Básicamente, mi problema gira en torno a los valores del saldo de efectivo inicial que no existen en la tabla; tenemos que calcularlos. Sin embargo, el saldo de caja final también requiere que se calcule el inicial. ¿Cómo puedo resolver esto?
Se nota que uno depende del otro para ser calculado. Sin embargo, podemos establecer
una secuencia de pasos que, de ser ordenados, nos permitirían calcular hasta el mes de diciembre sin ningún problema.
Aquí está el código para ambas medidas:
=============================================================
Saldo inicial de caja =
VAR varInicial =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "5 Saldo de efectivo inicial"
)
VAR varFinal =
CALCULAR(
[Saldo final de caja],
DATEADD(dimCalendar[Date], -1, MONTH)
)
DEVOLUCIÓN
IF(varInitial <> 0, varInitial, varFinal)
=============================================================
Saldo final de caja =
VAR varFinal =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 Operando " ||
dimCashFlowAccount[H1] = "2 Financiamiento" ||
dimCashFlowAccount[H1] = "3 Inversión"||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo"
)
RETURN varFinal + [Saldo de caja inicial]
=============================================================
Actualmente, mi matriz se ve así:
| Cuenta | Ene | Feb | Mar | Abr |
| 1 Funcionamiento | -45.069.886,14 | -38.754.603,82 | -746.247,73 | 10.903.513,73 |
| 2 Financiación | -1.339.127,96 | -705.556,47 | -25.845.105,76 | -225.528,30 |
| 3 Inversión | -33.875.353,61 | -10.865.816,03 | -9.160.827,52 | -2.430.627,32 |
| 4 Variación del cambio de efectivo | -2.077.440,02 | 1.349.943,37 | -1.081.836,05 | 47.619,05 |
| 5 Saldo inicial de efectivo | 773.156.021,79 | 690.794.214,06 | 641.818.181,11 | |
| 6 Saldo final de caja | 690.794.214,06 | 641.818.181,11 | 604.984.164,05 | 8.294.977,16 |
Sin embargo, el valor que pretendo lograr es este:
| Cuenta | Ene | Feb | Mar | Abr |
| 1 Funcionamiento | -45.069.886,14 | -38.754.603,82 | -746.247,73 | 10.903.513,73 |
| 2 Financiación | -1.339.127,96 | -705.556,47 | -25.845.105,76 | -225.528,30 |
| 3 Inversión | -33.875.353,61 | -10.865.816,03 | -9.160.827,52 | -2.430.627,32 |
| 4 Variación del cambio de efectivo | -2.077.440,02 | 1.349.943,37 | -1.081.836,05 | 47.619,05 |
| 5 Saldo inicial de efectivo | 773.156.021,79 | 690.794.214,06 | 641.818.181,11 | 604.984.164,05 |
| 6 Saldo final de caja | 690.794.214,06 | 641.818.181,11 | 604.984.164,05 | 613.279.141,21 |
¿Podrías ayudarme?
La solución la encontré justo debajo:
Saldo inicial de caja =
VAR varNum =
INTERRUPTOR (
MONTH(MAX('dimCalendar'[Fecha])),
1, 0,
2, -1,
3, -2,
4, -3,
5, -4,
6, -5,
7, -6,
8, -7,
9, -8,
10, -9,
11, -10,
12, -11
)VAR varMonth = MONTH(MAX('dimCalendar'[Date]))
VAR varInicial =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "5 Saldo de efectivo inicial"
)FEBRERO
VAR X =
CALCULAR(
[DefaultCase],
DATEADD(dimCalendar[Fecha], varNum, MES)
)VAR Y =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 1, MONTH)
) + XMARZO
VAR X1 = YVAR Y1 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 2, MES)
) + X1ABRIL
VAR X2 = Y1VAR Y2 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 3, MES)
) + X2MAYO
VAR X3 = Y2VAR Y3 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 4, MONTH)
) + X3JUNIO
VAR X4 = Y3VAR Y4 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 5, MONTH)
) + X4JULIO
VAR X5 = Y4VAR Y5 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 6, MES)
) + X5// AUGUST
VAR X6 = Y5VAR Y6 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 7, MONTH)
) + X6SEPTIEMBRE
VAR X7 = Y6VAR Y7 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 8, MONTH)
) + X7OCTUBRE
VAR X8 = Y7VAR Y8 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 9, MONTH)
) + X8NOVIEMBRE
VAR X9 = Y8VAR Y9 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 10, MONTH)
) + x9DICIEMBRE
VAR X10 = Y9VAR Y10 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 11, MES)
) + X10Resultado del VAR =
INTERRUPTOR(
varMonth,
2, X, // Si CurrentMonth es 2 (febrero), devuelve X
3, X1, // Si CurrentMonth es 3 (marzo), devuelve X1
4, X2, // Si CurrentMonth es 4 (abril), devuelve X2
5, X3, // Si CurrentMonth es 5 (mayo), devuelve X3
6, X4, // Si CurrentMonth es 6 (junio), devuelve X4
7, X5, // Si CurrentMonth es 7 (julio), devuelve X5
8, X6, // Si CurrentMonth es 8 (agosto), devuelve X6
9, X7, // Si CurrentMonth es 9 (septiembre), devuelve X7
10, X8, // Si CurrentMonth es 10 (octubre), devuelve X8
11, X9, // Si CurrentMonth es 11 (noviembre), devuelve X9
12, X10, // Si CurrentMonth es 12 (diciembre), devuelve X10
BLANK() // Mayúsculas y minúsculas por defecto
)DEVOLUCIÓN
IF(varInitial <> 0, varInitial, Result)
========================================================Saldo final de caja =
VAR varNum =
INTERRUPTOR (
MONTH(MAX('dimCalendar'[Fecha])),
1, 0,
2, -1,
3, -2,
4, -3,
5, -4,
6, -5,
7, -6,
8, -7,
9, -8,
10, -9,
11, -10,
12, -11
)VAR varMonth = MONTH(MAX('dimCalendar'[Date]))
VAR varInicial =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "5 Saldo de efectivo inicial"
)VAR varFinal =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "6 Saldo de efectivo final"
)FEBRERO
VAR X =
CALCULAR(
[DefaultCase],
DATEADD(dimCalendar[Fecha], varNum, MES)
)VAR Y =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +1, MONTH)
) + XMARZO
VAR X1 = Y
VAR Y1 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +2, MONTH)
) + X1ABRIL
VAR X2 = Y1
VAR Y2 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +3, MONTH)
) + X2MAYO
VAR X3 = Y2VAR Y3 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +4, MONTH)
) + X3JUNIO
VAR X4 = Y3VAR Y4 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +5, MONTH)
) + X4JULIO
VAR X5 = Y4VAR Y5 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +6, MONTH)
) + X5// AUGUST
VAR X6 = Y5VAR Y6 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +7, MONTH)
) + X6
SEPTIEMBRE
VAR X7 = Y6VAR Y7 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +8, MONTH)
) + X7OCTUBRE
VAR X8 = Y7VAR Y8 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +9, MONTH)
) + X8NOVIEMBRE
VAR X9 = Y8VAR Y9 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +10, MONTH)
) + x9DICIEMBRE
VAR X10 = Y9VAR Y10 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +11, MONTH)
) + X10Resultado del VAR =
INTERRUPTOR(
varMonth,
2, Y, // Si CurrentMonth es 2 (febrero), devuelve X
3, Y1, // Si CurrentMonth es 3 (marzo), devuelve X1
4, Y2, // Si CurrentMonth es 4 (abril), devuelve X2
5, Y3, // Si CurrentMonth es 5 (mayo), devuelve X3
6, Y4, // Si CurrentMonth es 6 (junio), devuelve X4
7, Y5, // Si CurrentMonth es 7 (julio), devuelve X5
8, Y6, // Si CurrentMonth es 8 (agosto), devuelve X6
9, Y7, // Si CurrentMonth es 9 (septiembre), devuelve X7
10, Y8, // Si CurrentMonth es 10 (octubre), devuelve X8
11, Y9, // Si CurrentMonth es 11 (noviembre), devuelve X9
12, Y10, // Si CurrentMonth es 12 (diciembre), devuelve X10
BLANK() // Mayúsculas y minúsculas por defecto
)DEVOLUCIÓN
IF(varInitial <> 0, varFinal, Result)
Si alguien encuentra una simplificación del código, agradecería mucho mejoras y consejos. Muchas gracias por el apoyo de la comunidad !!
12 Replies
- Syndicate_Admin
Administrator
Proporcione datos de muestra que cubran su problema o pregunta por completo, en un formato utilizable (no como una captura de pantalla).
No incluya información confidencial ni nada que no esté relacionado con el problema o la pregunta.
Si no está seguro de cómo cargar datos, consulte https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216
Muestre el resultado esperado en función de los datos de muestra que proporcionó.
¿Quieres respuestas más rápidas? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523- Syndicate_Admin
Administrator
Lbendlin, agradezco su atención de antemano.
¡Tengo problemas para adjuntar el archivo .pbix!
Creé un modelo específicamente para su comprensión; sin embargo, devuelve el mensaje "El tipo de archivo (.pbix) no es compatible", aunque el archivo solo tenga 89 KB.
Os dejo algunas imágenes de mi modelo y de lo que espero conseguir!!
Saldo de efectivo inicial = Saldo de efectivo final del mes pasado
Saldo final de caja = (cuenta) 1 + 2 + 3 + 4 + 5
Si tienes alguna duda, ¡estoy a tu disposición!
- Syndicate_Admin
Administrator
Encontré información sobre el intercambio de archivos en el foro, y solo es posible con permiso.
https://community.fabric.microsoft.com/t5/Desktop/The-file-type-pbix-is-not-supported/m-p/3308037
¿Podría proporcionarme un correo electrónico para que pueda compartir el archivo?
- Syndicate_Admin
Administrator
Hola
He resuelto un problema similar en los archivos adjuntos. Por favor, estudie estos archivos y adapte las fórmulas que contienen a su caso concreto.
Espero que esto ayude.
- Syndicate_Admin
Administrator
Ashish_Mathur, muchas gracias por la respuesta!!
Pasé un tiempo mirando sus archivos y noté que usa un método para rangos de fechas para calcular valores usando BETWEEN, además de usar MIN y ALLEXCEPT para evitar posibles errores que CALCULATE pueda generar.
Honestamente, no pude entender completamente cómo estas fórmulas pueden ayudarme a evitar dependencias circulares.
¿Podría darme una breve explicación de cuál fue su problema y cómo logró resolverlo?
Si es posible, ¿podría proporcionar los archivos de antes y después?
Agradezco su atención de antemano.- Syndicate_Admin
Administrator
De nada. Su tarea simple es calcular el saldo de cierre y ese es exactamente el problema que he resuelto en esos 2 archivos.
- Syndicate_Admin
Administrator
En función de la información proporcionada, las dependencias circulares se pueden resolver mediante SUMMARIZE para crear una tabla que contenga los valores necesarios para cada fecha y, a continuación, mediante COALESCE para controlar las dependencias circulares. Consulte el código modificado a continuación:
Initial Cash Balance = VAR InitialTable = SUMMARIZE( dimCalendar, dimCalendar[Date], "varInitial", CALCULATE( [Currency Amount], dimCashFlowAccount[H1] = "5 Initial Cash Balance" ) ) VAR varFinal = CALCULATE( [Final Cash Balance], DATEADD(dimCalendar[Date], -1, MONTH) ) RETURN IF( HASONEVALUE(dimCalendar[Date]), COALESCE( SELECTCOLUMNS(InitialTable, [varInitial]), varFinal ) )Saludos
Adamk KongSi esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
- Syndicate_Admin
Administrator
Lo siento, pero el error de dependencia circular sigue ocurriendo.
Un enfoque interesante sería crear una mesa virtual; sin embargo, sería útil para las dependencias que surgen debido a columnas en lugar de medidas.
Me gustaría compartir mi archivo adaptado para ayudarlo a comprender el escenario, pero sin permiso, no veo cómo proporcionarlo.
Gracias de antemano por su ayuda.
- Syndicate_Admin
Administrator
Proporcione datos de muestra que cubran su problema o pregunta por completo, en un formato utilizable (no como una captura de pantalla).
No incluya información confidencial ni nada que no esté relacionado con el problema o la pregunta.
Si no está seguro de cómo cargar datos, consulte https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216
Muestre el resultado esperado en función de los datos de muestra que proporcionó.
¿Quieres respuestas más rápidas? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523
- Syndicate_Admin
Administrator
La solución la encontré justo debajo:
Saldo inicial de caja =
VAR varNum =
INTERRUPTOR (
MONTH(MAX('dimCalendar'[Fecha])),
1, 0,
2, -1,
3, -2,
4, -3,
5, -4,
6, -5,
7, -6,
8, -7,
9, -8,
10, -9,
11, -10,
12, -11
)VAR varMonth = MONTH(MAX('dimCalendar'[Date]))
VAR varInicial =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "5 Saldo de efectivo inicial"
)FEBRERO
VAR X =
CALCULAR(
[DefaultCase],
DATEADD(dimCalendar[Fecha], varNum, MES)
)VAR Y =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 1, MONTH)
) + XMARZO
VAR X1 = YVAR Y1 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 2, MES)
) + X1ABRIL
VAR X2 = Y1VAR Y2 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 3, MES)
) + X2MAYO
VAR X3 = Y2VAR Y3 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 4, MONTH)
) + X3JUNIO
VAR X4 = Y3VAR Y4 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 5, MONTH)
) + X4JULIO
VAR X5 = Y4VAR Y5 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 6, MES)
) + X5// AUGUST
VAR X6 = Y5VAR Y6 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 7, MONTH)
) + X6SEPTIEMBRE
VAR X7 = Y6VAR Y7 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 8, MONTH)
) + X7OCTUBRE
VAR X8 = Y7VAR Y8 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 9, MONTH)
) + X8NOVIEMBRE
VAR X9 = Y8VAR Y9 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Date], varNum + 10, MONTH)
) + x9DICIEMBRE
VAR X10 = Y9VAR Y10 =
CALCULAR(
[Importe de la moneda],
(dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo") &&
DATEADD(dimCalendar[Fecha], varNum + 11, MES)
) + X10Resultado del VAR =
INTERRUPTOR(
varMonth,
2, X, // Si CurrentMonth es 2 (febrero), devuelve X
3, X1, // Si CurrentMonth es 3 (marzo), devuelve X1
4, X2, // Si CurrentMonth es 4 (abril), devuelve X2
5, X3, // Si CurrentMonth es 5 (mayo), devuelve X3
6, X4, // Si CurrentMonth es 6 (junio), devuelve X4
7, X5, // Si CurrentMonth es 7 (julio), devuelve X5
8, X6, // Si CurrentMonth es 8 (agosto), devuelve X6
9, X7, // Si CurrentMonth es 9 (septiembre), devuelve X7
10, X8, // Si CurrentMonth es 10 (octubre), devuelve X8
11, X9, // Si CurrentMonth es 11 (noviembre), devuelve X9
12, X10, // Si CurrentMonth es 12 (diciembre), devuelve X10
BLANK() // Mayúsculas y minúsculas por defecto
)DEVOLUCIÓN
IF(varInitial <> 0, varInitial, Result)
========================================================Saldo final de caja =
VAR varNum =
INTERRUPTOR (
MONTH(MAX('dimCalendar'[Fecha])),
1, 0,
2, -1,
3, -2,
4, -3,
5, -4,
6, -5,
7, -6,
8, -7,
9, -8,
10, -9,
11, -10,
12, -11
)VAR varMonth = MONTH(MAX('dimCalendar'[Date]))
VAR varInicial =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "5 Saldo de efectivo inicial"
)VAR varFinal =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "6 Saldo de efectivo final"
)FEBRERO
VAR X =
CALCULAR(
[DefaultCase],
DATEADD(dimCalendar[Fecha], varNum, MES)
)VAR Y =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +1, MONTH)
) + XMARZO
VAR X1 = Y
VAR Y1 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +2, MONTH)
) + X1ABRIL
VAR X2 = Y1
VAR Y2 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +3, MONTH)
) + X2MAYO
VAR X3 = Y2VAR Y3 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +4, MONTH)
) + X3JUNIO
VAR X4 = Y3VAR Y4 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +5, MONTH)
) + X4JULIO
VAR X5 = Y4VAR Y5 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +6, MONTH)
) + X5// AUGUST
VAR X6 = Y5VAR Y6 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +7, MONTH)
) + X6
SEPTIEMBRE
VAR X7 = Y6VAR Y7 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +8, MONTH)
) + X7OCTUBRE
VAR X8 = Y7VAR Y8 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +9, MONTH)
) + X8NOVIEMBRE
VAR X9 = Y8VAR Y9 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +10, MONTH)
) + x9DICIEMBRE
VAR X10 = Y9VAR Y10 =
CALCULAR(
[Importe de la moneda],
dimCashFlowAccount[H1] = "1 OCF - Operativa [NIIF]" ||
dimCashFlowAccount[H1] = "2 FCF - Financiación" ||
dimCashFlowAccount[H1] = "3 ICF - Inversión" ||
dimCashFlowAccount[H1] = "4 Variación de cambio de efectivo",
DATEADD(dimCalendar[Date], varNum +11, MONTH)
) + X10Resultado del VAR =
INTERRUPTOR(
varMonth,
2, Y, // Si CurrentMonth es 2 (febrero), devuelve X
3, Y1, // Si CurrentMonth es 3 (marzo), devuelve X1
4, Y2, // Si CurrentMonth es 4 (abril), devuelve X2
5, Y3, // Si CurrentMonth es 5 (mayo), devuelve X3
6, Y4, // Si CurrentMonth es 6 (junio), devuelve X4
7, Y5, // Si CurrentMonth es 7 (julio), devuelve X5
8, Y6, // Si CurrentMonth es 8 (agosto), devuelve X6
9, Y7, // Si CurrentMonth es 9 (septiembre), devuelve X7
10, Y8, // Si CurrentMonth es 10 (octubre), devuelve X8
11, Y9, // Si CurrentMonth es 11 (noviembre), devuelve X9
12, Y10, // Si CurrentMonth es 12 (diciembre), devuelve X10
BLANK() // Mayúsculas y minúsculas por defecto
)DEVOLUCIÓN
IF(varInitial <> 0, varFinal, Result)
Si alguien encuentra una simplificación del código, agradecería mucho mejoras y consejos. Muchas gracias por el apoyo de la comunidad !!- Syndicate_Admin
Administrator
Entiendo que no había dinamismo en el código, que podría haberse calculado fácilmente usando YTD o BETWEEN. Sin embargo, en este caso, existe una dependencia circular en las medidas, por lo que tuve que optar por un método más estático, tratando de calcular mes a mes, haciendo posible calcular el mes actual.
En mi caso, tendríamos el valor del Saldo de Caja Inicial solo para el mes de enero. Debido a esto, ¡lo saqué al principio del código para poder calcular los demás!