cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Columnas calculadas dinámicas basadas en registros anteriores

Hola a todos,

Necesito ayuda con un DAX para la columna calculada.
Abajo está el ejemplo:

astojanac_0-1627590123647.png

Tengo fecha, el primer valor de apertura y el pago (campos verdes). Todos los demás campos dependen uno del otro.

Aquí está mi fórmula de prueba, pero no funciona 😞

cierre de prueba =
var _max =
MAXX(
filter('Calendario de pagos*',
'Calendario de pagos*'[Apertura LL 1 mesec]<>0 && 'Calendario de pagos*'[Lease no]=EARLIER('Payment Schedule*'[Lease no])),
'Calendario de pagos*'[Mes de inicio])

var _maxamt =
minx(filter('Payment Schedule*','Payment Schedule*'[Start month]=_max && 'Payment Schedule*'[Lease no]=EARLIER('Payment Schedule*'[Lease no])),
'Calendario de pagos*'[Apertura LL 1 mesec]- 'Calendario de pagos*'[Pago]+'Calendario de pagos*'[Kamata 1 mesec])

var amt_previuos = CALCULATE(_maxamt, FILTER('Payment Schedule*', 'Payment Schedule*'[Start month]= DATEADD('Payment Schedule*'[Start month],-1,MONTH) && 'Payment Schedule*'[Lease no]=EARLIER('Payment Schedule*'[Lease no])))

var _maxMonth = maxx(filter('Payment Schedule*','Payment Schedule*'[Start month]<=earlier('Payment Schedule*'[Start month])),'Payment Schedule*'[Start month])
devolución
SI(
'Calendario de pagos*'[Apertura LL 1 mesec]<>0, 'Calendario de pagos*'[Apertura LL 1 mesec]-'Calendario de pagos*'[Pago]+'Calendario de pagos*'[Kamata 1 mesec],

if(_maxMonth<=_max,
('Calendario de pagos*'[Apertura LL 1 mesec]-'Calendario de pagos*'[Pago]+'Calendario de pagos*'[Kamata 1 mesec]),

amt_previuos +
sumx(
filter('Calendario de pagos*','Calendario de pagos*'[Mes de inicio]>_max && 'Calendario de pagos*'[Mes de inicio]<=_maxMonth),

(amt_previuos - 'Calendario de pagos*'[Pago]) *
RELACIONADO('Detalles del arrendamiento'[Tasa de interés mensual])*'Calendario de pagos*'[broj dana za obracun kamate]/30.416))
)

Gracias de antemano

14 REPLIES 14
Syndicate_Admin
Administrator
Administrator

Hola @Ashish_Mathur ,
Gracias por su respuesta.

¿Puedo pedirle ayuda con las medidas?

Gracias de antemano

hola

Comparta la estructura exacta de sus datos de entrada en un formulario que puedo pegar en un archivo de MS Excel.

hola

Aquí está el ejemplo de entrada:

identificaciónstart_dateend_dateaberturamensualidadtipos de interés
A101/09/201401/09/2024539,05754000.003
A201/09/201601/09/2021300,50030000.0025

Y aquí está la salida:

ABCDEF
identificaciónmesaberturapagointeréscierre
A101/09/2014539,05754001601535,258
A101/10/2014535,25854001590531,448
A101/11/2014531,44854001578527,626
A101/12/2014Cierre del mes anterior5400(Cierre anterior mes C - pago D) * tasaC+D-E
A101/01/2015 5400
A101/02/2015 5400
A101/09/2024 5400



Gracias, agradezco su experiencia!

Hay @astojanac,

¿Cómo obtener la columna "interés"? Basado en su fórmula,(Apertura-Pago)/100 no es igual a 1601

Saludos
Kelly

¿Respondí a su pregunta? Marcar mi post como una solución!

(apertura-pago) * tasa *
DATEDIFF('Calendario de pagos*'[Mes de inicio],STARTOFMONTH(NEXTMONTH('Calendario de pagos*'[Mes de inicio])),DÍA) ----- esto es días entre dos meses (ussualy 30 o 31)
/30.416

Hay @astojanac,

Veo, pero causará un problema de dependencia circular si usa 1 columna fija para obtener 3 columnas dinámicas.

como:

vkellymsft_0-1627959735255.png

Es mejor que proporcione 2 columnas fijas para calcular otras 2 columnas dinámicas.

Saludos
Kelly

¿Respondí a su pregunta? Marcar mi post como una solución!

HOLA @v-kelly-msft ,

Traté de cambiar la lógica, así que ¿hay posibilidad de que pueda ayudarme si solo tenemos una columna / medida para calcular?

Por favor, encuentre la salida de ejemplo en el siguiente enlace:

https://www.dropbox.com/s/hlnfvukew1q3ah5/Sample%20data.xlsx?dl=0

gracias
Alex

Hay @astojanac,

Lo siento, olvidé mencionar que dado que el bucle no está permitido en el cálculo de dax, solo tenemos una solución para hacer un cálculo de suma, para multiplicar, no hay una buena solución que espere codificación rígida.

Revisa mi fórmula a continuación:

Para la medida:

Measure =
VAR _mindate =
    MINX ( ALL ( 'Table' ), 'Table'[Date] )
VAR _previousinterest =
    CALCULATE (
        MAX ( 'Table'[Interest] ),
        FILTER ( ALL ( 'Table' ), 'Table'[Column] = MAX ( 'Table'[Column] ) - 1 )
    )
VAR _opening =
    CALCULATE (
        MAX ( 'Table'[Opening] ),
        FILTER ( ALL ( 'Table' ), 'Table'[Date] = _mindate )
    )
VAR _startinterest =
    CALCULATE (
        MAX ( 'Table'[Interest] ),
        FILTER ( ALL ( 'Table' ), 'Table'[Date] = _mindate )
    )
VAR _line1 =
    _opening - MAX ( 'Table'[Payment] )
        + ( _opening - MAX ( 'Table'[Payment] ) ) * _startinterest
VAR _line2 =
    _line1 - MAX ( 'Table'[Payment] )
        + ( _line1 - MAX ( 'Table'[Payment] ) )
            * CALCULATE (
                MAX ( 'Table'[Interest] ),
                FILTER ( ALL ( 'Table' ), 'Table'[Column] = 2 )
            )
VAR _line3 =
    _line2 - MAX ( 'Table'[Payment] )
        + ( _line2 - MAX ( 'Table'[Payment] ) )
            * CALCULATE (
                MAX ( 'Table'[Interest] ),
                FILTER ( ALL ( 'Table' ), 'Table'[Column] = 3 )
            )
VAR _line4 =
    _line3 - MAX ( 'Table'[Payment] )
        + ( _line3 - MAX ( 'Table'[Payment] ) )
            * CALCULATE (
                MAX ( 'Table'[Interest] ),
                FILTER ( ALL ( 'Table' ), 'Table'[Column] = 4 )
            )
VAR _line5 =
    _line4 - MAX ( 'Table'[Payment] )
        + ( _line4 - MAX ( 'Table'[Payment] ) )
            * CALCULATE (
                MAX ( 'Table'[Interest] ),
                FILTER ( ALL ( 'Table' ), 'Table'[Column] = 5 )
            )
VAR _line6 =
    _line5 - MAX ( 'Table'[Payment] )
        + ( _line5 - MAX ( 'Table'[Payment] ) )
            * CALCULATE (
                MAX ( 'Table'[Interest] ),
                FILTER ( ALL ( 'Table' ), 'Table'[Column] = 6 )
            )
RETURN
    SWITCH (
        MAX ( 'Table'[Column] ),
        1, _line1,
        2, _line2,
        3, _line3,
        4, _line4,
        5, _line5,
        6, _line6
    )

Para la columna:

Column 2 =
VAR _mindate =
    MINX ( 'Table', 'Table'[Date] )
VAR _previousinterest =
    CALCULATE (
        MAX ( 'Table'[Interest] ),
        FILTER ( 'Table', 'Table'[Column] = EARLIER ( 'Table'[Column] ) - 1 )
    )
VAR _opening =
    CALCULATE (
        MAX ( 'Table'[Opening] ),
        FILTER ( ALL ( 'Table' ), 'Table'[Date] = _mindate )
    )
VAR _startinterest =
    CALCULATE (
        MAX ( 'Table'[Interest] ),
        FILTER ( ALL ( 'Table' ), 'Table'[Date] = _mindate )
    )
VAR _line1 = _opening - 'Table'[Payment] + ( _opening - 'Table'[Payment] ) * _startinterest
VAR _line2 =
    _line1 - 'Table'[Payment]
        + ( _line1 - 'Table'[Payment] )
            * CALCULATE ( MAX ( 'Table'[Interest] ), FILTER ( 'Table', 'Table'[Column] = 2 ) )
VAR _line3 =
    _line2 - 'Table'[Payment]
        + ( _line2 - 'Table'[Payment] )
            * CALCULATE ( MAX ( 'Table'[Interest] ), FILTER ( 'Table', 'Table'[Column] = 3 ) )
VAR _line4 =
    _line3 - 'Table'[Payment]
        + ( _line3 - 'Table'[Payment] )
            * CALCULATE ( MAX ( 'Table'[Interest] ), FILTER ( 'Table', 'Table'[Column] = 4 ) )
VAR _line5 =
    _line4 - 'Table'[Payment]
        + ( _line4 - 'Table'[Payment] )
            * CALCULATE ( MAX ( 'Table'[Interest] ), FILTER ( 'Table', 'Table'[Column] = 5 ) )
VAR _line6 =
    _line5 - 'Table'[Payment]
        + ( _line5 - 'Table'[Payment] )
            * CALCULATE ( MAX ( 'Table'[Interest] ), FILTER ( 'Table', 'Table'[Column] = 6 ) )
RETURN
    SWITCH (
        'Table'[Column],
        1, _line1,
        2, _line2,
        3, _line3,
        4, _line4,
        5, _line5,
        6, _line6
    )

Y verás:

vkellymsft_0-1627982079308.png

Para el archivo .pbix relacionado, pls ver adjunto.

Para el cálculo del bucle recomendaría a continuación los blogs:

https://community.powerbi.com/t5/Community-Blog/For-and-While-Loops-in-DAX/ba-p/636314

https://community.powerbi.com/t5/Community-Blog/Previous-Value-Recursion-in-DAX/ba-p/638320

Espero que lo anterior ayudaría.

Saludos
Kelly

¿Respondí a su pregunta? Marcar mi post como una solución!

Hola @v-kelly-msft ,

Muchas gracias, esto es genial!!

Ahora, me enfrento al problema con el número de filas... Tengo 120 valores de fecha, la tabla de Excel que te envié fue solo una muestra.

No puedo escribir tantas filas manualmente, y segundo thinkg, tal vez ese número puede increse.

Así que lo que necesito es tomar siempre el mes pasado y recalcular uno nuevo. ¿Es eso posible?

gracias

Alex

Hay @astojanac,

Como dije, si necesita hacer un cálculo de multiplicación en un bucle, es mejor que lo termine fuera del escritorio, como SQL, luego regrese al escritorio para hacer un cálculo de suma.

De lo contrario, sería un gran cálculo en el escritorio como te muestro en la última respuesta.

Saludos
Kelly

¿Respondí a su pregunta? Marcar mi post como una solución!

Hola @v-kelly-msft ,

Exactamente, ¡ese es el problema! Es por eso que quería probar con columnas calc no medidas, pero no puedo firuge fuera de cómo...

gracias

Alex

Hey @astojanac ,

por favor, permítame señalarle a una de mis publicaciones de blog anteriores, estoy seguro de que puede adaptar mi enfoque a su requisito: Uso de iteradores de tabla para calcular un valor futuro - Mincing Data - Gain Insight from Data (mi...

saludos
gato

Hola Tom,

Gracias por la respuesta, increíble entrada de blog!!

Pero todavía estoy teniendo problema no para un valor calculado, sino tres y no puedo encontrar la manera de salir de un círculo 😞

Syndicate_Admin
Administrator
Administrator

hola

Creo que esto será más fácil de resolver con una medida directamente en lo visual.

Helpful resources

Announcements
PBI_User Group Leader_768x460.jpg

Manage your user group events

Check out the News & Announcements to learn more.

MBAS on Demand

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

Get Ready for Power BI Dev Camp

Microsoft named a Leader in The Forrester Wave

Microsoft received the highest score of any vendor in both the strategy and current offering categories.

R2 (Green) 768 x 460px.png

Microsoft Dynamics 365 & Power Platform User Professionals

DynamicsCon is a FREE, 4 half-day virtual learning experience for 11,000+ Microsoft Business Application users and professionals.