Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago
Solved

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 ...
  • Syndicate_Admin's avatar
    2 years ago

    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)
    ) + X

    MARZO
    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[Fecha], varNum + 2, MES)
    ) + X1

    ABRIL
    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[Fecha], varNum + 3, MES)
    ) + X2

    MAYO
    VAR X3 = Y2

    VAR 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)
    ) + X3

    JUNIO
    VAR X4 = Y3

    VAR 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)
    ) + X4

    JULIO
    VAR X5 = Y4

    VAR 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 = Y5

    VAR 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 = Y6

    VAR 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)
    ) + X7

    OCTUBRE
    VAR X8 = Y7

    VAR 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)
    ) + X8

    NOVIEMBRE
    VAR X9 = Y8

    VAR 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)
    ) + x9

    DICIEMBRE
    VAR X10 = Y9

    VAR 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)
    ) + X10

    Resultado 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)
    ) + X

    MARZO

    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)
    ) + X1

    ABRIL

    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)
    ) + X2

    MAYO
    VAR X3 = Y2

    VAR 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)
    ) + X3

    JUNIO
    VAR X4 = Y3

    VAR 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)
    ) + X4

    JULIO
    VAR X5 = Y4

    VAR 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 = Y5

    VAR 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 = Y6

    VAR 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)
    ) + X7

    OCTUBRE
    VAR X8 = Y7

    VAR 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)
    ) + X8

    NOVIEMBRE
    VAR X9 = Y8

    VAR 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)
    ) + x9

    DICIEMBRE
    VAR X10 = Y9

    VAR 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)
    ) + X10

    Resultado 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 !!