我正在尝试计算(预算)分配和支出之间的差异。
乍一看,这似乎很容易用一个简单的措施:
Balance = SUM(Register[AllocationAmount]) – SUM(Register[TransactionAmount])
但是,还有一个额外的规则要考虑:第一次分配之前的交易金额应该被忽略。谨慎Balance
变得更加复杂以适应这种情况:
Balance = CALCULATE(
SUM(Register[AllocationAmount]) - SUM(Register[TransactionAmount]),
FILTER(Dates,
Dates[Date] >= FIRSTDATE(Category[InitialAllocationDate])
&& NOT ISBLANK(FIRSTDATE(Category[InitialAllocationDate]))
)
)
不幸的是,Balance
在用于计算“类别”表中层次结构的总计时,无法正确累加。这是有道理的。在Balance
评估层次结构时,日期过滤器中的FIRSTDATE(Category[InitialAllocationDate])
会将所有日期中的所有日期中的第一个日期从上下文中的所有类别行中拉出在更高级别,然后使用此日期为整个分组应用过滤器一次。
这是不正确的。为了生成准确的总计,需要在每个类别的基础上应用过滤器,以便在每个类别的InitialAllocationDate
中过滤因子。为了实现这一点,我更改了Balance
,以便仅在应用单个Category[Name]
过滤器时进行计算(即不进行层次结构分组)。然后,我创建了一个单独的度量,使用SUMX
在每个类别行的基础上评估Balance
。
Balance = IF (HASONEFILTER(Category[Name])),
CALCULATE(
SUM(Register[AllocationAmount]) - SUM(Register[TransactionAmount]),
FILTER(Dates,
Dates[Date] >= FIRSTDATE(Category[InitialAllocationDate])
&& NOT ISBLANK(FIRSTDATE(Category[InitialAllocationDate]))
)
)
)
CumulativeBalance = SUMX(Grouping, Register[Balance])
这会产生正确的总计类别的层次结构(耶!);但是,它需要两个措施。
有没有办法可以消除第二个度量(CumulativeBalance
),而是以某种方式调整Balance
,以便它在层次结构中正确计算?