DAX中是否可以使用以下内容?
以下A,B,C,D,E,..是成熟Buckets.A是负桶,B是正桶
Bucket Amount
A -100
B 90
c -200
D 300
E -10
F 30
H -2
要求是计算每个负数的余额。规则是正数量可以在前一个桶中净负值,但不是下一个。 并且这个正的残差可以流到下一个可用的-ve bucket
所以当前负桶残差的公式=(前一个负桶残差)+(前一个正桶的SUm量直到前一个负桶)+当前负桶量
对于A:-100,余额为0,因为前一个桶中没有正数
对于C:-200,余额=(90 + -200)= -110,因为这是一个负数,它不会用于下一个桶
对于E:-10,余额=(0)+ 300-10 = 290,因为c中的前一个余额为负数,需要将其视为0或忽略。
对于H:-2,余量=(290)+ 30-2 = 318
我在DAX中使用先前函数使用计算列来尝试此操作,但无法计算如何查找当前计算中的先前计算值。它抛出循环依赖性错误。
答案 0 :(得分:1)
不是理想的有一个额外的列,但我能够使用三个自定义列生成预期的结果。 (注意 - 我为此使用了PowerBI,所以希望Tabular模型都是一样的)
1)为数据添加索引列。
2)添加一列,将每行的金额添加到前一行(如果前一行的金额为正数)。
Step1 = IF(Data[Index] = 0, 0,
Data[Amount] + IF(
LOOKUPVALUE(Data[Amount], Data[Index], Data[Index] - 1) > 0,
LOOKUPVALUE(Data[Amount], Data[Index], Data[Index] - 1),
0
)
)
3)添加一列,将每行的金额添加到前一行中第一个公式的结果中(如果前一行的结果为正)
Step2 = IF(Data[Index] = 0, 0,
Data[Amount] + IF(
LOOKUPVALUE(Data[Step1], Data[Index], Data[Index] - 1) > 0,
LOOKUPVALUE(Data[Step1], Data[Index], Data[Index] - 1),
0
)
)
4)最后,添加一列,将每行的金额添加到前一行的第二个公式的结果中。
FinalResults = IF(Data[Index] = 0, 0,
IF(Data[Amount] > 0, 0, Data[Amount] +
IF(
LOOKUPVALUE(Data[Step2], Data[Index], Data[Index] - 1) > 0,
LOOKUPVALUE(Data[Step2], Data[Index], Data[Index] - 1),
0
)
)
)
老实说,我不知道这种方法是否适用于不同的数据集,但它适用于这种方法。
向Darren Fuller道歉,了解如何使用LOOKUPVALUE
获取前一行。查看他的博文here。