Forum Discussion

mavn23061997's avatar
mavn23061997
Frequent Visitor
3 years ago
Solved

Dax problem

Estimados buenas tardes quiero solicitarles su ayuda para poder realizar la siguiente medida o sugenerencia para lograr lo siguiente 

tengo los siguientes datos

empresafecha inifecha finvalor mensual
A01/01/202231/12/20244
A01/01/202131/12/20233
A01/04/202030/06/20202
B01/01/202031/03/20206
B01/01/202131/03/20215

 

y necesito obtener esto:

AÑOsuma valor del año depdendiendo la cantidad de meses
202024
202151
202284
202384
202448

 

donde se tiene que sumar dependiendo del año y cantidad de meses que representa en ese año el valor mensual

gracias antemano 

 

 

  • @mavn23061997 ,

    Supongo que la tabla de años está separada de la otra tabla, cree la siguiente medida:

    Values per Month = 
    VAR temptable =
        ADDCOLUMNS (
            FILTER (
                ADDCOLUMNS (
                    CROSSJOIN (
                        'Years_Table',
                        ADDCOLUMNS (
                            'DataValues',
                            "StartYear", YEAR ( 'DataValues'[Date ini] ),
                            "EndYear", YEAR ( 'DataValues'[End date] )
                        )
                    ),
                    "Flag",
                        IF ( [StartYear] <= [Years] && [EndYear] >= [Years], 1, 0 )
                ),
                [Flag] = 1
            ),
            "TotalMonths",
                SWITCH (
                    TRUE (),
                    [StartYear] = [Years],
                        DATEDIFF (
                            'DataValues'[Date ini],
                            MIN ( DATE ( [years], 12, 31 ), 'DataValues'[End date] ),
                            MONTH
                        ) + 1,
                    [StartYear] > [Years], DATEDIFF ( DATE ( YEAR ( [StartYear] ), 12, 31 ) + 1, 'DataValues'[Date ini], MONTH ),
                    [StartYear] < [Years]
                        && [EndYear] > [Years], DATEDIFF ( DATE ( [Years], 1, 1 ), DATE ( [Years], 12, 31 ), MONTH ) + 1,
                    [EndYear] = [Years], DATEDIFF ( DATE ( [years], 1, 1 ), 'DataValues'[End date], MONTH ) + 1
                )
        )
    RETURN
        SUMX ( tempTable, [TotalMonths] * 'DataValues'[Monthly Value] )

    Ahora solo use esta medida con la columna de años:

7 Replies

  • Hola @manv23061997

    ¿Puedes explicar un poco mejor lo que quieres lograr? No entender lo que significa el valor de la suma del año dependiendo del número de meses.

    ¿Cómo obtienes 24 para 2020 y 51 para 2021?

    • mavn23061997's avatar
      mavn23061997
      Frequent Visitor

      Si te comento

      El resultado 24 para 2020 lo obtengo de la esta forma:

      En cuadro puedo observar que que hay un registro de la empresa "A" que tiene como fecha inicio : 01/04/2020 y ficha final: 30/06/2020 entre ese intervalo de fechas existen 3 meses de diferencia, por lo tanto 3 meses multiplicado por el valor mensual 2 me da 6 como resultado en el año 2020, luego tambien existe un registro "B" que tiene como fecha inicio: 01/01/2020 y fecha final :31/03/2020 entre esas fechas existe 3 meses de diferencia mulplicado por el valor mensual 6 me da como resultado 18.

       

      Entonces en el año 2020 tengo como valor total 6 + 18=24

       

      El resultado 51 para el año 2021 se obtiene de la misma forma solo considerando el valor total de los registros que tengan comprendido el año  dentro del periodo de fecha inicio y fecha fin.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @mavn23061997 ,

        Supongo que la tabla de años está separada de la otra tabla, cree la siguiente medida:

        Values per Month = 
        VAR temptable =
            ADDCOLUMNS (
                FILTER (
                    ADDCOLUMNS (
                        CROSSJOIN (
                            'Years_Table',
                            ADDCOLUMNS (
                                'DataValues',
                                "StartYear", YEAR ( 'DataValues'[Date ini] ),
                                "EndYear", YEAR ( 'DataValues'[End date] )
                            )
                        ),
                        "Flag",
                            IF ( [StartYear] <= [Years] && [EndYear] >= [Years], 1, 0 )
                    ),
                    [Flag] = 1
                ),
                "TotalMonths",
                    SWITCH (
                        TRUE (),
                        [StartYear] = [Years],
                            DATEDIFF (
                                'DataValues'[Date ini],
                                MIN ( DATE ( [years], 12, 31 ), 'DataValues'[End date] ),
                                MONTH
                            ) + 1,
                        [StartYear] > [Years], DATEDIFF ( DATE ( YEAR ( [StartYear] ), 12, 31 ) + 1, 'DataValues'[Date ini], MONTH ),
                        [StartYear] < [Years]
                            && [EndYear] > [Years], DATEDIFF ( DATE ( [Years], 1, 1 ), DATE ( [Years], 12, 31 ), MONTH ) + 1,
                        [EndYear] = [Years], DATEDIFF ( DATE ( [years], 1, 1 ), 'DataValues'[End date], MONTH ) + 1
                    )
            )
        RETURN
            SUMX ( tempTable, [TotalMonths] * 'DataValues'[Monthly Value] )

        Ahora solo use esta medida con la columna de años: