2017-08-03 30 views
0

DAX中可能存在以下情况:DAX请参阅之前计算的计算值列公式 - 拼图

以下A,B,C,d,E,...是成熟Buckets.A是负桶,B为正桶

铲斗金额

甲-100

乙90

ç-200

d 300

ë-10

˚F30

ħ-2

要求是计算每个负适量。规则的余额是正量可以在净前桶负量,而不是下一个。 并且该正的残差可以流到下一个可用的-ve桶

因此当前负桶残差=(前负桶残差)+(前一个正桶的SUm总量达到先前的负桶)的公式+当前负桶量

对于A:-100,余量为0,因为没有在以前的桶

对于C没有正量:-200,余量=(90 + -200)= -110,因为这是一个负数,它不会用于下一个桶

对于E:-10,ba (0)+ 300-10 = 290,因为c中的前一个余额是负值,需要将其视为0或忽略。

为H:-2,该余额=(290)+ 30 - 2 = 318

我使用计算列使用早期功能试过这DAX,但也没能弄清楚如何查找以前的计算当前计算值。它抛出循环依赖性错误。

+0

这*是一个有趣的谜题。我可以用Excel公式很容易地做到这一点,但我无法弄清楚如何解决DAX中的循环依赖。我的Excel工作表使用B列计算金额和D。 B1有一个列标题,D1有一个零(0)。数额从B2开始。我在D2中有= IF(IF(D1> 0,B2 + D1,B2)> 0,IF(D1> 0,B2 + D1,B2),0)',并将它复制到列中单元参考在复制期间进行调整,因此在D3中我具有'= IF(IF(D2> 0,B3 + D2,B3)> 0,IF(D2> 0,B3 + D2,B3),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

老实说,我不知道这种方法会为一组不同的数据的工作,但它的工作原理为这一个。

支持达伦富勒关于使用LOOKUPVALUE获得前一行的想法。看看他的博客文章here