Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. Register Now

Reply
mavn23061997
Frequent Visitor

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 

 

 

1 ACCEPTED SOLUTION

@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:

MFelix_0-1679495345772.png

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

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?

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.

@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:

MFelix_0-1679495345772.png

Lo acabo de Probar y funciona, solo por curiosidad si en caso tuviese tabla calendario relacionadas con fecha de inicio y fecha fin , como se podria lograr el mismo resultado

 

Esto depende de cómo se relacionen.

¿Cuál es la relación activa?

Fecha Inicio

Pruebe la siguiente fórmula:

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

No olvides aceptar la respuesta correcta para ayudar a los demás.

Helpful resources

Announcements
Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

Top Solution Authors
Top Kudoed Authors