Отказ от ответственности - я создал это решение с помощью Power BI.Формула должна быть перенесена в Excel / PowerPivot, но для этого могут потребоваться некоторые незначительные изменения.
Хотя функции анализа времени DAX очень полезны, мне кажется, что меня тянет к ручному подходу вычисления YTD, в предыдущем году и т. д. Имея это в виду, именно так я бы решил вашу проблему.
Во-первых, я бы сделал меру, представляющую собой просто сумму вашего столбца Value.Наличие этой меры просто приятно в будущем;не является абсолютной необходимостью.
Total Value = SUM(Data[Value])
Далее, для использования для расчета YTD вручную на основе предыдущего месяца нам нужно знать две вещи: 1) каков целевой месяц (т. е. предыдущий месяц) и 2) каков год этого месяца.
Если вы собираетесь использовать эти значения где-либо еще, я бы поместил их в свои собственные измерения и использовал их здесь.Если это единственное место, где они будут использоваться, я хотел бы использовать переменные для вычисления значений такого типа.
Первое, что нам нужно, это выбранное значение (или максимальная дата в случае отсутствия выбора).
VAR SelectedDate = MAX(Data[Date])
С этой датой мы можем рассчитать TargetYear и TargetMonth.Оба они - простые операторы IF
, чтобы поймать пересечение января / декабря.
VAR TargetYear = IF(MONTH(SelectedDate) = 1, YEAR(SelectedDate) - 1, YEAR(SelectedDate))
VAR TargetMonth = IF(MONTH(SelectedDate) = 1, 12, MONTH(SelectedDate) - 1)
Имея все необходимые нам значения, мы пишем оператор CALCULATE
, который фильтрует данные по TargetYear и месяцу.меньше или равно TargetMonth.
CALCULATE([Total Value], FILTER(ALL(Data), YEAR([Date]) = TargetYear && MONTH([Date]) <= TargetMonth))
Собрать все вместе выглядит следующим образом.
Prior Month YTD =
VAR SelectedDate = MAX(Data[Date])
VAR TargetYear = IF(MONTH(SelectedDate) = 1, YEAR(SelectedDate) - 1, YEAR(SelectedDate))
VAR TargetMonth = IF(MONTH(SelectedDate) = 1, 12, MONTH(SelectedDate) - 1)
RETURN
CALCULATE([Total Value], FILTER(ALL(Data), YEAR([Date]) = TargetYear && MONTH([Date]) <= TargetMonth))
![Result](https://i.stack.imgur.com/RnXiI.png)