Forum Discussion
Dax problem
- 3 years ago
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:
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.
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:
- mavn230619973 years agoFrequent Visitor
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
- Syndicate_Admin3 years agoAdministrator
Esto depende de cómo se relacionen.
¿Cuál es la relación activa?
- mavn230619973 years agoFrequent Visitor
Fecha Inicio