У меня есть таблица с выплатой заработной платы через отделы («Дни от Y» = дней с начала года, «дней до М» = дней до конца месяца)DAX - LASTNONBLANK на измерение
Department | Salary | Date | Type | Days from Y | Days to M
-----------+--------+------------+-----------------+-------------+-----------
Finance | 71 | 01-01-2016 | Regular payment | 1 | 30
Sales | 3000 | 20-01-2016 | Regular payment | 20 | 11
Sales | -300 | 21-01-2016 | Correction | 21 | 10
Finance | 2000 | 01-02-2016 | Regular payment | 32 | 27
Sales | 3100 | 15-02-2016 | Regular payment | 46 | 12
Для регулярные платежи, зарплата должна быть исправлена, чтобы представить, как будто это был полный месяц. Но в следующем месяце корректировка предыдущего месяца не должна включаться (потому что она уже предусмотрена в новой зарплате) - только исправление последнего месяца должно быть включено!
Для продаж, это было бы:
Date | Salary | Salary (cum.) | Correction | Salary (corr.) cum.
---------------------------------------------------------------------------
2016 | 5800 | 5800 | |
2016-01 | 2700 | 2700 | 1650 | 4350
2016-01-20 | 3000 | 3000 | 1650 | 4650
2016-01-21 | -300 | 2700 | | 4350
2016-02 | 2550 | 5250 | 2040 | 7290
2016-02-15 | 2550 | 5250 | 2040 | 7290
Расчет коррекции сам по себе достаточно просто: если это обычный платеж, а затем использовать эту дату для расчета коррекции для данной комбинации месяца-отдел.
Используя выражение LASTNONBLANK
, я могу сделать правильный кумулятивный показатель, который работает для одного отдела:
Salary (corr.) cum := CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction])
Однако, это не работает в подразделениях - для 2016-01, что приведет к неправильному общей счетчики:
Department | Salary | Salary (cum.) | Correction | measure | should be
-----------------------------------------------------------------------
(Total) | 2771 | 3071 | | 4721 | 6851
Finance | 71 | 71 | 2130 | 2201 | 2201
Sales | 2700 | 3000 | 1650 | 4650 | 4650
Как создать меру, которая правильно вычисляет поправки для каждого месяца, а также получает итоговые правильно?
(так в основном это выглядит до последней коррекции для каждого отдела (или другого измерения) и использует сумму из них вместо последней коррекции по всем измерениям)