Мне нужно рассчитать текущий доход для установки + обслуживания для проектов и рассчитать ежемесячный доход для целей управления в DAX в Power BI.
Проблемаявляется следующим.
Проекты хранятся в таблице КОНТРАКТОВ, как это:
И у меня есть отдельная таблица дат INST_DATE_TABLE:
Таблицы связаны через поле [INSTALLATION_DATE].
За каждый месяц выручка равна сумме [INSTALLATION_REVENUE], если установка была выполнена в этом месяце, плюс за первый месяц ежемесячного дохода от обслуживания, который указан как [MAINTENANCE_COST_PER_UNIT] * [MAINTENANCE_UNIT] / 12.
А доход от обслуживания следует рассчитывать только в том случае, если текущая дата выходит за пределы даты установки!
Некоторые контракты еще не подписаны, поэтому у них нет установленной даты установки (NULL)
Таким образом, DAX ВЫХОДА УСТАНОВКИ выглядит так:
.INSTALLATION_REVENUE =
CALCULATE (
SUMX(CONTRACTS;
CONTRACTS[INSTALLATION_REVENUE]
);
CONTRACTS[INSTALLATION_DATE] > 0
)
И ЕЖЕМЕСЯЧНЫЙ РЕГУЛЯРНЫЙ ВЫХОД выглядит следующим образом:
.REGULAR_REVENUE =
CALCULATE (
SUMX(CONTRACTS;
CONTRACTS[MAINTENANCE_COST_PER_UNIT]*CONTRACTS[MAINTENANCE_UNIT]
) / 12;
CONTRACTS[INSTALLATION_DATE] > 0
)
Для всех дат я могу рассчитать денежный поток последних следующим образом:
.REGULAR_REVENUE_ONGOING =
CALCULATE (
[.REGULAR_REVENUE];
ALL(INST_DATE_TABLE[INSTALLATION_DATE])
)
, что дает мне хорошую серию ежемесячныхдоходы за все периоды. Но я хотел бы видеть это только для периодов, которые выходят за пределы даты установки!
Так что, скажем, отфильтровано по контракту 1 Теперь у меня есть следующий денежный поток:
Но за периоды до 2019.04.01 я бы хотел видеть нули!
Как я могу это сделать?
Я просто не могу отфильтровать даты, относящиеся к дате установки проекта!
После получения ожидаемого результата для одного контрактабыло бы легко суммировать его для всех контрактов, подобных этому
.TOTAL_REVENUE =
[.INSTALLATION_REVENUE] + [.REGULAR_REVENUE_EXPECTED]
ОБНОВЛЕНИЕ:
Я создал итоговую сумму, чтобы отобразить текущий доход как таковой:
.REGULAR_REVENUE_ONGOING =
CALCULATE (
[.REGULAR_REVENUE];
FILTER(
ALL(INST_DATE_TABLE[INSTALLATION_DATE]);
INST_DATE_TABLE[INSTALLATION_DATE
<=MAX(INST_DATE_TABLE[INSTALLATION_DATE])
)
)
это показывает правильную серию, но теперь у меня есть другая проблема.Когда я пытаюсь накопить этот и без того совокупный ряд данных, он не суммируется как совокупный ряд данных !
Буду признателен за любую помощь
.REVENUE_TOTAL_CUMULATIVE =
CALCULATE(
[.REVENUE_TOTAL];
FILTER(
INST_DATE_TABLE;
INST_DATE_TABLE[INSTALLATION_DATE] <= MAX(INST_DATE_TABLE[INSTALLATION_DATE])
)
)