Я буду игнорировать ранее заданные связанные вопросы и начну с нуля.
Сначала создайте меру:
Current Earn =
CALCULATE (
SUM( 'Test data'[Value]),
'Test data'[Act Rem] = "Actual Units",
'Test data'[Type] = "Current"
)
Эта мера будет использоваться в других мерах, чтобы избежать повторного ввода всех этих условий («Фактические единицы» и «Текущие») иснова.Хорошей практикой является повторное использование мер в других мерах - экономит работу, делает код чище и его проще реорганизовать.
Создайте другую меру:
Cut Date = SELECTEDVALUE('P6 Update'[Date])
Мы будем использовать эту меру всякий раз, когда нам понадобится дата отсечения.Обратите внимание, что он не должен быть жестко запрограммирован - если таблица P6 содержит список дат, вы можете создать раскрывающийся слайсер из дат и выбрать динамически дату отсечения.Формула будет работать правильно.
Создайте третью меру:
Next Earn =
VAR Cut_Date = [Cut Date]
VAR Current_Date = MAX ( 'Test data'[Date] )
VAR Next_Date = Current_Date + 1
VAR Current_Earn = [Current Earn]
VAR Next_Earn = CALCULATE ( [Current Earn], 'Test data'[Date] = Next_Date )
RETURN
SWITCH (
TRUE,
Current_Date < Cut_Date, Current_Earn,
Current_Date = Cut_Date, Current_Earn + Next_Earn,
BLANK ()
)
Я не уверен, что «Next Earn» подходит для него, надеюсь, вы найдете более интуитивное имя.Как это работает: мы сохраняем все необходимые входные данные в переменные, а затем используем функцию SWITCH для определения результатов.Надеюсь, это говорит само за себя.(Примечание: если вам нужно 0 выше даты вырезания, замените BLANK () на 0).
Наконец, мы определяем показатель совокупного заработка.Он не требует какой-либо специальной логики, потому что предыдущая мера позаботится о нем правильно:
Cum Earn =
VAR Current_Date = MAX('Test data'[Date])
RETURN
CALCULATE(
[Next Earn],
FILTER(ALL('Test data'[Date]), 'Test data'[Date] <= Current_Date))
Результат: