Это сложно. Это не так уж плохо, если вы хотите определить множитель в своем итераторе, но я все еще пытаюсь выяснить, как абстрагировать это при правильной передаче контекста обеих строк.
Вот как я могу сделать это следующим образом: одна мера:
Borrowing Forecast =
VAR ThisYear = SELECTEDVALUE ( 'Table'[FiscalYear] )
VAR Years =
SUMMARIZE (
ALLSELECTED ( 'Table' ),
'Table'[FiscalYear],
"Multiplier", SWITCH (
TRUE (),
'Table'[FiscalYear] < ThisYear, 0,
'Table'[FiscalYear] - ThisYear < 2, 1,
'Table'[FiscalYear] - ThisYear < 3, 0.5,
0
),
"Borrowing", CALCULATE (
SUM ( 'Table'[Value] ),
'Table'[TransactionType] = "borrowing"
)
)
RETURN
SUMX ( Years, [Multiplier] * [Borrowing] )
Меру Borrowing
легко определить отдельно, но множитель сложнее ...
ОК. Я думаю, что у меня это есть с некоторыми хакерами DAX c.
Чтобы выделить множитель, давайте определим его следующим образом:
MinYear = CALCULATE ( MIN ( 'Table'[FiscalYear] ), ALL ( 'Table' ) )
Multiplier =
VAR YearDiff = SELECTEDVALUE ( 'Table'[FiscalYear] ) - [MinYear]
RETURN
SWITCH (
TRUE (),
YearDiff < 0, 0,
YearDiff < 2, 1,
YearDiff < 3, 0.5,
0
)
Теперь мы можем записать прогнозную меру следующим образом:
Forecast =
VAR Offset = SELECTEDVALUE ( 'Table'[FiscalYear] ) - [MinYear]
RETURN
SUMX (
ALL ( 'Table'[FiscalYear] ),
CALCULATE (
[Multiplier],
'Table'[FiscalYear] = EARLIER ( 'Table'[FiscalYear] ) - Offset
) * [Borrowing]
)
Обратите внимание, что мы по существу передаем EARLIER ( 'Table'[FiscalYear] ) - Offset
как переменную для меры Multiplier
. Также обратите внимание, что Offset
содержит [MinYear]
, который заменяется на единицу в YearDiff
после прохождения, так что эффективно
YearDiff = EARLIER ( 'Table'[FiscalYear] ) - SELECTEDVALUE ( 'Table'[FiscalYear] )
, где первым является год от контекст строки, а последний - год из контекста фильтра.
[MinYear]
и Offset
существуют потому, что вы не можете передать произвольную переменную, а только те, которые существуют в таблице, поэтому все должно быть переместился, чтобы сохранить его в пределах существующего диапазона лет.
Вот как это выглядит в матрице: