我正在尝试创建一个取决于前一行结果的计算列,并且我遇到了循环依赖问题。
我在源表中有一个索引和一个值,我按如下方式创建计算:
TestValue = [Value] +
CALCULATE(sum([Value]),
filter(all(Table), [Index] < earlier([Index]))) +
// running total of previous Value's
CALCULATE(sum([TestResult]),
filter(all(Table), [Index] < earlier([Index])))
// running total of previous TestResult's
和
TestResult = if([TestValue] > 10000, [Value])
我认为问题在于即使我在index < earlier (index)
上进行了过滤,它仍在评估TestResult
以查找大于当前索引的索引。
我该怎么做才能让它发挥作用?
Here是一个成功实现递归的链接,但仅限于将先前结果乘以百分比的情况。
编辑:
对于结果应该是什么似乎有些混淆,所以我会尝试说明预期的结果:
原始表
| Index | Value |
-----------------
| 1 | 500 |
| 2 | 12000 |
| 3 | 24000 |
预期结果
| Index | Value | TestResult | TestValue
----------------------------------------
| 1 | 500 | NULL | NULL
| 2 | 12000 | 12000 | 500
| 3 | 15000 | 15000 | 500 + 12000 + 12000 = 24500
第三行是通过索引1和2的“值”的运行总计加上“TestResult”的运行总计来计算的。
答案 0 :(得分:0)
唯一的选择是分解您的查询,以便没有循环依赖。
这应该返回您所追求的结果:
TempValue = [value] +
CALCULATE(sum([value]),
filter(all('Table'),
[index] < earlier([index])))
TestResult = if([TempValue] > 10000, [Value],0)
TestValue = [TempValue] +
CALCULATE(sum([TestResult]),
filter(all('Table'),
[Index] < earlier([Index])))