En el contexto de filtro inicial resulta sencillo obtener el primer día y el último día del “período actual” (para incluirlas como variables en una medida) usando las funciones MIN y MAX, respectivamente:
VAR __lastDate = MAX('Calendar'[Date])
Por ejemplo, en el cálculo correspondiente al tercer trimestre de 2016, __fistDate tomaría el valor 1 de julio de 2016, y __lastDate el valor 30 de septiembre de 2016.
Si queremos apuntar al día 1 de enero “del período actual” (sea el que sea en cada cálculo) lo podemos conseguir usando la función DATE: el día sería 1, el mes sería 1 y… ¿cuál sería el año? La buena noticia es que tanto __firstDate como __lastDate son fechas incluidas en el año que nos interesa, lo que significa que podemos extraer el año de cualquiera de ellas usando la función YEAR. Es decir, la medida ahora sería la siguiente:
VAR __firstDate = MIN('Calendar'[Date])
VAR __lastDate = MAX('Calendar'[Date])
VAR __year = YEAR(__firstDate)
RETURN
CALCULATE(
[Sales],
FILTER(
ALL('Calendar'),
AND(
'Calendar'[Date] >= DATE(__year, 1, 1),
'Calendar'[Date] <= __lastDate
)
)
)
Obsérvese que, una vez identificadas las fechas de inicio y fin “del período actual” (de las filas visibles en el calendario en el contexto de filtro inicial), extraemos el año “actual” de cualquiera de las dos fechas (en el código anterior se ha usado __firstDate). A continuación, se calcula [Sales] modificando el contexto de filtro de forma tal que la última fecha visible se mantenga igual (__lastDate), pero que la fecha de inicio sea el 1 de enero del año de que se trate.
La matriz en nuestro informe ahora muestra el siguiente aspecto:
Comprobamos que está funcionando correctamente. Y si bajamos a nivel de mes, sigue haciéndolo: