2016-09-01 3 views
1

У меня есть таблица с выплатой заработной платы через отделы («Дни от 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 

Как создать меру, которая правильно вычисляет поправки для каждого месяца, а также получает итоговые правильно?

(так в основном это выглядит до последней коррекции для каждого отдела (или другого измерения) и использует сумму из них вместо последней коррекции по всем измерениям)

ответ

2

Вы в основном нужно перебрать отделов.

Salary (corr.) cum := 
SUMX (
    Departments, 
    CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction]) 
) 

Это должно сделать трюк.

Alberto