DAX参考计算列公式中的先前计算值 - 拼图

时间:2017-08-03 09:16:00

标签: dax ssas-tabular

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中使用先前函数使用计算列来尝试此操作,但无法计算如何查找当前计算中的先前计算值。它抛出循环依赖性错误。

1 个答案:

答案 0 :(得分:1)

不是理想的有一个额外的列,但我能够使用三个自定义列生成预期的结果。 (注意 - 我为此使用了PowerBI,所以希望Tabular模型都是一样的)

1)为数据添加索引列。

Step 1 - Index Column

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
    )
)

Step 2

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
    )
)

Step 3

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
        )
    )
)

Step 4

老实说,我不知道这种方法是否适用于不同的数据集,但它适用于这种方法。

向Darren Fuller道歉,了解如何使用LOOKUPVALUE获取前一行。查看他的博文here