У меня есть простая таблица бюджета, которая показывает мне недельный бюджет: Неделя - Бюджет - Статья
Теперь я хотел бы получить промежуточный итог для сравнения МПД. Для этого делю недельный бюджет на количество рабочих дней:
Budget per Day = DIVIDE([Budget], [# Working Days per Week])
Поскольку у меня есть финансовый календарь с определенными датами окончания и начала для каждого месяца, я не могу использовать функции аналитики времени с DAX. Поэтому я разработал эту функцию:
Budget MTD =
CALCULATE (
SUMX (
'Calendar',
[Budget per Day]
),
FILTER (
ALL ( 'Calendar' ),
'Calendar'[Fiscal Year]
= VALUES ( 'Calendar'[Fiscal Year] )
&& 'Calendar'[Fiscal Month Number]
= MAX ( 'Calendar'[Fiscal Month Number] )
&& 'Calendar'[Date]
<= MAX ( 'Calendar'[Date] )
&& 'Calendar'[IsWorkingDay] = 1
)
)
Почему-то я всегда получаю Бюджет на весь месяц. Чего здесь не хватает?
Я думаю, мне как-то нужно добавить что-то вроде < = СЕГОДНЯ, верно?
Эта мера будет использоваться в матрице с фильтром для текущего месяца.
Поскольку вы используете матрицу с месяцем в строках, MAX( 'Calendar'[Date] )
вернет последний день месяца в текущей строке. Если Calendar[Date] имеет тип Datetime и содержит реальную дату, можно просто добавить условие на TODAY()
, как показано ниже.
Budget MTD =
CALCULATE(
SUMX(
'Calendar',
[Budget per Day]
),
FILTER(
ALL( 'Calendar' ),
'Calendar'[Fiscal Year]
= VALUES( 'Calendar'[Fiscal Year] )
&& 'Calendar'[Fiscal Month Number]
= MAX( 'Calendar'[Fiscal Month Number] )
&& 'Calendar'[Date]
<= MAX( 'Calendar'[Date] )
&& 'Calendar'[Date]
<= TODAY()
&& 'Calendar'[IsWorkingDay] = 1
)
)
Но это просто изменит значение МПД за последний месяц, текущий. Если вместо этого мы хотим отфильтровать каждый месяц, чтобы вычислить MTD до того же дня текущего месяца, то можно добавить столбец 'Calendar'[Fiscal Month Day Number]
в таблицу календаря с номером дня с начала месяца (I Я предполагаю, что это может отличаться от дня даты)
Budget MTD =
VAR fiscalYear =
MAX( 'Calendar'[Fiscal Year] )
VAR fiscalMonthNumber =
MAX( 'Calendar'[Fiscal Month Number] )
VAR currentFiscalMonthDayNumber =
CALCULATE(
MAX( 'Calendar'[Fiscal Month Day Number] ),
'Calendar'[Date]
= TODAY(),
ALL( 'Calendar' )
)
RETURN
CALCULATE(
SUMX(
'Calendar',
[Budget per Day]
),
ALL( 'Calendar' ),
'Calendar'[Fiscal Year] = fiscalYear,
'Calendar'[Fiscal Month Number] = fiscalMonthNumber,
'Calendar'[Fiscal Month Day Number] <= currentFiscalMonthDayNumber,
'Calendar'[IsWorkingDay] = 1
)