Forum Discussion
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
| empresa | fecha ini | fecha fin | valor mensual |
| A | 01/01/2022 | 31/12/2024 | 4 |
| A | 01/01/2021 | 31/12/2023 | 3 |
| A | 01/04/2020 | 30/06/2020 | 2 |
| B | 01/01/2020 | 31/03/2020 | 6 |
| B | 01/01/2021 | 31/03/2021 | 5 |
y necesito obtener esto:
| AÑO | suma valor del año depdendiendo la cantidad de meses |
| 2020 | 24 |
| 2021 | 51 |
| 2022 | 84 |
| 2023 | 84 |
| 2024 | 48 |
donde se tiene que sumar dependiendo del año y cantidad de meses que representa en ese año el valor mensual
gracias antemano
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
- Syndicate_AdminAdministrator
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?
- mavn23061997Frequent 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_AdminAdministrator
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: